[libcloudproviders/wip/rename-exporter: 7/7] cloudproviderexporter: Add convenience api that makes use of the AccountExporter object
- From: Gitlab System User <gitlab src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libcloudproviders/wip/rename-exporter: 7/7] cloudproviderexporter: Add convenience api that makes use of the AccountExporter object
- Date: Sun, 3 Sep 2017 10:23:35 +0000 (UTC)
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]