Codebase list libcloudproviders / b280c19
Move to skeleton class Julius Härtl 6 years ago
4 changed file(s) with 35 addition(s) and 72 deletion(s). Raw diff Collapse all Expand all
6565 g_warning ("Error getting the provider icon %s", error->message);
6666 goto out;
6767 }
68 g_print ("variant tuple %s\n", g_variant_print (variant_tuple, TRUE));
6968
7069 variant_dict = g_variant_get_child_value (variant_tuple, 0);
7170 variant = g_variant_get_child_value (variant_dict, 0);
2929 GList *providers;
3030 guint dbus_owner_id;
3131 GDBusNodeInfo *dbus_node_info;
32 CloudProviderManager1 *skeleton;
3233 } CloudProviderManagerPrivate;
3334
3435 G_DEFINE_TYPE_WITH_PRIVATE (CloudProviderManager, cloud_provider_manager, G_TYPE_OBJECT)
4142
4243 static guint gSignals [LAST_SIGNAL];
4344
44 static const gchar manager_xml[] =
45 "<node>"
46 " <interface name='org.freedesktop.CloudProviderManager1'>"
47 " <method name='CloudProviderChanged'>"
48 " </method>"
49 " </interface>"
50 "</node>";
51
52 static void
53 handle_method_call (GDBusConnection *connection,
54 const gchar *sender,
55 const gchar *object_path,
56 const gchar *interface_name,
57 const gchar *method_name,
58 GVariant *parameters,
59 GDBusMethodInvocation *invocation,
60 gpointer user_data)
61 {
62 if (g_strcmp0 (method_name, "CloudProviderChanged") == 0)
63 {
64 cloud_provider_manager_update (CLOUD_PROVIDER_MANAGER (user_data));
65 }
66 }
67
68 static const GDBusInterfaceVTable interface_vtable =
69 {
70 handle_method_call,
71 };
45 static void
46 on_cloud_provider_changed (CloudProvider *cloud_provider,
47 CloudProviderManager *self)
48 {
49 GIcon *icon;
50 gchar *name;
51 guint status;
52
53 name = cloud_provider_get_name (cloud_provider);
54 icon = cloud_provider_get_icon (cloud_provider);
55 status = cloud_provider_get_status (cloud_provider);
56 if (name == NULL || icon == NULL || status == CLOUD_PROVIDER_STATUS_INVALID)
57 return;
58
59 g_signal_emit_by_name (self, "changed", NULL);
60 }
7261
7362 static void
7463 on_bus_acquired (GDBusConnection *connection,
7564 const gchar *name,
7665 gpointer user_data)
7766 {
78 CloudProviderManager *self = user_data;
79 CloudProviderManagerPrivate *priv = cloud_provider_manager_get_instance_private (self);
80 guint registration_id;
81
82 g_debug ("Registering cloud provider server 'MyCloud'\n");
83 registration_id = g_dbus_connection_register_object (connection,
84 CLOUD_PROVIDER_MANAGER_DBUS_PATH,
85 priv->dbus_node_info->interfaces[0],
86 &interface_vtable,
87 self,
88 NULL, /* user_data_free_func */
89 NULL); /* GError** */
90 g_assert (registration_id > 0);
91
92 /* In case some provider updated before adquiring the bus */
93 cloud_provider_manager_update (CLOUD_PROVIDER_MANAGER (user_data));
9467 }
9568
9669 static void
9871 const gchar *name,
9972 gpointer user_data)
10073 {
74 CloudProviderManager *self = user_data;
75 CloudProviderManagerPrivate *priv = cloud_provider_manager_get_instance_private (CLOUD_PROVIDER_MANAGER (user_data));
76 g_signal_connect_swapped (priv->skeleton,
77 "handle-cloud-provider-changed",
78 G_CALLBACK(cloud_provider_manager_update),
79 self);
80 g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (priv->skeleton),
81 connection,
82 CLOUD_PROVIDER_MANAGER_DBUS_PATH,
83 NULL);
10184 }
10285
10386 static void
10588 const gchar *name,
10689 gpointer user_data)
10790 {
91 CloudProviderManagerPrivate *priv = cloud_provider_manager_get_instance_private (CLOUD_PROVIDER_MANAGER (user_data));
92 g_dbus_interface_skeleton_unexport(G_DBUS_INTERFACE_SKELETON(priv->skeleton));
10893 }
10994
11095 /**
119104 if (self == NULL)
120105 {
121106 CloudProviderManagerPrivate *priv;
122
123107 self = g_object_new (TYPE_CLOUD_PROVIDER_MANAGER, NULL);
124 priv = cloud_provider_manager_get_instance_private (CLOUD_PROVIDER_MANAGER (self));
125
126 /* Export the interface we listen to, so clients can request properties of
127 * the cloud provider such as name, status or icon */
128 priv->dbus_node_info = g_dbus_node_info_new_for_xml (manager_xml, NULL);
129 g_assert (priv->dbus_node_info != NULL);
130
108 priv = cloud_provider_manager_get_instance_private (CLOUD_PROVIDER_MANAGER(self));
131109 priv->dbus_owner_id = g_bus_own_name (G_BUS_TYPE_SESSION,
132110 CLOUD_PROVIDER_MANAGER_DBUS_NAME,
133111 G_BUS_NAME_OWNER_FLAGS_NONE,
136114 on_name_lost,
137115 self,
138116 NULL);
117 priv->skeleton = cloud_provider_manager1_skeleton_new ();
139118 return CLOUD_PROVIDER_MANAGER (self);
140119 }
141120 else
192171 CloudProviderManagerPrivate *priv = cloud_provider_manager_get_instance_private (manager);
193172
194173 return priv->providers;
195 }
196
197 static void
198 on_cloud_provider_changed (CloudProvider *cloud_provider,
199 CloudProviderManager *self)
200 {
201 GIcon *icon;
202 gchar *name;
203 guint status;
204
205 name = cloud_provider_get_name (cloud_provider);
206 icon = cloud_provider_get_icon (cloud_provider);
207 status = cloud_provider_get_status (cloud_provider);
208 if (name == NULL || icon == NULL || status == CLOUD_PROVIDER_STATUS_INVALID)
209 return;
210
211 g_signal_emit_by_name (self, "changed", NULL);
212174 }
213175
214176 static void
4545 GMenuModel *menu;
4646
4747 providers = cloud_provider_manager_get_providers (manager);
48 if(providers == NULL)
49 return;
4850 g_print ("Providers data\n");
4951 g_print ("##############\n");
5052 for (l = providers; l != NULL; l = l->next)
9597 gchar *argv[])
9698 {
9799 CloudProviderManager *manager;
98
99100 GMainLoop *loop = g_main_loop_new(NULL, FALSE);
100101
101102 manager = cloud_provider_manager_dup_singleton ();
102 g_signal_connect (manager, "changed", G_CALLBACK (on_manager_changed), NULL);
103 g_signal_connect (manager, "changed", G_CALLBACK (on_manager_changed), manager);
103104 cloud_provider_manager_update (manager);
104105
105106 g_print("Waiting for cloud providers\n\n");
22 #include <gio/gio.h>
33 #include <cloudprovider.h>
44 #include <cloudprovidermanager.h>
5
56 #define TIMEOUT 2000
67
78 typedef struct _TestCloudProviderClass TestCloudProviderClass;