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/>.
25
#include <dbus/dbus-glib.h>
27
#include "syncdaemon-events-interface.h"
29
G_DEFINE_TYPE(SyncdaemonEventsInterface, syncdaemon_events_interface, SYNCDAEMON_TYPE_INTERFACE)
31
struct _SyncdaemonEventsInterfacePrivate {
36
syncdaemon_events_interface_finalize (GObject *object)
38
SyncdaemonEventsInterface *interface = SYNCDAEMON_EVENTS_INTERFACE (object);
40
if (interface->priv != NULL) {
41
g_free (interface->priv);
44
G_OBJECT_CLASS (syncdaemon_events_interface_parent_class)->finalize (object);
48
syncdaemon_events_interface_class_init (SyncdaemonEventsInterfaceClass *klass)
50
GObjectClass *object_class = G_OBJECT_CLASS (klass);
52
object_class->finalize = syncdaemon_events_interface_finalize;
56
event_cb (DBusGProxy *proxy, GHashTable *event_dict, gpointer user_data)
58
SyncdaemonDaemon *daemon = NULL;
59
SyncdaemonEventsInterface *interface = SYNCDAEMON_EVENTS_INTERFACE (user_data);
61
g_object_get (G_OBJECT (interface), "daemon", &daemon, NULL);
63
g_signal_emit_by_name (daemon, "event", event_dict);
67
syncdaemon_events_interface_init (SyncdaemonEventsInterface *interface)
69
interface->priv = g_new0 (SyncdaemonEventsInterfacePrivate, 1);
71
/* Setup DBus proxy */
72
interface->priv->proxy = syncdaemon_interface_setup_proxy (SYNCDAEMON_INTERFACE (interface),
73
"com.ubuntuone.Syncdaemon",
74
"/events", "com.ubuntuone.Syncdaemon.Events");
75
if (interface->priv->proxy != NULL) {
76
dbus_g_proxy_add_signal (DBUS_G_PROXY (interface->priv->proxy), "Event",
77
dbus_g_type_get_map ("GHashTable",
81
dbus_g_proxy_connect_signal (DBUS_G_PROXY (interface->priv->proxy), "Event",
82
G_CALLBACK (event_cb), interface, NULL);
87
* syncdaemon_events_interface_new:
89
SyncdaemonEventsInterface *
90
syncdaemon_events_interface_new (SyncdaemonDaemon *daemon)
92
g_return_val_if_fail (SYNCDAEMON_IS_DAEMON (daemon), NULL);
94
return g_object_new (SYNCDAEMON_TYPE_EVENTS_INTERFACE, "daemon", daemon, NULL);
98
* syncdaemon_events_interface_push_event:
101
syncdaemon_events_interface_push_event (SyncdaemonEventsInterface *interface,
102
const gchar *event_name,
105
GError *error = NULL;
107
g_return_if_fail (SYNCDAEMON_IS_EVENTS_INTERFACE (interface));
109
if (!dbus_g_proxy_call (DBUS_G_PROXY (interface->priv->proxy), "push_event", &error,
110
G_TYPE_STRING, event_name,
114
g_warning ("Failed calling push_event: %s", error->message);
115
g_error_free (error);