NEWS
Fehler in Squeezbox-Adapter
-
Hallo,
ich hab jetzt noch mal genau die Funktion des Squeezebox-Adapters studiert und auch herausgefunden wann die Cover-URL wechseln: wenn des Adapter gestartet wird, oder die aktuelle Playlist wechselt. Dann wird das erste Cover der neuen Playlist angezeigt. Um, wie eigentlich gewünscht, die Cover-URL des aktuellen Songs anzuzeigen, muss meiner Meinung nach erstmal in Zeile 374 aus
device.player.runTelnetCmd('status 0 1 tags:K'); // get the artwork URL
ein
device.player.runTelnetCmd('status - 1 tags:K'); // get the artwork URL
gemacht werden. Im Manual steht dazu:
" <playerid>status <start><itemsperresponse><taggedparameters>The "status" query returns the complete status about a given player, including the current playlist. Set the <start>parameter to "-" to get the playlist data starting from the current song. "
Diese Änderung führt schon mal dazu, dass auch bei jedem Songwechsel über das "Status - 1 tags:K" Kommando das aktuelle (!) Cover abgefragt wird. (zu sehen im Log wenn auf debug)
Leider wird es noch nicht in das entsprechende Objekt geschrieben. Da bin ich leider auch nicht durchgestiegen, wie das genau funktioniert. Es kann je nach dem ob es ein lokaler song oder ein stream ist eine http-Adresse in der Rückgabe enthalten sein, oder die URL wird (bei lokalen songs) einfach generiert.
Wäre wirklich spitzenmäßig wenn da noch mal jemand drüber schauen, der in JS fit ist. Leider gibts ja nicht mehr all zu viele Nutzer der Squeezebox hier…
(ab Zeile 423)
if (eventData[0] == 'status') { if (!device.searchingArtwork) { return; } device.searchingArtwork = false; var last = eventData[eventData.length - 1]; const ARTWORK_URL_PREFIX = 'artwork_url:'; var artworkUrl = ''; if (last.indexOf(ARTWORK_URL_PREFIX) === 0) { artworkUrl = last.substr(ARTWORK_URL_PREFIX.length); if (artworkUrl.indexOf('//') === -1) { artworkUrl = 'http://' + adapter.config.server + ':' + httpPort + '/' + artworkUrl; } } else { artworkUrl = 'http://' + adapter.config.server + ':' + httpPort + '/music/current/cover.jpg?player=' + device.mac + '&t=' + (new Date().getTime() % 100000); } setStateAck(device.channelName + '.currentArtwork', artworkUrl); }
Der ganze Code ist https://github.com/UncleSamSwiss/ioBrok … eezebox.jszu finden.</start></taggedparameters></itemsperresponse></start></playerid>
-
Ich habs gerade noch mal ausprobiert- Wenn die kleine Änderung, die ich oben erklärt habe, gemacht wird, dann funktioniert die Cover-Darstellung wieder wie sie soll.
Ich werde es eben bei Github eintragen.
…War vielleicht gestern abend doch zu spät...