Move DACP volume detection and control to a new Advanced Remote Control D-Bus stanza.
This commit is contained in:
+36
-27
@@ -16,21 +16,22 @@
|
||||
|
||||
ShairportSyncDiagnostics *shairportSyncDiagnosticsSkeleton;
|
||||
ShairportSyncRemoteControl *shairportSyncRemoteControlSkeleton;
|
||||
ShairportSyncAdvancedRemoteControl *shairportSyncAdvancedRemoteControlSkeleton;
|
||||
|
||||
void dbus_metadata_watcher(struct metadata_bundle *argc, __attribute__((unused)) void *userdata) {
|
||||
// debug(1, "DBUS metadata watcher called");
|
||||
shairport_sync_set_volume(shairportSyncSkeleton, argc->speaker_volume);
|
||||
shairport_sync_advanced_remote_control_set_volume(shairportSyncAdvancedRemoteControlSkeleton,
|
||||
argc->speaker_volume);
|
||||
|
||||
// debug(1, "No diagnostics watcher required");
|
||||
|
||||
// debug(1, "DBUS remote control watcher called");
|
||||
|
||||
shairport_sync_remote_control_set_airplay_volume(shairportSyncRemoteControlSkeleton,
|
||||
argc->airplay_volume);
|
||||
argc->airplay_volume);
|
||||
|
||||
if (argc->dacp_server_active)
|
||||
shairport_sync_remote_control_set_server(shairportSyncRemoteControlSkeleton,
|
||||
argc->client_ip);
|
||||
shairport_sync_remote_control_set_server(shairportSyncRemoteControlSkeleton, argc->client_ip);
|
||||
else
|
||||
shairport_sync_remote_control_set_server(shairportSyncRemoteControlSkeleton, "");
|
||||
|
||||
@@ -101,6 +102,15 @@ void dbus_metadata_watcher(struct metadata_bundle *argc, __attribute__((unused))
|
||||
shairport_sync_remote_control_set_metadata(shairportSyncRemoteControlSkeleton, dict);
|
||||
}
|
||||
|
||||
static gboolean on_handle_set_volume(ShairportSyncAdvancedRemoteControl *skeleton,
|
||||
GDBusMethodInvocation *invocation, const gint volume,
|
||||
__attribute__((unused)) gpointer user_data) {
|
||||
debug(1, "Set volume to %d.", volume);
|
||||
dacp_set_volume(volume);
|
||||
shairport_sync_advanced_remote_control_complete_set_volume(skeleton, invocation);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean on_handle_fast_forward(ShairportSyncRemoteControl *skeleton,
|
||||
GDBusMethodInvocation *invocation,
|
||||
__attribute__((unused)) gpointer user_data) {
|
||||
@@ -283,15 +293,6 @@ gboolean notify_loudness_threshold_callback(ShairportSync *skeleton,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean on_handle_set_volume(ShairportSync *skeleton, GDBusMethodInvocation *invocation,
|
||||
const gint volume,
|
||||
__attribute__((unused)) gpointer user_data) {
|
||||
// debug(1, "1 Set volume to d.", volume);
|
||||
dacp_set_volume(volume);
|
||||
shairport_sync_complete_set_volume(skeleton, invocation);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean on_handle_remote_command(ShairportSync *skeleton, GDBusMethodInvocation *invocation,
|
||||
const gchar *command,
|
||||
__attribute__((unused)) gpointer user_data) {
|
||||
@@ -302,7 +303,7 @@ static gboolean on_handle_remote_command(ShairportSync *skeleton, GDBusMethodInv
|
||||
}
|
||||
|
||||
static void on_dbus_name_acquired(GDBusConnection *connection, const gchar *name,
|
||||
gpointer user_data) {
|
||||
__attribute__((unused)) gpointer user_data) {
|
||||
|
||||
// debug(1, "Shairport Sync native D-Bus interface \"%s\" acquired on the %s bus.", name,
|
||||
// (config.dbus_service_bus_type == DBT_session) ? "session" : "system");
|
||||
@@ -329,8 +330,6 @@ static void on_dbus_name_acquired(GDBusConnection *connection, const gchar *name
|
||||
G_CALLBACK(notify_loudness_threshold_callback), NULL);
|
||||
g_signal_connect(shairportSyncSkeleton, "handle-remote-command",
|
||||
G_CALLBACK(on_handle_remote_command), NULL);
|
||||
g_signal_connect(shairportSyncSkeleton, "handle-set-volume", G_CALLBACK(on_handle_set_volume),
|
||||
NULL);
|
||||
|
||||
// debug(1,"dbus_diagnostics_on_dbus_name_acquired");
|
||||
shairportSyncDiagnosticsSkeleton = shairport_sync_diagnostics_skeleton_new();
|
||||
@@ -386,9 +385,8 @@ static void on_dbus_name_acquired(GDBusConnection *connection, const gchar *name
|
||||
|
||||
// debug(1,"dbus_remote_control_on_dbus_name_acquired");
|
||||
shairportSyncRemoteControlSkeleton = shairport_sync_remote_control_skeleton_new();
|
||||
g_dbus_interface_skeleton_export(
|
||||
G_DBUS_INTERFACE_SKELETON(shairportSyncRemoteControlSkeleton), connection,
|
||||
"/org/gnome/ShairportSync", NULL);
|
||||
g_dbus_interface_skeleton_export(G_DBUS_INTERFACE_SKELETON(shairportSyncRemoteControlSkeleton),
|
||||
connection, "/org/gnome/ShairportSync", NULL);
|
||||
|
||||
g_signal_connect(shairportSyncRemoteControlSkeleton, "handle-fast-forward",
|
||||
G_CALLBACK(on_handle_fast_forward), NULL);
|
||||
@@ -396,18 +394,18 @@ static void on_dbus_name_acquired(GDBusConnection *connection, const gchar *name
|
||||
G_CALLBACK(on_handle_rewind), NULL);
|
||||
g_signal_connect(shairportSyncRemoteControlSkeleton, "handle-toggle-mute",
|
||||
G_CALLBACK(on_handle_toggle_mute), NULL);
|
||||
g_signal_connect(shairportSyncRemoteControlSkeleton, "handle-next",
|
||||
G_CALLBACK(on_handle_next), NULL);
|
||||
g_signal_connect(shairportSyncRemoteControlSkeleton, "handle-next", G_CALLBACK(on_handle_next),
|
||||
NULL);
|
||||
g_signal_connect(shairportSyncRemoteControlSkeleton, "handle-previous",
|
||||
G_CALLBACK(on_handle_previous), NULL);
|
||||
g_signal_connect(shairportSyncRemoteControlSkeleton, "handle-pause",
|
||||
G_CALLBACK(on_handle_pause), NULL);
|
||||
g_signal_connect(shairportSyncRemoteControlSkeleton, "handle-pause", G_CALLBACK(on_handle_pause),
|
||||
NULL);
|
||||
g_signal_connect(shairportSyncRemoteControlSkeleton, "handle-play-pause",
|
||||
G_CALLBACK(on_handle_play_pause), NULL);
|
||||
g_signal_connect(shairportSyncRemoteControlSkeleton, "handle-play",
|
||||
G_CALLBACK(on_handle_play), NULL);
|
||||
g_signal_connect(shairportSyncRemoteControlSkeleton, "handle-stop",
|
||||
G_CALLBACK(on_handle_stop), NULL);
|
||||
g_signal_connect(shairportSyncRemoteControlSkeleton, "handle-play", G_CALLBACK(on_handle_play),
|
||||
NULL);
|
||||
g_signal_connect(shairportSyncRemoteControlSkeleton, "handle-stop", G_CALLBACK(on_handle_stop),
|
||||
NULL);
|
||||
g_signal_connect(shairportSyncRemoteControlSkeleton, "handle-resume",
|
||||
G_CALLBACK(on_handle_resume), NULL);
|
||||
g_signal_connect(shairportSyncRemoteControlSkeleton, "handle-shuffle-songs",
|
||||
@@ -417,6 +415,17 @@ static void on_dbus_name_acquired(GDBusConnection *connection, const gchar *name
|
||||
g_signal_connect(shairportSyncRemoteControlSkeleton, "handle-volume-down",
|
||||
G_CALLBACK(on_handle_volume_down), NULL);
|
||||
|
||||
// debug(1,"dbus_advanced_remote_control_on_dbus_name_acquired");
|
||||
shairportSyncAdvancedRemoteControlSkeleton =
|
||||
shairport_sync_advanced_remote_control_skeleton_new();
|
||||
|
||||
g_dbus_interface_skeleton_export(
|
||||
G_DBUS_INTERFACE_SKELETON(shairportSyncAdvancedRemoteControlSkeleton), connection,
|
||||
"/org/gnome/ShairportSync", NULL);
|
||||
|
||||
g_signal_connect(shairportSyncAdvancedRemoteControlSkeleton, "handle-set-volume",
|
||||
G_CALLBACK(on_handle_set_volume), NULL);
|
||||
|
||||
add_metadata_watcher(dbus_metadata_watcher, NULL);
|
||||
|
||||
#ifdef HAVE_DBUS_REMOTE_CONTROL
|
||||
|
||||
@@ -3,13 +3,9 @@
|
||||
<interface name="org.gnome.ShairportSync">
|
||||
<property name="LoudnessFilterActive" type="b" access="readwrite" />
|
||||
<property name="LoudnessThreshold" type="d" access="readwrite" />
|
||||
<property name="Volume" type="i" access="read" />
|
||||
<method name="RemoteCommand">
|
||||
<arg name="command" type="s" direction="in" />
|
||||
</method>
|
||||
<method name="SetVolume">
|
||||
<arg name="volume" type="i" direction="in" />
|
||||
</method>
|
||||
</interface>
|
||||
<interface name="org.gnome.ShairportSync.Diagnostics">
|
||||
<property name="Verbosity" type="i" access="readwrite" />
|
||||
@@ -38,4 +34,10 @@
|
||||
<annotation name="org.qtproject.QtDBus.QtTypeName" value="QVariantMap"/>
|
||||
</property>
|
||||
</interface>
|
||||
<interface name="org.gnome.ShairportSync.Advanced.Remote.Control">
|
||||
<property name="Volume" type="i" access="read" />
|
||||
<method name="SetVolume">
|
||||
<arg name="volume" type="i" direction="in" />
|
||||
</method>
|
||||
</interface>
|
||||
</node>
|
||||
|
||||
@@ -56,8 +56,9 @@ void notify_loudness_threshold_callback(ShairportSync *proxy,
|
||||
printf("Client reports loudness threshold set to %.2f dB.\n", th);
|
||||
}
|
||||
|
||||
void notify_volume_callback(ShairportSync *proxy, __attribute__((unused)) gpointer user_data) {
|
||||
gdouble th = shairport_sync_get_volume(proxy);
|
||||
void notify_volume_callback(ShairportSyncAdvancedRemoteControl *proxy,
|
||||
__attribute__((unused)) gpointer user_data) {
|
||||
gdouble th = shairport_sync_advanced_remote_control_get_volume(proxy);
|
||||
printf("Client reports volume set to %.2f.\n", th);
|
||||
}
|
||||
|
||||
@@ -115,12 +116,12 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
pthread_create(&dbus_thread, NULL, &dbus_thread_func, NULL);
|
||||
|
||||
ShairportSync *proxy;
|
||||
ShairportSyncAdvancedRemoteControl *proxy;
|
||||
GError *error = NULL;
|
||||
|
||||
proxy = shairport_sync_proxy_new_for_bus_sync(gbus_type_selected, G_DBUS_PROXY_FLAGS_NONE,
|
||||
"org.gnome.ShairportSync",
|
||||
"/org/gnome/ShairportSync", NULL, &error);
|
||||
proxy = shairport_sync_advanced_remote_control_proxy_new_for_bus_sync(
|
||||
gbus_type_selected, G_DBUS_PROXY_FLAGS_NONE, "org.gnome.ShairportSync",
|
||||
"/org/gnome/ShairportSync", NULL, &error);
|
||||
|
||||
// g_signal_connect(proxy, "notify::loudness-filter-active",
|
||||
// G_CALLBACK(notify_loudness_filter_active_callback), NULL);
|
||||
@@ -148,26 +149,21 @@ int main(int argc, char *argv[]) {
|
||||
"/org/gnome/ShairportSync", NULL, &error3);
|
||||
g_signal_connect(proxy3, "g-properties-changed", G_CALLBACK(on_properties_changed), NULL);
|
||||
|
||||
/*
|
||||
|
||||
g_print("Starting test...\n");
|
||||
|
||||
shairport_sync_call_set_volume(SHAIRPORT_SYNC(proxy), 20, NULL, NULL, 0);
|
||||
shairport_sync_advanced_remote_control_call_set_volume(
|
||||
SHAIRPORT_SYNC_ADVANCED_REMOTE_CONTROL(proxy), 20, NULL, NULL, 0);
|
||||
sleep(5);
|
||||
shairport_sync_call_set_volume(SHAIRPORT_SYNC(proxy), 100, NULL, NULL, 0);
|
||||
shairport_sync_advanced_remote_control_call_set_volume(
|
||||
SHAIRPORT_SYNC_ADVANCED_REMOTE_CONTROL(proxy), 100, NULL, NULL, 0);
|
||||
sleep(5);
|
||||
shairport_sync_call_set_volume(SHAIRPORT_SYNC(proxy), 40, NULL, NULL, 0);
|
||||
shairport_sync_advanced_remote_control_call_set_volume(
|
||||
SHAIRPORT_SYNC_ADVANCED_REMOTE_CONTROL(proxy), 40, NULL, NULL, 0);
|
||||
sleep(5);
|
||||
shairport_sync_call_set_volume(SHAIRPORT_SYNC(proxy), 60, NULL, NULL, 0);
|
||||
shairport_sync_advanced_remote_control_call_set_volume(
|
||||
SHAIRPORT_SYNC_ADVANCED_REMOTE_CONTROL(proxy), 60, NULL, NULL, 0);
|
||||
/*
|
||||
// sleep(1);
|
||||
shairport_sync_set_volume(SHAIRPORT_SYNC(proxy), 10);
|
||||
sleep(1);
|
||||
shairport_sync_set_volume(SHAIRPORT_SYNC(proxy), 0);
|
||||
sleep(1);
|
||||
shairport_sync_set_volume(SHAIRPORT_SYNC(proxy), 25);
|
||||
sleep(1);
|
||||
shairport_sync_set_volume(SHAIRPORT_SYNC(proxy), 100);
|
||||
sleep(1);
|
||||
shairport_sync_set_loudness_filter_active(SHAIRPORT_SYNC(proxy), TRUE);
|
||||
sleep(10);
|
||||
shairport_sync_set_loudness_threshold(SHAIRPORT_SYNC(proxy), -20.0);
|
||||
@@ -182,9 +178,8 @@ int main(int argc, char *argv[]) {
|
||||
sleep(1);
|
||||
|
||||
shairport_sync_call_remote_command(SHAIRPORT_SYNC(proxy), "string",NULL,NULL,NULL);
|
||||
g_print("Finished test. Waiting for property changes...\n");
|
||||
*/
|
||||
|
||||
g_print("Finished test. Listening for property changes...\n");
|
||||
// g_main_loop_quit(loop);
|
||||
pthread_join(dbus_thread, NULL);
|
||||
printf("exiting program.\n");
|
||||
|
||||
Reference in New Issue
Block a user