Hallo, ich bin’s!!
Ich habe also Zugriff auf das externe Plugin ![]()
Ich wollte Spotify integrieren:
Gibt es keine Möglichkeit, einen einzigen Selektor (UUID) zu haben?
Hallo, ich bin’s!!
Ich habe also Zugriff auf das externe Plugin ![]()
Ich wollte Spotify integrieren:
Ich werde schauen
@pierre-gilles, Claude sagt, dass das Problem vom Core kommt. Hier ist seine Analyse. Du kannst es dir ansehen
Die Diagnose
Wenn das Frontend das entdeckte Gerät an /api/v1/device POSTet, sendet es keinen Selector. Der Core generiert ihn dann in einem Sequelize beforeValidate-Hook:
server/utils/addSelector.js:11-17
function addSelector(item) {
if (item.selector) {
item.selector = slugify(item.selector);
} else if (item.name) {
item.selector = slugify(item.name); // <-- hier
}
}
Daher ist selector = slugify(device.name), ohne jede Deduplizierung, obwohl die Spalte unique: true ist (server/models/device.js:32-36). Die UNIQUE-Konstrainte wird ignoriert, Sequelize wirft einen SequelizeUniqueConstraintError, und errorMiddleware.js:42-49 verwandelt ihn in einen 409 auf dem Attribut selector — genau das, was der Forenmitglied sieht.
Sein Spotify Connect-Gerät heißt « MacBook Pro de … » → selector macbook-pro-de-..., der bereits bei ihm existiert (wahrscheinlich ein anderes Gerät mit dem gleichen Namen: ein Chromecast, ein AirPlay, ein Gerät einer anderen Integration oder ein bereits hinzugefügter und dann umbenannter Spotify).
Was das impliziert
Das Problem liegt nicht im Spotify-Plugin: Unsere external_id sind eindeutig (ext:<selector-integration>:spotify:<deviceId>), die external_id des Spotify-Geräts gerät nie in Konflikt. Es ist eine Grenze des Cores: Der Selector wird vom Namen abgeleitet, und zwei Geräte mit dem gleichen Namen können nicht erstellt werden.
Zu beachten ist, dass der Core bereits anderswo besser kann — externalIntegration.buildSelector.js:25 schleift genau, um einen freien Kandidaten zu finden:
while ((await db.Service.findOne({ where: { selector: candidate } })) !== null) {
Diese Logik wurde einfach nie auf die Geräte angewendet.
@Will_71 Du hast recht, wir sollten diesen Fall behandeln
Ich kümmere mich darum in einem PR
Das ist hier korrigiert:
Das Update ist in der Version 4.84.4 live: