55
63
SyncdaemonDaemon *daemon;
56
64
SyncdaemonStatusInterface *interface = SYNCDAEMON_STATUS_INTERFACE (user_data);
66
if (interface->priv->downloads == NULL) {
67
interface->priv->downloads = g_hash_table_new_full (g_str_hash, g_str_equal,
68
g_free, g_object_unref);
71
g_hash_table_insert (interface->priv->downloads,
73
syncdaemon_transfer_info_new (path));
58
75
g_object_get (G_OBJECT (interface), "daemon", &daemon, NULL);
59
76
if (daemon != NULL)
60
77
g_signal_emit_by_name (daemon, "download_started", path);
67
84
SyncdaemonStatusInterface *interface = SYNCDAEMON_STATUS_INTERFACE (user_data);
69
86
g_object_get (G_OBJECT (interface), "daemon", &daemon, NULL);
71
g_signal_emit_by_name (daemon, "download_finished", path, info);
88
SyncdaemonTransferInfo *tinfo;
90
tinfo = g_hash_table_lookup (interface->priv->downloads, path);
92
g_signal_emit_by_name (daemon, "download_finished", path, tinfo);
94
tinfo = syncdaemon_transfer_info_new_from_hash_table (info);
95
g_signal_emit_by_name (daemon, "download_finished", path, tinfo);
96
g_object_unref (G_OBJECT (tinfo));
100
if (interface->priv->downloads != NULL)
101
g_hash_table_remove (interface->priv->downloads, path);
77
107
SyncdaemonDaemon *daemon;
78
108
SyncdaemonStatusInterface *interface = SYNCDAEMON_STATUS_INTERFACE (user_data);
110
if (interface->priv->uploads == NULL) {
111
interface->priv->uploads = g_hash_table_new_full (g_str_hash, g_str_equal,
112
g_free, g_object_unref);
115
g_hash_table_insert (interface->priv->uploads,
117
syncdaemon_transfer_info_new (path));
80
119
g_object_get (G_OBJECT (interface), "daemon", &daemon, NULL);
81
120
if (daemon != NULL)
82
121
g_signal_emit_by_name (daemon, "upload_started", path);
89
128
SyncdaemonStatusInterface *interface = SYNCDAEMON_STATUS_INTERFACE (user_data);
91
130
g_object_get (G_OBJECT (interface), "daemon", &daemon, NULL);
93
g_signal_emit_by_name (daemon, "upload_finished", path, info);
131
if (daemon != NULL) {
132
SyncdaemonTransferInfo *tinfo;
134
tinfo = g_hash_table_lookup (interface->priv->uploads, path);
136
g_signal_emit_by_name (daemon, "upload_finished", path, tinfo);
138
tinfo = syncdaemon_transfer_info_new_from_hash_table (info);
139
g_signal_emit_by_name (daemon, "upload_finished", path, tinfo);
140
g_object_unref (G_OBJECT (tinfo));
144
if (interface->priv->downloads != NULL)
145
g_hash_table_remove (interface->priv->uploads, path);
149
download_file_progress_cb (DBusGProxy *proxy, gchar *path, GHashTable *info, gpointer user_data)
151
SyncdaemonDaemon *daemon = NULL;
152
SyncdaemonTransferInfo *tinfo;
153
SyncdaemonStatusInterface *interface = SYNCDAEMON_STATUS_INTERFACE (user_data);
155
tinfo = syncdaemon_transfer_info_new_from_hash_table (info);
156
g_hash_table_insert (interface->priv->downloads,
160
g_object_get (G_OBJECT (interface), "daemon", &daemon, NULL);
162
g_signal_emit_by_name (daemon, "download_file_progress", path, tinfo);
166
upload_file_progress_cb (DBusGProxy *proxy, gchar *path, GHashTable *info, gpointer user_data)
168
SyncdaemonDaemon *daemon = NULL;
169
SyncdaemonTransferInfo *tinfo;
170
SyncdaemonStatusInterface *interface = SYNCDAEMON_STATUS_INTERFACE (user_data);
172
tinfo = syncdaemon_transfer_info_new_from_hash_table (info);
173
g_hash_table_insert (interface->priv->downloads,
177
g_object_get (G_OBJECT (interface), "daemon", &daemon, NULL);
179
g_signal_emit_by_name (daemon, "upload_file_progress", path, tinfo);
134
220
dbus_g_proxy_connect_signal (DBUS_G_PROXY (interface->priv->proxy), "UploadFinished",
135
221
G_CALLBACK (upload_finished_cb), interface, NULL);
223
dbus_g_proxy_add_signal (DBUS_G_PROXY (interface->priv->proxy), "DownloadFileProgress",
225
dbus_g_type_get_map ("GHashTable",
229
dbus_g_proxy_connect_signal (DBUS_G_PROXY (interface->priv->proxy), "DownloadFileProgress",
230
G_CALLBACK (download_file_progress_cb), interface, NULL);
232
dbus_g_proxy_add_signal (DBUS_G_PROXY (interface->priv->proxy), "UploadFileProgress",
234
dbus_g_type_get_map ("GHashTable",
238
dbus_g_proxy_connect_signal (DBUS_G_PROXY (interface->priv->proxy), "UploadFileProgress",
239
G_CALLBACK (upload_file_progress_cb), interface, NULL);
147
251
return g_object_new (SYNCDAEMON_TYPE_STATUS_INTERFACE, "daemon", daemon, NULL);
255
* syncdaemon_status_interface_get_current_downloads:
257
* Return value: A GSList of #SyncdaemonTransferInfo objects, each of which contains
258
* information about a file download in progress. The data in the list belongs to
259
* the library, so when no longer needed, the list should be freed by just calling
263
syncdaemon_status_interface_get_current_downloads (SyncdaemonStatusInterface *interface)
267
SyncdaemonTransferInfo *tinfo;
268
GSList *downloads = NULL;
270
g_return_val_if_fail (SYNCDAEMON_IS_STATUS_INTERFACE (interface), NULL);
272
if (interface->priv->downloads == NULL) {
274
GError *error = NULL;
276
interface->priv->downloads = g_hash_table_new_full (g_str_hash, g_str_equal,
277
g_free, g_object_unref);
279
if (!dbus_g_proxy_call (DBUS_G_PROXY (interface->priv->proxy), "current_downloads", &error,
281
dbus_g_type_get_collection ("GSList",
285
G_TYPE_STRING)), &list,
287
g_warning ("Error calling current_downloads: %s", error->message);
288
g_error_free (error);
293
/* Now add all downloads to our cache */
294
while (list != NULL) {
295
GHashTable *hash = (GHashTable *) list->data;
297
g_hash_table_insert (interface->priv->downloads,
298
g_strdup (g_hash_table_lookup (hash, "path")),
299
syncdaemon_transfer_info_new_from_hash_table (hash));
301
list = g_slist_remove (list, hash);
302
g_hash_table_destroy (hash);
306
/* Create list to be returned to user */
307
g_hash_table_iter_init (&iter, interface->priv->downloads);
308
while (g_hash_table_iter_next (&iter, (gpointer *) &path, (gpointer *) &tinfo))
309
downloads = g_slist_append (downloads, tinfo);
315
* syncdaemon_status_interface_get_current_uploads:
317
* Return value: A GSList of #SyncdaemonTransferInfo objects, each of which contains
318
* information about a file upload in progress. The data in the list belongs to
319
* the library, so when no longer needed, the list should be freed by just calling
323
syncdaemon_status_interface_get_current_uploads (SyncdaemonStatusInterface *interface)
327
SyncdaemonTransferInfo *tinfo;
328
GSList *uploads = NULL;
330
g_return_val_if_fail (SYNCDAEMON_IS_STATUS_INTERFACE (interface), NULL);
332
if (interface->priv->uploads == NULL) {
334
GError *error = NULL;
336
interface->priv->uploads = g_hash_table_new_full (g_str_hash, g_str_equal,
337
g_free, g_object_unref);
339
if (!dbus_g_proxy_call (DBUS_G_PROXY (interface->priv->proxy), "current_uploads", &error,
341
dbus_g_type_get_collection ("GSList",
345
G_TYPE_STRING)), &list,
347
g_warning ("Error calling current_uploads: %s", error->message);
348
g_error_free (error);
353
/* Now add all uploads to our cache */
354
while (list != NULL) {
355
GHashTable *hash = (GHashTable *) list->data;
357
g_hash_table_insert (interface->priv->uploads,
358
g_strdup (g_hash_table_lookup (hash, "path")),
359
syncdaemon_transfer_info_new_from_hash_table (hash));
361
list = g_slist_remove (list, hash);
362
g_hash_table_destroy (hash);
366
/* Create list to be returned to user */
367
g_hash_table_iter_init (&iter, interface->priv->uploads);
368
while (g_hash_table_iter_next (&iter, (gpointer *) &path, (gpointer *) &tinfo))
369
uploads = g_slist_append (uploads, tinfo);