Fix some of the advanced remote code
This commit is contained in:
@@ -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;
|
||||
|
||||
/*
|
||||
|
||||
+19
-11
@@ -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);
|
||||
}
|
||||
|
||||
+2
-2
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user