]> git.ipfire.org Git - thirdparty/shairport-sync.git/commitdiff
Fix some of the advanced remote code
authorMike Brady <mikebrady@eircom.net>
Sun, 1 Apr 2018 12:54:41 +0000 (13:54 +0100)
committerMike Brady <mikebrady@eircom.net>
Sun, 1 Apr 2018 12:54:41 +0000 (13:54 +0100)
dacp.c
dbus-service.c
mdns_avahi.c

diff --git a/dacp.c b/dacp.c
index b6ad72ee7aed80b60b923659de8f8eb875328d2f..53aa47d709499b960e1b348c1d84a3b4fa5e5df0 100644 (file)
--- a/dacp.c
+++ b/dacp.c
@@ -177,7 +177,7 @@ int dacp_send_command(const char *command, char **body, ssize_t *bodysize) {
         response.code = 497; // Can't establish a socket to the DACP server
       } else {
         struct timeval tv;
-        tv.tv_sec = 1;
+        tv.tv_sec = 2;
         tv.tv_usec = 0;
         if (setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, (const char *)&tv, sizeof tv) == -1)
           debug(1, "Error %d setting receive timeout for DACP service.", errno);
@@ -187,7 +187,7 @@ int dacp_send_command(const char *command, char **body, ssize_t *bodysize) {
         // connect!
         // debug(1, "DACP socket created.");
         if (connect(sockfd, res->ai_addr, res->ai_addrlen) < 0) {
-          // debug(1, "DACP connect failed.");
+          debug(3, "DACP connect failed with errno %d.",errno);
           response.code = 496; // Can't connect to the DACP server
         } else {
           // debug(1,"DACP connect succeeded.");
@@ -367,6 +367,7 @@ void *dacp_monitor_thread_code(__attribute__((unused)) void *na) {
   int32_t revision_number = 1;
   while (1) {
     int result;
+    int changed = 0;
     sps_pthread_mutex_timedlock(
         &dacp_server_information_lock, 500000,
         "dacp_monitor_thread_code couldn't get DACP server information lock in 0.5 second!.", 1);
@@ -459,23 +460,20 @@ void *dacp_monitor_thread_code(__attribute__((unused)) void *na) {
                 case 2:
                   if (metadata_store.play_status != PS_STOPPED) {
                     metadata_store.play_status = PS_STOPPED;
-                    metadata_store.play_status_changed = 1;
-                    debug(1, "Play status changed to \"stopped\".");
+                    debug(1, "Play status is \"stopped\".");
                     metadata_store.changed = 1;
                   }
                   break;
                 case 3:
                   if (metadata_store.play_status != PS_PAUSED) {
                     metadata_store.play_status = PS_PAUSED;
-                    metadata_store.play_status_changed = 1;
-                    debug(1, "Play status changed to \"paused\".");
+                    debug(1, "Play status is \"paused\".");
                     metadata_store.changed = 1;
                   }
                   break;
                 case 4:
                   if (metadata_store.play_status != PS_PLAYING) {
                     metadata_store.play_status = PS_PLAYING;
-                    metadata_store.play_status_changed = 1;
                     debug(1, "Play status changed to \"playing\".");
                     metadata_store.changed = 1;
                   }
@@ -492,16 +490,14 @@ void *dacp_monitor_thread_code(__attribute__((unused)) void *na) {
                 case 0:
                   if (metadata_store.shuffle_status != SS_OFF) {
                     metadata_store.shuffle_status = SS_OFF;
-                    metadata_store.shuffle_status_changed = 1;
-                    debug(1, "Shuffle status changed to \"off\".");
+                    debug(1, "Shuffle status is \"off\".");
                     metadata_store.changed = 1;
                   }
                   break;
                 case 1:
                   if (metadata_store.shuffle_status != SS_ON) {
                     metadata_store.shuffle_status = SS_ON;
-                    metadata_store.shuffle_status_changed = 1;
-                    debug(1, "Shuffle status changed to \"on\".");
+                    debug(1, "Shuffle status is \"on\".");
                     metadata_store.changed = 1;
                   }
                   break;
@@ -517,24 +513,21 @@ void *dacp_monitor_thread_code(__attribute__((unused)) void *na) {
                 case 0:
                   if (metadata_store.repeat_status != RS_OFF) {
                     metadata_store.repeat_status = RS_OFF;
-                    metadata_store.repeat_status_changed = 1;
-                    debug(1, "Repeat status changed to \"none\".");
+                    debug(1, "Repeat status is \"none\".");
                     metadata_store.changed = 1;
                   }
                   break;
                 case 1:
                   if (metadata_store.repeat_status != RS_ONE) {
                     metadata_store.repeat_status = RS_ONE;
-                    metadata_store.repeat_status_changed = 1;
-                    debug(1, "Repeat status changed to \"one\".");
+                    debug(1, "Repeat status is \"one\".");
                     metadata_store.changed = 1;
                   }
                   break;
                 case 2:
                   if (metadata_store.repeat_status != RS_ALL) {
                     metadata_store.repeat_status = RS_ALL;
-                    metadata_store.repeat_status_changed = 1;
-                    debug(1, "Repeat status changed to \"all\".");
+                    debug(1, "Repeat status is \"all\".");
                     metadata_store.changed = 1;
                   }
                   break;
@@ -618,6 +611,7 @@ void *dacp_monitor_thread_code(__attribute__((unused)) void *na) {
                 t = sp - item_size;
                 r = ntohl(*(uint32_t *)(t));
                 metadata_store.songtime_in_milliseconds = ntohl(*(uint32_t *)(t));
+                metadata_store.changed = 1;
                 break;
 
               /*
index 150f5aca02225576f5e4a1faca5e3488edb3883e..cbd8c9e1a48dc921db48f640322354bcf8c5b083 100644 (file)
@@ -21,7 +21,7 @@ ShairportSyncAdvancedRemoteControl *shairportSyncAdvancedRemoteControlSkeleton =
 
 void dbus_metadata_watcher(struct metadata_bundle *argc, __attribute__((unused)) void *userdata) {
   char response[100];
-
+  char *th;
   shairport_sync_advanced_remote_control_set_volume(shairportSyncAdvancedRemoteControlSkeleton,
                                                     argc->speaker_volume);
 
@@ -48,6 +48,7 @@ void dbus_metadata_watcher(struct metadata_bundle *argc, __attribute__((unused))
   case PS_NOT_AVAILABLE:
     shairport_sync_remote_control_set_player_state(shairportSyncRemoteControlSkeleton,
                                                    "Not Available");
+    break;
   case PS_STOPPED:
     shairport_sync_remote_control_set_player_state(shairportSyncRemoteControlSkeleton, "Stopped");
     break;
@@ -63,24 +64,31 @@ void dbus_metadata_watcher(struct metadata_bundle *argc, __attribute__((unused))
 
   switch (argc->play_status) {
   case PS_NOT_AVAILABLE:
-    shairport_sync_advanced_remote_control_set_playback_status(
-        shairportSyncAdvancedRemoteControlSkeleton, "Not Available");
+    strcpy(response, "Not Available");
+    break;
   case PS_STOPPED:
-    shairport_sync_advanced_remote_control_set_playback_status(
-        shairportSyncAdvancedRemoteControlSkeleton, "Stopped");
+    strcpy(response, "Stopped");
     break;
   case PS_PAUSED:
-    shairport_sync_advanced_remote_control_set_playback_status(
-        shairportSyncAdvancedRemoteControlSkeleton, "Paused");
+    strcpy(response, "Paused");
     break;
   case PS_PLAYING:
-    shairport_sync_advanced_remote_control_set_playback_status(
-        shairportSyncAdvancedRemoteControlSkeleton, "Playing");
+    strcpy(response, "Playing");
     break;
   default:
     debug(1, "This should never happen.");
   }
 
+  th = shairport_sync_advanced_remote_control_get_playback_status(
+      shairportSyncAdvancedRemoteControlSkeleton);
+
+  // only set this if it's different
+  if ((th == NULL) || (strcasecmp(th, response) != 0)) {
+    debug(3, "Playback Status should be changed");
+    shairport_sync_advanced_remote_control_set_playback_status(
+        shairportSyncAdvancedRemoteControlSkeleton, response);
+  }
+
   switch (argc->repeat_status) {
   case RS_NOT_AVAILABLE:
     strcpy(response, "Not Available");
@@ -97,12 +105,12 @@ void dbus_metadata_watcher(struct metadata_bundle *argc, __attribute__((unused))
   default:
     debug(1, "This should never happen.");
   }
-  const char *th = shairport_sync_advanced_remote_control_get_loop_status(
+  th = shairport_sync_advanced_remote_control_get_loop_status(
       shairportSyncAdvancedRemoteControlSkeleton);
 
   // only set this if it's different
   if ((th == NULL) || (strcasecmp(th, response) != 0)) {
-    debug(1, "Loop Status should be changed");
+    debug(3, "Loop Status should be changed");
     shairport_sync_advanced_remote_control_set_loop_status(
         shairportSyncAdvancedRemoteControlSkeleton, response);
   }
index b1f8c31b97dc7d33468940a76a4ce7d88cd9a587..2f948bff24c6eaa62928abd412606b005f6a41bb 100644 (file)
@@ -78,7 +78,7 @@ static void resolve_callback(AvahiServiceResolver *r, AVAHI_GCC_UNUSED AvahiIfIn
   /* Called whenever a service has been resolved successfully or timed out */
   switch (event) {
   case AVAHI_RESOLVER_FAILURE:
-    debug(1, "(Resolver) Failed to resolve service '%s' of type '%s' in domain '%s': %s.", name,
+    debug(2, "(Resolver) Failed to resolve service '%s' of type '%s' in domain '%s': %s.", name,
           type, domain, avahi_strerror(avahi_client_errno(avahi_service_resolver_get_client(r))));
     break;
   case AVAHI_RESOLVER_FOUND: {
@@ -131,7 +131,7 @@ static void browse_callback(AvahiServiceBrowser *b, AvahiIfIndex interface, Avah
             avahi_strerror(avahi_client_errno(dbs->service_client)));
     break;
   case AVAHI_BROWSER_REMOVE:
-    debug(1, "(Browser) REMOVE: service '%s' of type '%s' in domain '%s'.", name, type, domain);
+    debug(3, "(Browser) REMOVE: service '%s' of type '%s' in domain '%s'.", name, type, domain);
 #ifdef HAVE_DACP_CLIENT
     char *dacpid = strstr(name, "iTunes_Ctrl_");
     if (dacpid) {