From 365843faa6449850419654745694a6727d6139ae Mon Sep 17 00:00:00 2001 From: Mike Brady Date: Thu, 21 Jun 2018 17:44:26 +0100 Subject: [PATCH] beginning to add a progress string item to the native dbus interface --- dbus-service.c | 11 +++++++++++ metadata_hub.c | 10 ++++++++++ metadata_hub.h | 1 + org.gnome.ShairportSync.xml | 1 + 4 files changed, 23 insertions(+) diff --git a/dbus-service.c b/dbus-service.c index 20150abd..1a952ee9 100644 --- a/dbus-service.c +++ b/dbus-service.c @@ -43,6 +43,17 @@ void dbus_metadata_watcher(struct metadata_bundle *argc, __attribute__((unused)) shairport_sync_advanced_remote_control_set_available(shairportSyncAdvancedRemoteControlSkeleton, FALSE); } + + if (argc->progress_string) { + debug(1, "Check progress string"); + th = shairport_sync_remote_control_get_progress_string( + shairportSyncRemoteControlSkeleton); + if ((th == NULL) || (strcasecmp(th, argc->progress_string) != 0)) { + debug(1, "Progress string should be changed"); + shairport_sync_remote_control_set_progress_string( + shairportSyncRemoteControlSkeleton, argc->progress_string); + } + } switch (argc->player_state) { case PS_NOT_AVAILABLE: diff --git a/metadata_hub.c b/metadata_hub.c index 4f3fc0f8..d1006b43 100644 --- a/metadata_hub.c +++ b/metadata_hub.c @@ -517,6 +517,16 @@ void metadata_hub_process_metadata(uint32_t type, uint32_t code, char *data, uin } break; */ + case 'prgr': + if ((metadata_store.progress_string == NULL) || + (strncmp(metadata_store.progress_string, data, length) != 0)) { + metadata_hub_modify_prolog(); + release_char_string(&metadata_store.progress_string); + metadata_store.progress_string = strndup(data, length); + debug(1, "MH Progress String set to: \"%s\"", metadata_store.progress_string); + metadata_hub_modify_epilog(1); + } + break; case 'svip': if ((metadata_store.server_ip == NULL) || (strncmp(metadata_store.server_ip, data, length) != 0)) { diff --git a/metadata_hub.h b/metadata_hub.h index 8d003703..66368f98 100644 --- a/metadata_hub.h +++ b/metadata_hub.h @@ -56,6 +56,7 @@ typedef struct metadata_bundle { char *client_ip; // IP number used by the audio source (i.e. the "client"), which is also the DACP // server char *server_ip; // IP number used by Shairport Sync + char *progress_string; // progress string, emitted by the source from time to time int player_thread_active; // true if a play thread is running int dacp_server_active; // true if there's a reachable DACP server (assumed to be the Airplay // client) ; false otherwise diff --git a/org.gnome.ShairportSync.xml b/org.gnome.ShairportSync.xml index ae404be7..aa693fd5 100644 --- a/org.gnome.ShairportSync.xml +++ b/org.gnome.ShairportSync.xml @@ -33,6 +33,7 @@ +