]> git.ipfire.org Git - thirdparty/shairport-sync.git/commitdiff
Update the mpris service provider to deal with the new track metadata information.
authorMike Brady <mikebrady@eircom.net>
Sun, 1 Apr 2018 15:31:02 +0000 (16:31 +0100)
committerMike Brady <mikebrady@eircom.net>
Sun, 1 Apr 2018 15:31:02 +0000 (16:31 +0100)
mpris-service.c

index 7db1206dc23e2e9ca8cc13da0ce74f7aef674793..27408972ed88f7c2c657143386a8d265a94af0ee 100644 (file)
@@ -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);