forked from mikebrady/shairport-sync
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathshairport-sync-dbus-test-client.c
132 lines (108 loc) · 4.29 KB
/
shairport-sync-dbus-test-client.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#include "dbus-interface.h"
#include <stdio.h>
#include <unistd.h>
GMainLoop *loop;
void on_properties_changed(GDBusProxy *proxy, GVariant *changed_properties,
const gchar *const *invalidated_properties, gpointer user_data) {
/* Note that we are guaranteed that changed_properties and
* invalidated_properties are never NULL
*/
if (g_variant_n_children(changed_properties) > 0) {
GVariantIter *iter;
const gchar *key;
GVariant *value;
g_print(" *** Properties Changed:\n");
g_variant_get(changed_properties, "a{sv}", &iter);
while (g_variant_iter_loop(iter, "{&sv}", &key, &value)) {
gchar *value_str;
value_str = g_variant_print(value, TRUE);
g_print(" %s -> %s\n", key, value_str);
g_free(value_str);
}
g_variant_iter_free(iter);
}
if (g_strv_length((GStrv)invalidated_properties) > 0) {
guint n;
g_print(" *** Properties Invalidated:\n");
for (n = 0; invalidated_properties[n] != NULL; n++) {
const gchar *key = invalidated_properties[n];
g_print(" %s\n", key);
}
}
}
void notify_loudness_filter_active_callback(ShairportSync *proxy, gpointer user_data) {
// printf("\"notify_loudness_filter_active_callback\" called with a gpointer of
// %lx.\n",(int64_t)user_data);
gboolean ebl = shairport_sync_get_loudness_filter_active(proxy);
if (ebl == TRUE)
printf("Client reports loudness is enabled.\n");
else
printf("Client reports loudness is disabled.\n");
}
void notify_loudness_threshold_callback(ShairportSync *proxy, gpointer user_data) {
gdouble th = shairport_sync_get_loudness_threshold(proxy);
printf("Client reports loudness threshold set to %.2f dB.\n", th);
}
void notify_volume_callback(ShairportSync *proxy, gpointer user_data) {
gdouble th = shairport_sync_get_volume(proxy);
printf("Client reports volume set to %.2f.\n", th);
}
pthread_t dbus_thread;
void *dbus_thread_func(void *arg) {
loop = g_main_loop_new(NULL, FALSE);
g_main_loop_run(loop);
// dbus_service_main(); // let it run inside a thread
return NULL; // this is just to quieten a compiler warning.
}
int main(void) {
pthread_create(&dbus_thread, NULL, &dbus_thread_func, NULL);
ShairportSync *proxy;
GError *error = NULL;
proxy = shairport_sync_proxy_new_for_bus_sync(G_BUS_TYPE_SYSTEM, 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);
g_signal_connect(proxy, "g-properties-changed", G_CALLBACK(on_properties_changed), NULL);
g_signal_connect(proxy, "notify::loudness-threshold",
G_CALLBACK(notify_loudness_threshold_callback), NULL);
g_signal_connect(proxy, "notify::volume", G_CALLBACK(notify_volume_callback), NULL);
g_print("Starting test...\n");
shairport_sync_set_volume(SHAIRPORT_SYNC(proxy), 20);
sleep(1);
shairport_sync_set_volume(SHAIRPORT_SYNC(proxy), 100);
sleep(1);
shairport_sync_set_volume(SHAIRPORT_SYNC(proxy), 40);
sleep(1);
shairport_sync_set_volume(SHAIRPORT_SYNC(proxy), 60);
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);
sleep(5);
shairport_sync_set_loudness_filter_active(SHAIRPORT_SYNC(proxy), FALSE);
sleep(5);
shairport_sync_set_loudness_filter_active(SHAIRPORT_SYNC(proxy), TRUE);
sleep(5);
shairport_sync_set_loudness_threshold(SHAIRPORT_SYNC(proxy), -10.0);
sleep(10);
shairport_sync_set_loudness_filter_active(SHAIRPORT_SYNC(proxy), FALSE);
sleep(1);
shairport_sync_call_remote_command(SHAIRPORT_SYNC(proxy), "string",NULL,NULL,NULL);
*/
g_print("Finished test...\n");
g_main_loop_quit(loop);
pthread_join(dbus_thread, NULL);
printf("exiting program.\n");
g_object_unref(proxy);
return 0;
}