4
* Authors: Rodrigo Moya <rodrigo.moya@canonical.com>
6
* Copyright 2010 Canonical Ltd.
8
* This program is free software: you can redistribute it and/or modify it
9
* under the terms of the GNU General Public License version 3, as published
10
* by the Free Software Foundation.
12
* This program is distributed in the hope that it will be useful, but
13
* WITHOUT ANY WARRANTY; without even the implied warranties of
14
* MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
15
* PURPOSE. See the GNU General Public License for more details.
17
* You should have received a copy of the GNU General Public License along
18
* with this program. If not, see <http://www.gnu.org/licenses/>.
23
#include "syncdaemon-folders-interface.h"
26
G_DEFINE_TYPE(SyncdaemonFoldersInterface, syncdaemon_folders_interface, SYNCDAEMON_TYPE_INTERFACE)
28
struct _SyncdaemonFoldersInterfacePrivate {
33
syncdaemon_folders_interface_finalize (GObject *object)
35
SyncdaemonFoldersInterface *interface = SYNCDAEMON_FOLDERS_INTERFACE (object);
37
if (interface->priv != NULL) {
38
g_free (interface->priv);
41
G_OBJECT_CLASS (syncdaemon_folders_interface_parent_class)->finalize (object);
45
syncdaemon_folders_interface_class_init (SyncdaemonFoldersInterfaceClass *klass)
47
GObjectClass *object_class = G_OBJECT_CLASS (klass);
49
object_class->finalize = syncdaemon_folders_interface_finalize;
53
folder_created_cb (DBusGProxy *proxy, GHashTable *folder_info, gpointer user_data)
55
SyncdaemonDaemon *daemon = NULL;
56
SyncdaemonFoldersInterface *interface = SYNCDAEMON_FOLDERS_INTERFACE (user_data);
58
g_object_get (G_OBJECT (interface), "daemon", &daemon, NULL);
60
g_signal_emit_by_name (daemon, "folder_created", folder_info);
64
folder_deleted_cb (DBusGProxy *proxy, GHashTable *folder_info, gpointer user_data)
66
SyncdaemonDaemon *daemon = NULL;
67
SyncdaemonFoldersInterface *interface = SYNCDAEMON_FOLDERS_INTERFACE (user_data);
69
g_object_get (G_OBJECT (interface), "daemon", &daemon, NULL);
71
g_signal_emit_by_name (daemon, "folder_deleted", folder_info);
75
folder_subscribed_cb (DBusGProxy *proxy, GHashTable *folder_info, gpointer user_data)
77
SyncdaemonDaemon *daemon = NULL;
78
SyncdaemonFoldersInterface *interface = SYNCDAEMON_FOLDERS_INTERFACE (user_data);
80
g_object_get (G_OBJECT (interface), "daemon", &daemon, NULL);
82
g_signal_emit_by_name (daemon, "folder_subscribed", folder_info);
86
folder_unsubscribed_cb (DBusGProxy *proxy, GHashTable *folder_info, gpointer user_data)
88
SyncdaemonDaemon *daemon = NULL;
89
SyncdaemonFoldersInterface *interface = SYNCDAEMON_FOLDERS_INTERFACE (user_data);
91
g_object_get (G_OBJECT (interface), "daemon", &daemon, NULL);
93
g_signal_emit_by_name (daemon, "folder_unsubscribed", folder_info);
97
udf_error_cb (DBusGProxy *proxy, GHashTable *folder_info, gchar *error, gpointer user_data)
99
SyncdaemonDaemon *daemon = NULL;
100
SyncdaemonFoldersInterface *interface = SYNCDAEMON_FOLDERS_INTERFACE (user_data);
102
g_object_get (G_OBJECT (interface), "daemon", &daemon, NULL);
104
g_signal_emit_by_name (daemon, "error", error, folder_info);
108
syncdaemon_folders_interface_init (SyncdaemonFoldersInterface *interface)
110
interface->priv = g_new0 (SyncdaemonFoldersInterfacePrivate, 1);
112
/* Setup DBus proxy */
113
interface->priv->proxy = syncdaemon_interface_setup_proxy (SYNCDAEMON_INTERFACE (interface),
114
"com.ubuntuone.Syncdaemon",
115
"/folders", "com.ubuntuone.Syncdaemon.Folders");
116
if (interface->priv->proxy != NULL) {
117
/* Connect to DBus proxy signals */
118
dbus_g_proxy_add_signal (DBUS_G_PROXY (interface->priv->proxy), "FolderCreated",
119
dbus_g_type_get_map ("GHashTable",
123
dbus_g_proxy_connect_signal (DBUS_G_PROXY (interface->priv->proxy), "FolderCreated",
124
G_CALLBACK (folder_created_cb), interface, NULL);
126
dbus_g_proxy_add_signal (DBUS_G_PROXY (interface->priv->proxy), "FolderDeleted",
127
dbus_g_type_get_map ("GHashTable",
131
dbus_g_proxy_connect_signal (DBUS_G_PROXY (interface->priv->proxy), "FolderDeleted",
132
G_CALLBACK (folder_deleted_cb), interface, NULL);
134
dbus_g_proxy_add_signal (DBUS_G_PROXY (interface->priv->proxy), "FolderSubscribed",
135
dbus_g_type_get_map ("GHashTable",
139
dbus_g_proxy_connect_signal (DBUS_G_PROXY (interface->priv->proxy), "FolderSubscribed",
140
G_CALLBACK (folder_subscribed_cb), interface, NULL);
142
dbus_g_proxy_add_signal (DBUS_G_PROXY (interface->priv->proxy), "FolderUnSubscribed",
143
dbus_g_type_get_map ("GHashTable",
147
dbus_g_proxy_connect_signal (DBUS_G_PROXY (interface->priv->proxy), "FolderUnSubscribed",
148
G_CALLBACK (folder_unsubscribed_cb), interface, NULL);
151
dbus_g_proxy_add_signal (DBUS_G_PROXY (interface->priv->proxy), "FolderCreateError",
152
dbus_g_type_get_map ("GHashTable",
157
dbus_g_proxy_connect_signal (DBUS_G_PROXY (interface->priv->proxy), "FolderCreateError",
158
G_CALLBACK (udf_error_cb), interface, NULL);
160
dbus_g_proxy_add_signal (DBUS_G_PROXY (interface->priv->proxy), "FolderDeleteError",
161
dbus_g_type_get_map ("GHashTable",
166
dbus_g_proxy_connect_signal (DBUS_G_PROXY (interface->priv->proxy), "FolderDeleteError",
167
G_CALLBACK (udf_error_cb), interface, NULL);
169
dbus_g_proxy_add_signal (DBUS_G_PROXY (interface->priv->proxy), "FolderSubscribeError",
170
dbus_g_type_get_map ("GHashTable",
175
dbus_g_proxy_connect_signal (DBUS_G_PROXY (interface->priv->proxy), "FolderSubscribeError",
176
G_CALLBACK (udf_error_cb), interface, NULL);
178
dbus_g_proxy_add_signal (DBUS_G_PROXY (interface->priv->proxy), "FolderUnSubscribeError",
179
dbus_g_type_get_map ("GHashTable",
184
dbus_g_proxy_connect_signal (DBUS_G_PROXY (interface->priv->proxy), "FolderUnSubscribedError",
185
G_CALLBACK (udf_error_cb), interface, NULL);
190
* syncdaemon_folders_interface_new:
192
SyncdaemonFoldersInterface *
193
syncdaemon_folders_interface_new (SyncdaemonDaemon *daemon)
195
g_return_val_if_fail (SYNCDAEMON_IS_DAEMON (daemon), NULL);
197
return g_object_new (SYNCDAEMON_TYPE_FOLDERS_INTERFACE, "daemon", daemon, NULL);
201
* syncdaemon_folders_interface_create:
204
syncdaemon_folders_interface_create (SyncdaemonFoldersInterface *interface, const gchar *path)
206
g_return_if_fail (SYNCDAEMON_IS_FOLDERS_INTERFACE (interface));
207
g_return_if_fail (path != NULL);
209
dbus_g_proxy_begin_call (DBUS_G_PROXY (interface->priv->proxy), "create",
210
no_output_dbus_call_ended_cb, interface, NULL,
216
* syncdaemon_folders_interface_delete:
219
syncdaemon_folders_interface_delete (SyncdaemonFoldersInterface *interface, const gchar *folder_id)
221
g_return_if_fail (SYNCDAEMON_IS_FOLDERS_INTERFACE (interface));
222
g_return_if_fail (folder_id != NULL);
224
dbus_g_proxy_begin_call (DBUS_G_PROXY (interface->priv->proxy), "delete",
225
no_output_dbus_call_ended_cb, interface, NULL,
226
G_TYPE_STRING, folder_id,
231
* syncdaemon_folders_interface_get_folders:
234
syncdaemon_folders_interface_get_folders (SyncdaemonFoldersInterface *interface)
236
GSList *folders = NULL;
237
GError *error = NULL;
239
g_return_val_if_fail (SYNCDAEMON_IS_FOLDERS_INTERFACE (interface), NULL);
241
if (!dbus_g_proxy_call (DBUS_G_PROXY (interface->priv->proxy), "get_folders", &error,
243
dbus_g_type_get_collection ("GSList",
247
G_TYPE_STRING)), &folders,
249
g_warning ("Error calling get_folders: %s", error->message);
250
g_error_free (error);
257
* syncdaemon_folders_interface_get_info:
260
syncdaemon_folders_interface_get_info (SyncdaemonFoldersInterface *interface, const gchar *path)
262
GHashTable *info = NULL;
263
GError *error = NULL;
265
g_return_val_if_fail (SYNCDAEMON_IS_FOLDERS_INTERFACE (interface), NULL);
266
g_return_val_if_fail (path != NULL, NULL);
268
if (!dbus_g_proxy_call (DBUS_G_PROXY (interface->priv->proxy), "get_info", &error,
271
dbus_g_type_get_map ("GHashTable",
273
G_TYPE_STRING), &info,
275
g_warning ("Error calling get_info: %s", error->message);
276
g_error_free (error);
283
* syncdaemon_folders_interface_refresh_volumes:
286
syncdaemon_folders_interface_refresh_volumes (SyncdaemonFoldersInterface *interface)
288
g_return_if_fail (SYNCDAEMON_IS_FOLDERS_INTERFACE (interface));
290
dbus_g_proxy_begin_call (DBUS_G_PROXY (interface->priv->proxy), "refresh_volumes",
291
no_output_dbus_call_ended_cb, interface, NULL,
296
* syncdaemon_folders_interface_subscribe:
299
syncdaemon_folders_interface_subscribe (SyncdaemonFoldersInterface *interface, const gchar *folder_id)
301
g_return_if_fail (SYNCDAEMON_IS_FOLDERS_INTERFACE (interface));
302
g_return_if_fail (folder_id != NULL);
304
dbus_g_proxy_begin_call (DBUS_G_PROXY (interface->priv->proxy), "subscribe",
305
no_output_dbus_call_ended_cb, interface, NULL,
306
G_TYPE_STRING, folder_id,
311
* syncdaemon_folders_interface_unsubscribe:
314
syncdaemon_folders_interface_unsubscribe (SyncdaemonFoldersInterface *interface, const gchar *folder_id)
316
g_return_if_fail (SYNCDAEMON_IS_FOLDERS_INTERFACE (interface));
317
g_return_if_fail (folder_id != NULL);
319
dbus_g_proxy_begin_call (DBUS_G_PROXY (interface->priv->proxy), "unsubscribe",
320
no_output_dbus_call_ended_cb, interface, NULL,
321
G_TYPE_STRING, folder_id,