[squeezebox] Add new channels for additional tags (#14201)

* New channels for additional tags

Signed-off-by: Mark Hilbush <mark@hilbush.com>
This commit is contained in:
Mark Hilbush 2023-01-11 07:56:40 -05:00 committed by GitHub
parent a1ef87cca9
commit 858ff4b244
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 153 additions and 2 deletions

View File

@ -115,6 +115,11 @@ All devices support some of the following channels:
| artist | String | Artist name of the current song |
| year | String | Release year of the current song |
| genre | String | Genre name of the current song |
| albumArtist | String | Main artist of the entire album |
| trackArtist | String | Main artist of the track |
| band | String | Band/orchestra that performed the work |
| composer | String | Original composer of the work |
| conductor | String | Person who conducted the performance |
| coverartdata | Image | Image data of cover art of the current song |
| ircode | String | Received IR code |
| numberPlaylistTracks | Number | Number of playlist tracks |

View File

@ -59,6 +59,11 @@ public class SqueezeBoxBindingConstants {
public static final String CHANNEL_ARTIST = "artist";
public static final String CHANNEL_YEAR = "year";
public static final String CHANNEL_GENRE = "genre";
public static final String CHANNEL_ALBUM_ARTIST = "albumArtist";
public static final String CHANNEL_TRACK_ARTIST = "trackArtist";
public static final String CHANNEL_BAND = "band";
public static final String CHANNEL_COMPOSER = "composer";
public static final String CHANNEL_CONDUCTOR = "conductor";
public static final String CHANNEL_COVERART_DATA = "coverartdata";
public static final String CHANNEL_IRCODE = "ircode";
public static final String CHANNEL_IP = "ip";

View File

@ -191,6 +191,26 @@ public class SqueezeBoxPlayerDiscoveryParticipant extends AbstractDiscoveryServi
public void genreChangeEvent(String mac, String genre) {
}
@Override
public void albumArtistChangeEvent(String mac, String albumArtist) {
}
@Override
public void trackArtistChangeEvent(String mac, String trackArtist) {
}
@Override
public void bandChangeEvent(String mac, String band) {
}
@Override
public void composerChangeEvent(String mac, String composer) {
}
@Override
public void conductorChangeEvent(String mac, String conductor) {
}
@Override
public void remoteTitleChangeEvent(String mac, String title) {
}

View File

@ -201,6 +201,26 @@ public final class SqueezeBoxNotificationListener implements SqueezeBoxPlayerEve
public void genreChangeEvent(String mac, String genre) {
}
@Override
public void albumArtistChangeEvent(String mac, String albumArtist) {
}
@Override
public void trackArtistChangeEvent(String mac, String trackArtist) {
}
@Override
public void bandChangeEvent(String mac, String band) {
}
@Override
public void composerChangeEvent(String mac, String composer) {
}
@Override
public void conductorChangeEvent(String mac, String conductor) {
}
@Override
public void remoteTitleChangeEvent(String mac, String title) {
}

View File

@ -73,6 +73,16 @@ public interface SqueezeBoxPlayerEventListener {
void genreChangeEvent(String mac, String genre);
void albumArtistChangeEvent(String mac, String albumArtist);
void trackArtistChangeEvent(String mac, String trackArtist);
void bandChangeEvent(String mac, String band);
void composerChangeEvent(String mac, String composer);
void conductorChangeEvent(String mac, String conductor);
void remoteTitleChangeEvent(String mac, String title);
void irCodeChangeEvent(String mac, String ircode);

View File

@ -436,6 +436,31 @@ public class SqueezeBoxPlayerHandler extends BaseThingHandler implements Squeeze
updateChannel(mac, CHANNEL_ARTIST, new StringType(artist));
}
@Override
public void albumArtistChangeEvent(String mac, String albumArtist) {
updateChannel(mac, CHANNEL_ALBUM_ARTIST, new StringType(albumArtist));
}
@Override
public void trackArtistChangeEvent(String mac, String trackArtist) {
updateChannel(mac, CHANNEL_TRACK_ARTIST, new StringType(trackArtist));
}
@Override
public void bandChangeEvent(String mac, String band) {
updateChannel(mac, CHANNEL_BAND, new StringType(band));
}
@Override
public void composerChangeEvent(String mac, String composer) {
updateChannel(mac, CHANNEL_COMPOSER, new StringType(composer));
}
@Override
public void conductorChangeEvent(String mac, String conductor) {
updateChannel(mac, CHANNEL_CONDUCTOR, new StringType(conductor));
}
@Override
public void coverArtChangeEvent(String mac, String coverArtUrl) {
updateChannel(mac, CHANNEL_COVERART_DATA, createImage(downloadImage(mac, coverArtUrl)));

View File

@ -576,7 +576,7 @@ public class SqueezeBoxServerHandler extends BaseBridgeHandler {
players.put(macAddress, player);
updatePlayer(listener -> listener.playerAdded(player));
// tell the server we want to subscribe to player updates
sendCommand(player.macAddress + " status - 1 subscribe:10 tags:yagJlNKjc");
sendCommand(player.macAddress + " status - 1 subscribe:10 tags:yagJlNKjcA");
}
}
for (final SqueezeBoxPlayer player : players.values()) {
@ -674,7 +674,8 @@ public class SqueezeBoxServerHandler extends BaseBridgeHandler {
}
private void handleStatusMessage(final String mac, String[] messageParts) {
String remoteTitle = "", artist = "", album = "", genre = "", year = "";
String remoteTitle = "", artist = "", album = "", genre = "", year = "", albumArtist = "", trackArtist = "",
band = "", composer = "", conductor = "";
boolean coverart = false;
String coverid = null;
String artworkUrl = null;
@ -745,6 +746,26 @@ public class SqueezeBoxServerHandler extends BaseBridgeHandler {
else if ("genre".equals(entry.key)) {
genre = entry.value;
}
// Parameter Album Artist
else if ("albumartist".equals(entry.key)) {
albumArtist = entry.value;
}
// Parameter Track Artist
else if ("trackartist".equals(entry.key)) {
trackArtist = entry.value;
}
// Parameter Band
else if ("band".equals(entry.key)) {
band = entry.value;
}
// Parameter Composer
else if ("composer".equals(entry.key)) {
composer = entry.value;
}
// Parameter Conductor
else if ("conductor".equals(entry.key)) {
conductor = entry.value;
}
// Parameter Year
else if ("year".equals(entry.key)) {
year = entry.value;
@ -776,6 +797,11 @@ public class SqueezeBoxServerHandler extends BaseBridgeHandler {
final String finalAlbum = album;
final String finalGenre = genre;
final String finalYear = year;
final String finalAlbumArtist = albumArtist;
final String finalTrackArtist = trackArtist;
final String finalBand = band;
final String finalComposer = composer;
final String finalConductor = conductor;
updatePlayer(listener -> {
listener.coverArtChangeEvent(mac, finalUrl);
@ -784,6 +810,11 @@ public class SqueezeBoxServerHandler extends BaseBridgeHandler {
listener.albumChangeEvent(mac, finalAlbum);
listener.genreChangeEvent(mac, finalGenre);
listener.yearChangeEvent(mac, finalYear);
listener.albumArtistChangeEvent(mac, finalAlbumArtist);
listener.trackArtistChangeEvent(mac, finalTrackArtist);
listener.bandChangeEvent(mac, finalBand);
listener.composerChangeEvent(mac, finalComposer);
listener.conductorChangeEvent(mac, finalConductor);
});
}

View File

@ -79,6 +79,11 @@
<channel id="artist" typeId="artist"/>
<channel id="year" typeId="year"/>
<channel id="genre" typeId="genre"/>
<channel id="albumArtist" typeId="albumArtist"/>
<channel id="trackArtist" typeId="trackArtist"/>
<channel id="band" typeId="band"/>
<channel id="composer" typeId="composer"/>
<channel id="conductor" typeId="conductor"/>
<channel id="coverartdata" typeId="coverartdata"/>
<channel id="ircode" typeId="ircode"/>
<channel id="numberPlaylistTracks" typeId="numberPlaylistTracks"/>
@ -282,6 +287,36 @@
<description>Genre name of the current song</description>
<state readOnly="true" pattern="%s"></state>
</channel-type>
<channel-type id="albumArtist" advanced="true">
<item-type>String</item-type>
<label>Album Artist</label>
<description>Main artist for the album</description>
<state readOnly="true" pattern="%s"></state>
</channel-type>
<channel-type id="trackArtist" advanced="true">
<item-type>String</item-type>
<label>Track Artist</label>
<description>Main artist for the track</description>
<state readOnly="true" pattern="%s"></state>
</channel-type>
<channel-type id="band" advanced="true">
<item-type>String</item-type>
<label>Band/Orchestra</label>
<description>Band/orchestra performing the work</description>
<state readOnly="true" pattern="%s"></state>
</channel-type>
<channel-type id="composer" advanced="true">
<item-type>String</item-type>
<label>Composer</label>
<description>Original composer of the work</description>
<state readOnly="true" pattern="%s"></state>
</channel-type>
<channel-type id="conductor" advanced="true">
<item-type>String</item-type>
<label>Conductor</label>
<description>Conductor</description>
<state readOnly="true" pattern="%s"></state>
</channel-type>
<channel-type id="coverartdata">
<item-type>Image</item-type>
<label>Cover Art</label>