From: Mike Brady Date: Sun, 1 Apr 2018 15:31:02 +0000 (+0100) Subject: Update the mpris service provider to deal with the new track metadata information. X-Git-Tag: 3.2RC1~7^2~14^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2cfbeca6adeeea59453c690d54d38ef2cba19702;p=thirdparty%2Fshairport-sync.git Update the mpris service provider to deal with the new track metadata information. --- diff --git a/mpris-service.c b/mpris-service.c index 7db1206d..27408972 100644 --- a/mpris-service.c +++ b/mpris-service.c @@ -105,30 +105,33 @@ void mpris_metadata_watcher(struct metadata_bundle *argc, __attribute__((unused) char *pt = st; int it; int non_zero = 0; + if (argc->track_metadata) { for (it = 0; it < 16; it++) { - if (argc->item_composite_id[it]) + if (argc->track_metadata->item_composite_id[it]) non_zero = 1; - sprintf(pt, "%02X", argc->item_composite_id[it]); + sprintf(pt, "%02X", argc->track_metadata->item_composite_id[it]); pt += 2; } + } *pt = 0; + if (non_zero) { // debug(1, "Set ID using composite ID: \"0x%s\".", st); char trackidstring[1024]; sprintf(trackidstring, "/org/gnome/ShairportSync/%s", st); GVariant *trackid = g_variant_new("o", trackidstring); g_variant_builder_add(dict_builder, "{sv}", "mpris:trackid", trackid); - } else if (argc->item_id) { + } else if ((argc->track_metadata) && (argc->track_metadata->item_id)) { char trackidstring[128]; // debug(1, "Set ID using mper ID: \"%u\".",argc->item_id); - sprintf(trackidstring, "/org/gnome/ShairportSync/mper_%u", argc->item_id); + sprintf(trackidstring, "/org/gnome/ShairportSync/mper_%u", argc->track_metadata->item_id); GVariant *trackid = g_variant_new("o", trackidstring); g_variant_builder_add(dict_builder, "{sv}", "mpris:trackid", trackid); } // Add the track length if it's non-zero - if (argc->songtime_in_milliseconds) { - uint64_t track_length_in_microseconds = argc->songtime_in_milliseconds; + if ((argc->track_metadata) && (argc->track_metadata->songtime_in_milliseconds)) { + uint64_t track_length_in_microseconds = argc->track_metadata->songtime_in_milliseconds; track_length_in_microseconds *= 1000; // to microseconds in 64-bit precision // Make up the track name and album name // debug(1, "Set tracklength to %lu.", track_length_in_microseconds); @@ -137,35 +140,35 @@ void mpris_metadata_watcher(struct metadata_bundle *argc, __attribute__((unused) } // Add the track name if there is one - if (argc->track_name) { + if ((argc->track_metadata) && (argc->track_metadata->track_name)) { // debug(1, "Track name set to \"%s\".", argc->track_name); - GVariant *trackname = g_variant_new("s", argc->track_name); + GVariant *trackname = g_variant_new("s", argc->track_metadata->track_name); g_variant_builder_add(dict_builder, "{sv}", "xesam:title", trackname); } // Add the album name if there is one - if (argc->album_name) { + if ((argc->track_metadata) && (argc->track_metadata->album_name)) { // debug(1, "Album name set to \"%s\".", argc->album_name); - GVariant *albumname = g_variant_new("s", argc->album_name); + GVariant *albumname = g_variant_new("s", argc->track_metadata->album_name); g_variant_builder_add(dict_builder, "{sv}", "xesam:album", albumname); } // Add the artists if there are any (actually there will be at most one, but put it in an array) - if (argc->artist_name) { + if ((argc->track_metadata) && (argc->track_metadata->artist_name)) { /* Build the artists array */ // debug(1,"Build artist array"); aa = g_variant_builder_new(G_VARIANT_TYPE("as")); - g_variant_builder_add(aa, "s", argc->artist_name); + g_variant_builder_add(aa, "s", argc->track_metadata->artist_name); GVariant *artists = g_variant_builder_end(aa); g_variant_builder_unref(aa); g_variant_builder_add(dict_builder, "{sv}", "xesam:artist", artists); } // Add the genres if there are any (actually there will be at most one, but put it in an array) - if (argc->genre) { + if ((argc->track_metadata) && (argc->track_metadata->genre)) { // debug(1,"Build genre"); aa = g_variant_builder_new(G_VARIANT_TYPE("as")); - g_variant_builder_add(aa, "s", argc->genre); + g_variant_builder_add(aa, "s", argc->track_metadata->genre); GVariant *genres = g_variant_builder_end(aa); g_variant_builder_unref(aa); g_variant_builder_add(dict_builder, "{sv}", "xesam:genre", genres);