]> git.ipfire.org Git - thirdparty/shairport-sync.git/commitdiff
Only send shuffle commands if a change is necessary
authorMike Brady <mikebrady@eircom.net>
Sun, 8 Sep 2019 14:53:52 +0000 (15:53 +0100)
committerMike Brady <mikebrady@eircom.net>
Sun, 8 Sep 2019 14:53:52 +0000 (15:53 +0100)
dbus-service.c

index 2294a706d29fe3018277082294dc954a3508c7dd..2393675b791d045361d71ba5639f1d5667453df5 100644 (file)
@@ -25,6 +25,8 @@ guint ownerID = 0;
 
 void dbus_metadata_watcher(struct metadata_bundle *argc, __attribute__((unused)) void *userdata) {
   char response[100];
+  gboolean current_status, new_status;
+  
   const char *th;
   shairport_sync_advanced_remote_control_set_volume(shairportSyncAdvancedRemoteControlSkeleton,
                                                     argc->speaker_volume);
@@ -129,21 +131,30 @@ void dbus_metadata_watcher(struct metadata_bundle *argc, __attribute__((unused))
         shairportSyncAdvancedRemoteControlSkeleton, response);
   }
 
+  
   switch (argc->shuffle_status) {
   case SS_NOT_AVAILABLE:
-    shairport_sync_advanced_remote_control_set_shuffle(shairportSyncAdvancedRemoteControlSkeleton,
-                                                       FALSE);
+    new_status = FALSE;
     break;
   case SS_OFF:
-    shairport_sync_advanced_remote_control_set_shuffle(shairportSyncAdvancedRemoteControlSkeleton,
-                                                       FALSE);
+    new_status = FALSE;
     break;
   case SS_ON:
-    shairport_sync_advanced_remote_control_set_shuffle(shairportSyncAdvancedRemoteControlSkeleton,
-                                                       TRUE);
+    new_status = TRUE;
     break;
   default:
-    debug(1, "This should never happen.");
+    new_status = FALSE;
+    debug(1, "Unknown shuffle status -- this should never happen.");
+  }
+  
+  current_status = shairport_sync_advanced_remote_control_get_shuffle(
+      shairportSyncAdvancedRemoteControlSkeleton);
+  
+  // only set this if it's different
+  if (current_status != new_status) {
+    debug(3, "Shuffle State should be changed");
+    shairport_sync_advanced_remote_control_set_shuffle(
+        shairportSyncAdvancedRemoteControlSkeleton, new_status);
   }
 
   // Build the metadata array