Codebase list libcloudproviders / 3d28816
Some code cleanup Julius Härtl 6 years ago
3 changed file(s) with 37 addition(s) and 78 deletion(s). Raw diff Collapse all Expand all
4141
4242 enum {
4343 CHANGED,
44 CHANGED_NOTIFY,
4544 READY,
4645 LAST_SIGNAL
4746 };
192191 }
193192 }
194193
195 void
196 cloud_provider_notify (CloudProvider *self)
197 {
198 g_print("cloud-provider-notify\n");
199 g_signal_emit_by_name (self, "changed-notify");
200 }
201
202194 static void
203195 on_proxy_created (GObject *source_object,
204196 GAsyncResult *res,
221213
222214 priv->proxy = proxy;
223215
224 cloud_provider_notify(self);
225
226216 g_signal_connect_swapped(priv->proxy, "cloud-provider-changed", G_CALLBACK(cloud_provider_update), self);
227 g_signal_connect_swapped(priv->proxy, "notify", G_CALLBACK(cloud_provider_notify), self);
228217
229218 cloud_provider_update(self);
230219 }
313302
314303 gSignals [CHANGED] =
315304 g_signal_new ("changed",
316 G_TYPE_FROM_CLASS (klass),
317 G_SIGNAL_RUN_LAST,
318 0,
319 NULL,
320 NULL,
321 g_cclosure_marshal_generic,
322 G_TYPE_NONE,
323 0);
324 gSignals [CHANGED_NOTIFY] =
325 g_signal_new ("changed-notify",
326305 G_TYPE_FROM_CLASS (klass),
327306 G_SIGNAL_RUN_LAST,
328307 0,
4545 static guint gSignals [LAST_SIGNAL];
4646
4747 static void
48 on_cloud_provider_changed (CloudProvider *cloud_provider,
49 CloudProviderManager *self)
50 {
51 if(!cloud_provider_is_available(cloud_provider))
52 return;
53 g_signal_emit_by_name (self, "changed", NULL);
54 }
55
56 static void
57 on_cloud_provider_changed_notify (CloudProvider *cloud_provider, CloudProviderManager *self)
58 {
59 if(!cloud_provider_is_available(cloud_provider))
60 return;
61
62 // update manager to remove cloud providers after owner disappeared
63 if(cloud_provider_get_owner(cloud_provider) == NULL) {
64 cloud_provider_manager_update(self);
65 g_signal_emit_by_name (self, "owners-changed", NULL);
66 }
67 }
68
69 static void
7048 on_cloud_provider_ready (CloudProvider *cloud_provider, CloudProviderManager *self)
7149 {
50 // notify clients that cloud provider list has changed
7251 g_signal_emit_by_name (self, "owners-changed", NULL);
7352 g_print("on_cloud_provider_ready\n");
7453 // update manager to remove cloud providers after owner disappeared
7857 }
7958
8059
60 /**
61 * Update provider list if objects are added/removed at object manager.
62 */
8163 static void
8264 on_cloud_provider_object_manager_notify (
8365 GObject *object,
225207 return priv->providers;
226208 }
227209
210 /**
211 * load_cloud_provider
212 * @manager: A CloudProviderManager
213 * @file: A GFile
214 */
228215 static void
229216 load_cloud_provider (CloudProviderManager *self,
230 GFile *file)
217 GFile *file)
231218 {
232219 CloudProviderManagerPrivate *priv = cloud_provider_manager_get_instance_private (self);
233220 GKeyFile *key_file;
232232 }
233233 }
234234
235
235236 static gboolean
236 test_cloud_provider_notify_change (gpointer user_data)
237 change_random_cloud_provider_state (gpointer user_data)
237238 {
238239 TestCloudProvider *cloud_provider = (TestCloudProvider *)user_data;
239240 GRand *rand;
240241 gint new_status;
242 gint account_id;
243 gchar *account_object_name;
241244
242245 rand = g_rand_new ();
243
244 g_print("Emit changed signal for cloud providers\n");
245 gchar *account_object_name;
246 account_object_name = g_strdup_printf ("/org/freedesktop/CloudProviderServerExample/%03d",
247 g_rand_int_range(rand, 0, COUNT_PLACEHOLDER_ACCOUNTS));
248
246 account_id = g_rand_int_range (rand, 0, COUNT_PLACEHOLDER_ACCOUNTS);
249247 new_status = g_rand_int_range (rand,
250248 CLOUD_PROVIDER_STATUS_IDLE,
251249 CLOUD_PROVIDER_STATUS_ERROR + 1);
252250
251 account_object_name = g_strdup_printf ("/org/freedesktop/CloudProviderServerExample/%03d",
252 account_id);
253
253254 test_cloud_provider_set_status (cloud_provider, new_status);
254255
256 g_print ("Change status of %03d to %d\n", account_id, new_status);
257
255258 g_dbus_connection_emit_signal (cloud_provider->connection,
256 NULL,
257 account_object_name,
258 "org.freedesktop.CloudProvider1",
259 "CloudProviderChanged",
260 NULL,
261 NULL /*error*/);
259 NULL,
260 account_object_name,
261 "org.freedesktop.CloudProvider1",
262 "CloudProviderChanged",
263 NULL,
264 NULL /*error*/);
262265 return TRUE;
263266 }
264267
270273 {
271274 gchar *name = user_data;
272275 g_dbus_method_invocation_return_value (invocation,
273 g_variant_new ("(s)", name));
276 g_variant_new ("(s)", name));
274277 }
275278
276279 static void
280283 {
281284 TestCloudProvider *self = user_data;
282285 g_dbus_method_invocation_return_value (invocation,
283 g_variant_new ("(v)", g_icon_serialize(self->icon)));
286 g_variant_new ("(v)", g_icon_serialize(self->icon)));
284287 }
285288
286289 static void
287290 on_get_path (CloudProvider1 *cloud_provider,
288 GDBusMethodInvocation *invocation,
289 gpointer user_data)
291 GDBusMethodInvocation *invocation,
292 gpointer user_data)
290293 {
291294 TestCloudProvider *self = user_data;
292295 g_dbus_method_invocation_return_value (invocation,
293 g_variant_new ("(s)", self->path));
296 g_variant_new ("(s)", self->path));
294297 }
295298
296299 static void
300303 {
301304 TestCloudProvider *self = user_data;
302305 g_dbus_method_invocation_return_value (invocation,
303 g_variant_new ("(i)", self->status));
306 g_variant_new ("(i)", self->status));
304307 }
305308
306309 static void
316319 g_debug ("Registering cloud provider server 'MyCloud'\n");
317320
318321 self->manager = g_dbus_object_manager_server_new ("/org/freedesktop/CloudProviderServerExample");
322 // export multiple accounts as DBus objects to the bus
319323 for (n = 0; n < COUNT_PLACEHOLDER_ACCOUNTS; n++)
320324 {
321325
335339 g_dbus_object_manager_server_export (self->manager, G_DBUS_OBJECT_SKELETON(object));
336340
337341 export_menu (connection, account_object_name);
338 // FIXME: send initial changed signal to notify already running e.g. nautilus
339 /*g_dbus_connection_emit_signal (connection,
340 NULL,
341 account_object_name,
342 "org.freedesktop.CloudProvider1",
343 "CloudProviderChanged",
344 NULL,
345 // NULL);
346 */
342
347343 g_free(account_object_name);
348344 }
349345 g_dbus_object_manager_server_set_connection (self->manager, connection);
360356 {
361357 TestCloudProvider *self = (TestCloudProvider *)user_data;
362358 self->timeout_handler = g_timeout_add (TIMEOUT,
363 (GSourceFunc) test_cloud_provider_notify_change,
364 self);
365 test_cloud_provider_notify_change(self);
359 (GSourceFunc) change_random_cloud_provider_state,
360 self);
361 change_random_cloud_provider_state (self);
366362 }
367363
368364 static void
380376 TestCloudProvider *test_cloud_provider;
381377 guint owner_id;
382378
383
384379 test_cloud_provider = g_object_new (test_cloud_provider_get_type (), NULL);
385
386380
387381 owner_id = g_bus_own_name (G_BUS_TYPE_SESSION,
388382 "org.freedesktop.CloudProviderServerExample",
397391 g_main_loop_run (loop);
398392
399393 g_bus_unown_name (owner_id);
400
401394 g_object_unref (test_cloud_provider);
402395
403396 return 0;