[libcloudproviders/wip/rename-exporter: 7/7] cloudproviderexporter: Add convenience api that makes use of the AccountExporter object



commit 82296010b9c38c9176dc184aa9cb64aceb3f0ade
Author: Julius Härtl <jus bitgrid net>
Date:   Fri Sep 1 20:47:06 2017 +0200

    cloudproviderexporter: Add convenience api that makes use of the AccountExporter object

 src/cloudprovideraccountexporter.c     |  46 +++++++++++++++
 src/cloudprovideraccountexporter.h     |  12 ++++
 src/cloudprovideraccountexporterpriv.h |   6 ++
 src/cloudproviderexporter.c            | 100 ++++++++++++++++++++++++++-------
 src/cloudproviderexporter.h            |   7 +++
 test/testcloudproviderserver.c         |  20 +++----
 6 files changed, 162 insertions(+), 29 deletions(-)
---
diff --git a/src/cloudprovideraccountexporter.c b/src/cloudprovideraccountexporter.c
index 97bd6dd..81570ed 100644
--- a/src/cloudprovideraccountexporter.c
+++ b/src/cloudprovideraccountexporter.c
@@ -24,6 +24,8 @@ typedef struct
 {
   gchar *object_name;
   CloudProviderAccount1 *skeleton;
+  GMenuModel *menu_model;
+  GActionGroup *action_group;
 } CloudProviderAccountExporterPrivate;
 
 G_DEFINE_TYPE_WITH_PRIVATE (CloudProviderAccountExporter, cloud_provider_account_exporter, G_TYPE_OBJECT)
@@ -35,6 +37,20 @@ cloud_provider_account_exporter_get_object_name (CloudProviderAccountExporter *s
   return priv->object_name;
 }
 
+GMenuModel *
+cloud_provider_account_exporter_get_menu_model (CloudProviderAccountExporter *self)
+{
+  CloudProviderAccountExporterPrivate *priv = cloud_provider_account_exporter_get_instance_private (self);
+  return priv->menu_model;
+}
+
+GActionGroup *
+cloud_provider_account_exporter_get_action_group (CloudProviderAccountExporter *self)
+{
+  CloudProviderAccountExporterPrivate *priv = cloud_provider_account_exporter_get_instance_private (self);
+  return priv->action_group;
+}
+
 GDBusInterfaceSkeleton*
 cloud_provider_account_exporter_get_skeleton (CloudProviderAccountExporter *self)
 {
@@ -120,6 +136,36 @@ cloud_provider_account_exporter_new (const gchar *object_name)
   return self;
 }
 
+void
+cloud_provider_account_exporter_add_menu_model (CloudProviderAccountExporter *self,
+                                                GMenuModel                   *menu_model)
+{
+  CloudProviderAccountExporterPrivate *priv = cloud_provider_account_exporter_get_instance_private (self);
+  priv->menu_model = menu_model;
+}
+
+void
+cloud_provider_account_exporter_remove_menu (CloudProviderAccountExporter *self)
+{
+  CloudProviderAccountExporterPrivate *priv = cloud_provider_account_exporter_get_instance_private (self);
+  priv->menu_model = NULL;
+}
+
+void
+cloud_provider_account_exporter_add_action_group (CloudProviderAccountExporter *self,
+                                                  GActionGroup                 *action_group)
+{
+  CloudProviderAccountExporterPrivate *priv = cloud_provider_account_exporter_get_instance_private (self);
+  priv->action_group = action_group;
+}
+
+void
+cloud_provider_account_exporter_remove_action_group (CloudProviderAccountExporter *self)
+{
+  CloudProviderAccountExporterPrivate *priv = cloud_provider_account_exporter_get_instance_private (self);
+  priv->action_group = NULL;
+}
+
 static void
 cloud_provider_account_exporter_finalize (GObject *object)
 {
diff --git a/src/cloudprovideraccountexporter.h b/src/cloudprovideraccountexporter.h
index 0879de9..37cbde0 100644
--- a/src/cloudprovideraccountexporter.h
+++ b/src/cloudprovideraccountexporter.h
@@ -51,6 +51,18 @@ cloud_provider_account_exporter_emit_changed (CloudProviderAccountExporter *clou
 CloudProviderAccountExporter*
 cloud_provider_account_exporter_new (const gchar *account_object_name);
 
+void
+cloud_provider_account_exporter_add_menu_model (CloudProviderAccountExporter *self,
+                                                GMenuModel                   *menu_model);
+void
+cloud_provider_account_exporter_remove_menu (CloudProviderAccountExporter *self);
+
+void
+cloud_provider_account_exporter_add_action_group (CloudProviderAccountExporter *self,
+                                                  GActionGroup                 *action_group);
+void
+cloud_provider_account_exporter_remove_action_group (CloudProviderAccountExporter *self);
+
 G_END_DECLS
 
 #endif /* CLOUD_PROVIDER_ACCOUNT_EXPORTER_H */
diff --git a/src/cloudprovideraccountexporterpriv.h b/src/cloudprovideraccountexporterpriv.h
index 01f256b..1bb0968 100644
--- a/src/cloudprovideraccountexporterpriv.h
+++ b/src/cloudprovideraccountexporterpriv.h
@@ -29,4 +29,10 @@ cloud_provider_account_exporter_get_skeleton (CloudProviderAccountExporter *self
 gchar *
 cloud_provider_account_exporter_get_object_name (CloudProviderAccountExporter *self);
 
+GMenuModel *
+cloud_provider_account_exporter_get_menu_model (CloudProviderAccountExporter *self);
+
+GActionGroup *
+cloud_provider_account_exporter_get_action_group (CloudProviderAccountExporter *self);
+
 #endif
diff --git a/src/cloudproviderexporter.c b/src/cloudproviderexporter.c
index 3a04107..6e98fa0 100644
--- a/src/cloudproviderexporter.c
+++ b/src/cloudproviderexporter.c
@@ -51,29 +51,91 @@ G_DEFINE_TYPE_WITH_PRIVATE (CloudProviderExporter, cloud_provider_exporter, G_TY
 
 /**
  * cloud_provider_exporter_add_account:
- * @self: The cloud provider
+ * @self: The cloud provider exporter
  * @account: The account object
  *
  * Each cloud provider can have a variety of account associated with it. Use this
- * function to export the accounts the user set up.
+ * function to add the accounts the user set up. Calling cloud_provider_exporter_export_objects
+ * once is required after adding the initial set of accounts.
  */
 void
-cloud_provider_exporter_add_account (CloudProviderExporter        *cloud_provider,
+cloud_provider_exporter_add_account (CloudProviderExporter        *self,
                                      CloudProviderAccountExporter *account)
 {
-  CloudProviderExporterPrivate *priv = cloud_provider_exporter_get_instance_private(cloud_provider);
+  CloudProviderExporterPrivate *priv = cloud_provider_exporter_get_instance_private(self);
   CloudProviderObjectSkeleton *object;
-  gchar *object_path = g_strconcat (priv->object_path, "/", cloud_provider_account_exporter_get_object_name 
(account), NULL);
+  gchar *object_name = cloud_provider_account_exporter_get_object_name (account);
+  gchar *object_path = g_strconcat (priv->object_path, "/", object_name, NULL);
   object = cloud_provider_object_skeleton_new(object_path);
   cloud_provider_object_skeleton_set_account1(object, CLOUD_PROVIDER_ACCOUNT1 
(cloud_provider_account_exporter_get_skeleton (account)));
   g_dbus_object_manager_server_export (priv->manager, G_DBUS_OBJECT_SKELETON(object));
+
+  /* export menus/actiongroups that are coupled with the account */
+  GMenuModel *menu = cloud_provider_account_exporter_get_menu_model (account);
+  GActionGroup *action_group = cloud_provider_account_exporter_get_action_group (account);
+  if (menu != NULL)
+  {
+    cloud_provider_exporter_export_menu (self,
+                                         object_name,
+                                         menu);
+  }
+  if (action_group != NULL)
+  {
+    cloud_provider_exporter_export_action_group (self,
+                                                 object_name,
+                                                 action_group);
+  }
+
   g_free(object_path);
 }
 
+/**
+ * cloud_provider_exporter_remove_account:
+ * @self: The cloud provider exporter
+ * @account: The account object
+ *
+ * Each cloud provider can have a variety of account associated with it. Use this
+ * function to remove the accounts.
+ */
+void
+cloud_provider_exporter_remove_account (CloudProviderExporter        *self,
+                                        CloudProviderAccountExporter *account)
+{
+  gchar *object_name = cloud_provider_account_exporter_get_object_name (account);
+  cloud_provider_exporter_unexport_account (self, object_name);
+}
+
+
+/**
+ * cloud_provider_exporter_emit_account_changed:
+ * @self: The cloud provider
+ * @account: The account
+ *
+ * When an account changes its status, emit a signal to DBUS using this function
+ * so clients are aware of the change.
+ */
+void
+cloud_provider_exporter_emit_account_changed (CloudProviderExporter        *self,
+                                              CloudProviderAccountExporter *account)
+{
+  gchar *object_name = cloud_provider_account_exporter_get_object_name (account);
+  cloud_provider_exporter_emit_changed (self, object_name);
+}
+
+
+/**
+ * cloud_provider_exporter_export_account:
+ * @self: The cloud provider exporter
+ * @account_name: The account name
+ * @account: The account object
+ *
+ * Each cloud provider can have a variety of account associated with it. Use this
+ * function to export the accounts the user set up.
+ */
 void
-cloud_provider_exporter_export_account(CloudProviderExporter * self,
-                              const gchar *account_name,
-                              CloudProviderAccount1 *account)
+cloud_provider_exporter_export_account(CloudProviderExporter *self,
+                                       const gchar           *account_name,
+                                       CloudProviderAccount1 *account)
 {
   CloudProviderExporterPrivate *priv = cloud_provider_exporter_get_instance_private(self);
   CloudProviderObjectSkeleton *object;
@@ -95,7 +157,7 @@ cloud_provider_exporter_export_account(CloudProviderExporter * self,
  */
 void
 cloud_provider_exporter_unexport_account(CloudProviderExporter *self,
-                                const gchar   *account_name)
+                                         const gchar           *account_name)
 {
   CloudProviderExporterPrivate *priv = cloud_provider_exporter_get_instance_private(self);
   gchar *object_path = g_strconcat (priv->object_path, "/", account_name, NULL);
@@ -125,8 +187,8 @@ cloud_provider_exporter_unexport_account(CloudProviderExporter *self,
  */
 guint
 cloud_provider_exporter_export_menu(CloudProviderExporter *self,
-                           const gchar   *account_name,
-                           GMenuModel    *model)
+                                    const gchar           *account_name,
+                                    GMenuModel            *model)
 {
   CloudProviderExporterPrivate *priv = cloud_provider_exporter_get_instance_private(self);
   gchar *object_path = g_strconcat(priv->object_path, "/", account_name, NULL);
@@ -151,7 +213,7 @@ cloud_provider_exporter_export_menu(CloudProviderExporter *self,
  */
 void
 cloud_provider_exporter_unexport_menu(CloudProviderExporter *self,
-                             const gchar   *account_name)
+                                      const gchar           *account_name)
 {
   CloudProviderExporterPrivate *priv = cloud_provider_exporter_get_instance_private(self);
   guint *export_id;
@@ -175,8 +237,8 @@ cloud_provider_exporter_unexport_menu(CloudProviderExporter *self,
  */
 guint
 cloud_provider_exporter_export_action_group(CloudProviderExporter *self,
-                                   const gchar   *account_name,
-                                   GActionGroup  *action_group)
+                                            const gchar           *account_name,
+                                            GActionGroup          *action_group)
 {
   CloudProviderExporterPrivate *priv = cloud_provider_exporter_get_instance_private(self);
   gchar *object_path = g_strconcat(priv->object_path, "/", account_name, NULL);
@@ -201,7 +263,7 @@ cloud_provider_exporter_export_action_group(CloudProviderExporter *self,
  */
 void
 cloud_provider_exporter_unexport_action_group(CloudProviderExporter *self,
-                                     const gchar   *account_name)
+                                              const gchar           *account_name)
 {
   CloudProviderExporterPrivate *priv = cloud_provider_exporter_get_instance_private(self);
   guint *export_id;
@@ -219,7 +281,7 @@ cloud_provider_exporter_unexport_action_group(CloudProviderExporter *self,
  *
  * Export all objects assigned previously with functions like cloud_provider_exporter_export_account
  * to DBUS.
- * Use this function after exporting all the required object to avoid multiple signals
+ * Use this function after adding all the required objects to avoid multiple signals
  * being emitted in a short time.
  */
 void
@@ -239,7 +301,7 @@ cloud_provider_exporter_export_objects(CloudProviderExporter * self)
  */
 void
 cloud_provider_exporter_emit_changed (CloudProviderExporter *self,
-                             const gchar   *account_name)
+                                      const gchar           *account_name)
 {
   CloudProviderExporterPrivate *priv = cloud_provider_exporter_get_instance_private(self);
   gchar *object_path = g_strconcat(priv->object_path, "/", account_name, NULL);
@@ -253,8 +315,8 @@ cloud_provider_exporter_emit_changed (CloudProviderExporter *self,
 
 CloudProviderExporter *
 cloud_provider_exporter_new (GDBusConnection *bus,
-                    const gchar     *bus_name,
-                    const gchar     *object_path)
+                             const gchar     *bus_name,
+                             const gchar     *object_path)
 {
   CloudProviderExporter *self;
   CloudProviderExporterPrivate *priv;
diff --git a/src/cloudproviderexporter.h b/src/cloudproviderexporter.h
index 4023999..3f7d5ec 100644
--- a/src/cloudproviderexporter.h
+++ b/src/cloudproviderexporter.h
@@ -74,6 +74,10 @@ cloud_provider_exporter_unexport_action_group (CloudProviderExporter *cloud_prov
 void
 cloud_provider_exporter_add_account (CloudProviderExporter        *cloud_provider_exporter,
                                      CloudProviderAccountExporter *account);
+void
+cloud_provider_exporter_remove_account (CloudProviderExporter        *cloud_provider_exporter,
+                                        CloudProviderAccountExporter *account);
+
 
 void
 cloud_provider_exporter_export_objects (CloudProviderExporter *cloud_provider_exporter);
@@ -81,6 +85,9 @@ cloud_provider_exporter_export_objects (CloudProviderExporter *cloud_provider_ex
 void
 cloud_provider_exporter_emit_changed (CloudProviderExporter *cloud_provider_exporter,
                                       const gchar           *account_name);
+void
+cloud_provider_exporter_emit_account_changed (CloudProviderExporter       *cloud_provider_exporter,
+                                              CloudProviderAccountExporter *account);
 
 CloudProviderExporter*
 cloud_provider_exporter_new (GDBusConnection *bus,
diff --git a/test/testcloudproviderserver.c b/test/testcloudproviderserver.c
index 19d0853..0481365 100644
--- a/test/testcloudproviderserver.c
+++ b/test/testcloudproviderserver.c
@@ -310,16 +310,16 @@ on_bus_acquired (GDBusConnection *connection,
       gchar *account_object_name = g_strdup_printf ("MyCloud%d", n);
       gchar *account_name = g_strdup_printf ("MyCloud %d", n);
 
-      CloudProviderAccountExporter *cloud_provider_account_exporter = 
cloud_provider_account_exporter_new(account_object_name);
-      g_signal_connect(cloud_provider_account_exporter, "handle_get_name", G_CALLBACK (on_get_name), 
account_name);
-      g_signal_connect(cloud_provider_account_exporter, "handle_get_icon", G_CALLBACK (on_get_icon), self);
-      g_signal_connect(cloud_provider_account_exporter, "handle_get_path", G_CALLBACK (on_get_path), self);
-      g_signal_connect(cloud_provider_account_exporter, "handle_get_status", G_CALLBACK (on_get_status), 
self);
-      g_signal_connect(cloud_provider_account_exporter, "handle_get_status_details", G_CALLBACK 
(on_get_status_details), self);
-
-      cloud_provider_exporter_add_account(self->cloud_provider, cloud_provider_account_exporter);
-      cloud_provider_exporter_export_menu (self->cloud_provider, account_object_name, get_model ());
-      cloud_provider_exporter_export_action_group (self->cloud_provider, account_object_name, 
get_action_group ());
+      CloudProviderAccountExporter *account = cloud_provider_account_exporter_new(account_object_name);
+      g_signal_connect (account, "handle_get_name", G_CALLBACK (on_get_name), account_name);
+      g_signal_connect (account, "handle_get_icon", G_CALLBACK (on_get_icon), self);
+      g_signal_connect (account, "handle_get_path", G_CALLBACK (on_get_path), self);
+      g_signal_connect (account, "handle_get_status", G_CALLBACK (on_get_status), self);
+      g_signal_connect (account, "handle_get_status_details", G_CALLBACK (on_get_status_details), self);
+      cloud_provider_account_exporter_add_menu_model (account, get_model ());
+      cloud_provider_account_exporter_add_action_group (account, get_action_group ());
+
+      cloud_provider_exporter_add_account(self->cloud_provider, account);
 
       g_free(account_object_name);
     }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]