]> git.ipfire.org Git - thirdparty/shairport-sync.git/commitdiff
Add play/pause/stop MPRIS and quieten some debug messages
authorMike Brady <mikebrady@eircom.net>
Wed, 21 Feb 2018 18:30:32 +0000 (18:30 +0000)
committerMike Brady <mikebrady@eircom.net>
Wed, 21 Feb 2018 18:30:32 +0000 (18:30 +0000)
metadata_hub.c
metadata_hub.h
mpris-service.c
player.c

index 1524dd1845ac2326bacc6f0825026b746fe4915e..0161077acae013c4a2b93118ceafd5e508d6391e 100644 (file)
@@ -90,12 +90,12 @@ void metadata_hub_modify_prolog(void) {
 }
 
 void metadata_hub_release_track_artwork(void) {
-  debug(1,"release track artwork");
+  // debug(1,"release track artwork");
   release_char_string(&metadata_store.cover_art_pathname);
 }
 
 void metadata_hub_reset_track_metadata(void) {
-  debug(1,"release track metadata");
+  //debug(1,"release track metadata");
   release_char_string(&metadata_store.track_name);
   release_char_string(&metadata_store.artist_name);
   release_char_string(&metadata_store.album_name);
@@ -259,13 +259,17 @@ void metadata_hub_process_metadata(uint32_t type, uint32_t code, char *data, uin
 
   if (type == 'core') {
     switch (code) {
+    case 'mper':
+      metadata_store.item_id = ntohl(*(uint32_t*)data);
+      debug(2, "MH Item ID set to: \"%u\"", metadata_store.item_id);
+      break;
     case 'asal':
       if ((metadata_store.album_name == NULL) ||
           (strncmp(metadata_store.album_name, data, length) != 0)) {
         if (metadata_store.album_name)
           free(metadata_store.album_name);
         metadata_store.album_name = strndup(data, length);
-        debug(1, "MH Album name set to: \"%s\"", metadata_store.album_name);
+        debug(2, "MH Album name set to: \"%s\"", metadata_store.album_name);
         metadata_store.album_name_changed = 1;
         metadata_store.changed = 1;
       }
@@ -276,7 +280,7 @@ void metadata_hub_process_metadata(uint32_t type, uint32_t code, char *data, uin
         if (metadata_store.artist_name)
           free(metadata_store.artist_name);
         metadata_store.artist_name = strndup(data, length);
-        debug(1, "MH Artist name set to: \"%s\"", metadata_store.artist_name);
+        debug(2, "MH Artist name set to: \"%s\"", metadata_store.artist_name);
         metadata_store.artist_name_changed = 1;
         metadata_store.changed = 1;
       }
@@ -287,7 +291,7 @@ void metadata_hub_process_metadata(uint32_t type, uint32_t code, char *data, uin
         if (metadata_store.comment)
           free(metadata_store.comment);
         metadata_store.comment = strndup(data, length);
-        debug(1, "MH Comment set to: \"%s\"", metadata_store.comment);
+        debug(2, "MH Comment set to: \"%s\"", metadata_store.comment);
         metadata_store.comment_changed = 1;
         metadata_store.changed = 1;
       }
@@ -297,7 +301,7 @@ void metadata_hub_process_metadata(uint32_t type, uint32_t code, char *data, uin
         if (metadata_store.genre)
           free(metadata_store.genre);
         metadata_store.genre = strndup(data, length);
-        debug(1, "MH Genre set to: \"%s\"", metadata_store.genre);
+        debug(2, "MH Genre set to: \"%s\"", metadata_store.genre);
         metadata_store.genre_changed = 1;
         metadata_store.changed = 1;
       }
@@ -308,7 +312,7 @@ void metadata_hub_process_metadata(uint32_t type, uint32_t code, char *data, uin
         if (metadata_store.track_name)
           free(metadata_store.track_name);
         metadata_store.track_name = strndup(data, length);
-        debug(1, "MH Track name set to: \"%s\"", metadata_store.track_name);
+        debug(2, "MH Track name set to: \"%s\"", metadata_store.track_name);
         metadata_store.track_name_changed = 1;
         metadata_store.changed = 1;
       }
@@ -319,7 +323,7 @@ void metadata_hub_process_metadata(uint32_t type, uint32_t code, char *data, uin
         if (metadata_store.composer)
           free(metadata_store.composer);
         metadata_store.composer = strndup(data, length);
-        debug(1, "MH Composer set to: \"%s\"", metadata_store.composer);
+        debug(2, "MH Composer set to: \"%s\"", metadata_store.composer);
         metadata_store.composer_changed = 1;
         metadata_store.changed = 1;
       }
@@ -330,7 +334,7 @@ void metadata_hub_process_metadata(uint32_t type, uint32_t code, char *data, uin
         if (metadata_store.file_kind)
           free(metadata_store.file_kind);
         metadata_store.file_kind = strndup(data, length);
-        debug(1, "MH File Kind set to: \"%s\"", metadata_store.file_kind);
+        debug(2, "MH File Kind set to: \"%s\"", metadata_store.file_kind);
         metadata_store.file_kind_changed = 1;
         metadata_store.changed = 1;
       }
@@ -341,7 +345,7 @@ void metadata_hub_process_metadata(uint32_t type, uint32_t code, char *data, uin
         if (metadata_store.file_kind)
           free(metadata_store.file_kind);
         metadata_store.file_kind = strndup(data, length);
-        debug(1, "MH File Kind set to: \"%s\"", metadata_store.file_kind);
+        debug(2, "MH File Kind set to: \"%s\"", metadata_store.file_kind);
         metadata_store.file_kind_changed = 1;
         metadata_store.changed = 1;
       }
@@ -352,7 +356,7 @@ void metadata_hub_process_metadata(uint32_t type, uint32_t code, char *data, uin
         if (metadata_store.sort_as)
           free(metadata_store.sort_as);
         metadata_store.sort_as = strndup(data, length);
-        debug(1, "MH Sort As set to: \"%s\"", metadata_store.sort_as);
+        debug(2, "MH Sort As set to: \"%s\"", metadata_store.sort_as);
         metadata_store.sort_as_changed = 1;
         metadata_store.changed = 1;
       }
@@ -387,19 +391,19 @@ void metadata_hub_process_metadata(uint32_t type, uint32_t code, char *data, uin
       break;
 
     case 'mdst':
-      debug(1, "MH Metadata stream processing start.");
+      debug(2, "MH Metadata stream processing start.");
       metadata_hub_modify_prolog();
       metadata_hub_reset_track_metadata();
       metadata_hub_release_track_artwork();
       break;
     case 'mden':
       metadata_hub_modify_epilog(1);
-      debug(1, "MH Metadata stream processing end.");
+      debug(2, "MH Metadata stream processing end.");
       break;
     case 'PICT':
       if (length > 16) {
         metadata_hub_modify_prolog();
-        debug(1, "MH Picture received, length %u bytes.", length);
+        debug(2, "MH Picture received, length %u bytes.", length);
         if (metadata_store.cover_art_pathname)
           free(metadata_store.cover_art_pathname);
         metadata_store.cover_art_pathname = metadata_write_image_file(data, length);
@@ -430,6 +434,12 @@ void metadata_hub_process_metadata(uint32_t type, uint32_t code, char *data, uin
         metadata_hub_modify_epilog(1);
       }
       break;
+    case 'pbeg':
+    case 'pend':
+    case 'pfls':
+    case 'prsm':
+      break;
+    
     default: {
       char typestring[5];
       *(uint32_t *)typestring = htonl(type);
index 2f7c97350f114ee8fe769102195fd132e842c9d2..af55d962e05de8798c0067e0d4e45b6280dbf9d1 100644 (file)
@@ -6,9 +6,9 @@
 #define number_of_watchers 2
 
 enum play_status_type {
-  PS_PLAYING = 0,
+  PS_STOPPED = 0,
   PS_PAUSED,
-  PS_STOPPED,
+  PS_PLAYING,
 } play_status_type;
 
 enum shuffle_status_type {
index ed7e68ee7a837628426d4ef9581841d4edc97e0c..1730393f1b245c0ee998c2f49fb420d7a01d891d 100644 (file)
@@ -17,6 +17,7 @@
 void mpris_metadata_watcher(struct metadata_bundle *argc, void *userdata) {
   // debug(1, "MPRIS metadata watcher called");
   char response[100];
+
   switch (argc->repeat_status) {
   case RS_NONE:
     strcpy(response, "None");
@@ -31,6 +32,21 @@ void mpris_metadata_watcher(struct metadata_bundle *argc, void *userdata) {
 
   // debug(1,"Set loop status to \"%s\"",response);
   media_player2_player_set_loop_status(mprisPlayerPlayerSkeleton, response);
+  switch (argc->player_state) {
+  case PS_STOPPED:
+    strcpy(response, "Stopped");
+    break;
+  case PS_PAUSED:
+    strcpy(response, "Paused");
+    break;
+  case PS_PLAYING:
+    strcpy(response, "Playing");
+    break;
+  }
+
+  // debug(1,"From player_state, set playback status to \"%s\"",response);
+  media_player2_player_set_playback_status(mprisPlayerPlayerSkeleton, response); 
 
   GVariantBuilder *dict_builder, *aa;
  
@@ -63,30 +79,39 @@ void mpris_metadata_watcher(struct metadata_bundle *argc, void *userdata) {
   }
   *pt = 0;
   if (non_zero) {
-    // debug(1, "Item composite ID set to 0x%s.", st);
+    //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) {
+    char trackidstring[128];
+    //debug(1, "Set ID using mper ID: \"%u\".",argc->item_id);
+   sprintf(trackidstring, "/org/gnome/ShairportSync/mper_%u", argc->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;
-    track_length_in_microseconds *= 1000; // to microseconds in 64-bit precision
+   uint64_t track_length_in_microseconds = argc->songtime_in_milliseconds;
+   track_length_in_microseconds *= 1000; // to microseconds in 64-bit precision
     // Make up the track name and album name
-    GVariant *tracklength = g_variant_new("x", track_length_in_microseconds);
-    g_variant_builder_add(dict_builder, "{sv}", "mpris:length", tracklength);
+   //debug(1, "Set tracklength to %lu.", track_length_in_microseconds);
+   GVariant *tracklength = g_variant_new("x", track_length_in_microseconds);
+   g_variant_builder_add(dict_builder, "{sv}", "mpris:length", tracklength);
   }
 
   // Add the track name if there is one
   if (argc->track_name) {
+    // debug(1, "Track name set to \"%s\".", argc->track_name);
     GVariant *trackname = g_variant_new("s", argc->track_name);
     g_variant_builder_add(dict_builder, "{sv}", "xesam:title", trackname);
   }
   
   // Add the album name if there is one
    if (argc->album_name) {
+    // debug(1, "Album name set to \"%s\".", argc->album_name);
     GVariant *albumname = g_variant_new("s", argc->album_name);
     g_variant_builder_add(dict_builder, "{sv}", "xesam:album", albumname);
   }
index 8fa9042a24bf20dc35854c58b1c349af937b73fb..3ab228f8571fe5dacac1dda0aafe4d5d18353c53 100644 (file)
--- a/player.c
+++ b/player.c
@@ -1057,6 +1057,12 @@ static abuf_t *buffer_get_frame(rtsp_conn_info *conn) {
             send_ssnc_metadata('prsm', NULL, 0,
                                0); // "resume", but don't wait if the queue is locked
 #endif
+#ifdef HAVE_METADATA_HUB
+            metadata_hub_modify_prolog();
+            metadata_store.player_state = PS_PLAYING;
+            metadata_hub_modify_epilog(1);
+#endif
+
           }
         }
       }