From: Mike Brady Date: Sun, 1 Apr 2018 12:54:41 +0000 (+0100) Subject: Fix some of the advanced remote code X-Git-Tag: 3.2RC1~7^2~19 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=07b7e64a48ea446567bde4e2a6eecbfc71aad63a;p=thirdparty%2Fshairport-sync.git Fix some of the advanced remote code --- diff --git a/dacp.c b/dacp.c index b6ad72ee..53aa47d7 100644 --- 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; /* diff --git a/dbus-service.c b/dbus-service.c index 150f5aca..cbd8c9e1 100644 --- a/dbus-service.c +++ b/dbus-service.c @@ -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); } diff --git a/mdns_avahi.c b/mdns_avahi.c index b1f8c31b..2f948bff 100644 --- a/mdns_avahi.c +++ b/mdns_avahi.c @@ -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) {