[gnome-online-accounts] telepathy: add methods to instantiate the provider with the right values
- From: Marco Barisione <mbari src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-online-accounts] telepathy: add methods to instantiate the provider with the right values
- Date: Thu, 22 Aug 2013 14:18:49 +0000 (UTC)
commit 5dce10d05cf3f807086b84b1f3e84684cfdac6fd
Author: Marco Barisione <marco barisione collabora co uk>
Date: Wed Jul 24 17:02:38 2013 +0100
telepathy: add methods to instantiate the provider with the right values
https://bugzilla.gnome.org/show_bug.cgi?id=696267
src/goabackend/goatelepathyprovider.c | 148 ++++++++++++++++++++++++++++++++-
src/goabackend/goatelepathyprovider.h | 4 +
2 files changed, 151 insertions(+), 1 deletions(-)
---
diff --git a/src/goabackend/goatelepathyprovider.c b/src/goabackend/goatelepathyprovider.c
index e763b26..94c41f0 100644
--- a/src/goabackend/goatelepathyprovider.c
+++ b/src/goabackend/goatelepathyprovider.c
@@ -28,6 +28,23 @@
#include "goaprovider-priv.h"
#include "goatelepathyprovider.h"
+typedef struct _GoaTelepathyProviderPrivate GoaTelepathyProviderPrivate;
+
+struct _GoaTelepathyProviderPrivate
+{
+ TpawProtocol *protocol;
+ gchar *protocol_name;
+ gchar *provider_type;
+};
+
+enum {
+ PROP_0,
+ PROP_PROTOCOL,
+ PROP_PROTOCOL_NAME,
+ NUM_PROPERTIES
+};
+
+static GParamSpec *properties[NUM_PROPERTIES] = { NULL, };
/**
* GoaTelepathyProvider:
@@ -39,6 +56,7 @@ struct _GoaTelepathyProvider
{
/*< private >*/
GoaProvider parent_instance;
+ GoaTelepathyProviderPrivate *priv;
};
typedef struct _GoaTelepathyProviderClass GoaTelepathyProviderClass;
@@ -202,14 +220,111 @@ show_account (GoaProvider *provider,
/* ---------------------------------------------------------------------------------------------------- */
+GoaTelepathyProvider *
+goa_telepathy_provider_new_from_protocol_name (const gchar *protocol_name)
+{
+ g_return_val_if_fail (protocol_name != NULL, NULL);
+
+ return g_object_new (GOA_TYPE_TELEPATHY_PROVIDER,
+ "protocol-name", protocol_name,
+ NULL);
+}
+
+/* ---------------------------------------------------------------------------------------------------- */
+
+GoaTelepathyProvider *
+goa_telepathy_provider_new_from_protocol (TpawProtocol *protocol)
+{
+ g_return_val_if_fail (TPAW_IS_PROTOCOL (protocol), NULL);
+
+ return g_object_new (GOA_TYPE_TELEPATHY_PROVIDER,
+ "protocol", protocol,
+ NULL);
+}
+
+/* ---------------------------------------------------------------------------------------------------- */
+
+static void
+goa_telepathy_provider_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GoaTelepathyProviderPrivate *priv = GOA_TELEPATHY_PROVIDER (object)->priv;
+
+ switch (property_id) {
+ case PROP_PROTOCOL:
+ g_value_set_object (value, priv->protocol);
+ break;
+ case PROP_PROTOCOL_NAME:
+ g_value_set_string (value, priv->protocol_name);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+static void
+goa_telepathy_provider_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GoaTelepathyProviderPrivate *priv = GOA_TELEPATHY_PROVIDER (object)->priv;
+
+ switch (property_id) {
+ case PROP_PROTOCOL:
+ priv->protocol = g_value_dup_object (value);
+ break;
+ case PROP_PROTOCOL_NAME:
+ priv->protocol_name = g_value_dup_string (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
static void
goa_telepathy_provider_init (GoaTelepathyProvider *provider)
{
+ provider->priv = G_TYPE_INSTANCE_GET_PRIVATE (provider,
+ GOA_TYPE_TELEPATHY_PROVIDER, GoaTelepathyProviderPrivate);
+}
+
+static void
+goa_telepathy_provider_constructed (GObject *object)
+{
+ GoaTelepathyProviderPrivate *priv = GOA_TELEPATHY_PROVIDER (object)->priv;
+
+ G_OBJECT_CLASS (goa_telepathy_provider_parent_class)->constructed (object);
+
+ if (priv->protocol != NULL)
+ {
+ if (priv->protocol_name != NULL)
+ g_error ("You cannot set \"protocol-name\" if you set \"protocol\"");
+ priv->protocol_name = g_strdup (tpaw_protocol_get_protocol_name (priv->protocol));
+ }
+ else
+ {
+ if (priv->protocol_name == NULL)
+ g_error ("You must set \"protocol-name\" or \"protocol\" on GoaTelepathyProvider");
+ }
+
+ priv->provider_type = g_strdup_printf ("%s/%s",
+ GOA_TELEPATHY_PROVIDER_BASE_TYPE, priv->protocol_name);
}
static void
goa_telepathy_provider_finalize (GObject *object)
{
+ GoaTelepathyProviderPrivate *priv = GOA_TELEPATHY_PROVIDER (object)->priv;
+
+ g_clear_object (&priv->protocol);
+ g_free (priv->protocol_name);
+ g_free (priv->provider_type);
+
(G_OBJECT_CLASS (goa_telepathy_provider_parent_class)->finalize) (object);
}
@@ -219,7 +334,10 @@ goa_telepathy_provider_class_init (GoaTelepathyProviderClass *klass)
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GoaProviderClass *provider_class = GOA_PROVIDER_CLASS (klass);
- object_class->finalize = goa_telepathy_provider_finalize;
+ object_class->constructed = goa_telepathy_provider_constructed;
+ object_class->finalize = goa_telepathy_provider_finalize;
+ object_class->get_property = goa_telepathy_provider_get_property;
+ object_class->set_property = goa_telepathy_provider_set_property;
provider_class->get_provider_type = get_provider_type;
provider_class->get_provider_name = get_provider_name;
@@ -229,4 +347,32 @@ goa_telepathy_provider_class_init (GoaTelepathyProviderClass *klass)
provider_class->refresh_account = refresh_account;
provider_class->build_object = build_object;
provider_class->show_account = show_account;
+
+ g_type_class_add_private (object_class, sizeof (GoaTelepathyProviderPrivate));
+
+ /**
+ * GoaTelepathyProvider:protocol
+ *
+ * A #TpawProtocol associated to this provider (or NULL).
+ */
+ properties[PROP_PROTOCOL] =
+ g_param_spec_object ("protocol",
+ "Protocol",
+ "A #TpawProtocol associated to the provider (or NULL)",
+ TPAW_TYPE_PROTOCOL,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
+
+ /**
+ * GoaTelepathyProvider:protocol-name
+ *
+ * The name of the protocol associated to the provider.
+ */
+ properties[PROP_PROTOCOL_NAME] =
+ g_param_spec_string ("protocol-name",
+ "Protocol name",
+ "The name of the protocol associated to the provider",
+ NULL,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
+
+ g_object_class_install_properties (object_class, NUM_PROPERTIES, properties);
}
diff --git a/src/goabackend/goatelepathyprovider.h b/src/goabackend/goatelepathyprovider.h
index 8c92bba..7187b4d 100644
--- a/src/goabackend/goatelepathyprovider.h
+++ b/src/goabackend/goatelepathyprovider.h
@@ -29,6 +29,7 @@
#define __GOA_TELEPATHY_PROVIDER_H__
#include <glib-object.h>
+#include <tp-account-widgets/tpaw-protocol.h>
G_BEGIN_DECLS
@@ -43,6 +44,9 @@ typedef struct _GoaTelepathyProvider GoaTelepathyProvider;
GType goa_telepathy_provider_get_type (void) G_GNUC_CONST;
+GoaTelepathyProvider *goa_telepathy_provider_new_from_protocol_name (const gchar *protocol_name);
+GoaTelepathyProvider *goa_telepathy_provider_new_from_protocol (TpawProtocol *protocol);
+
G_END_DECLS
#endif /* __GOA_TELEPATHY_PROVIDER_H__ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]