telepathy-mission-control: McdAccountManager: have a TpSimpleClientFactory
Simon McVittie
smcv at kemper.freedesktop.org
Mon Oct 8 07:27:46 PDT 2012
Module: telepathy-mission-control
Branch: master
Commit: bd19b09f83087cfde65ff5f777b30a07cf07e22b
URL: http://cgit.freedesktop.org/telepathy/telepathy-mission-control/commit/?id=bd19b09f83087cfde65ff5f777b30a07cf07e22b
Author: Simon McVittie <simon.mcvittie at collabora.co.uk>
Date: Fri Sep 14 15:02:02 2012 +0100
McdAccountManager: have a TpSimpleClientFactory
Signed-off-by: Simon McVittie <simon.mcvittie at collabora.co.uk>
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=55391
Reviewed-by: Xavier Claessens <xavier.claessens at collabora.co.uk>
---
src/mcd-account-manager.c | 43 +++++++++++++++++++++++++++++++++----------
src/mcd-account-manager.h | 3 ++-
src/mcd-master.c | 8 ++++++--
3 files changed, 41 insertions(+), 13 deletions(-)
diff --git a/src/mcd-account-manager.c b/src/mcd-account-manager.c
index a3f2983..1197617 100644
--- a/src/mcd-account-manager.c
+++ b/src/mcd-account-manager.c
@@ -88,8 +88,8 @@ G_DEFINE_TYPE_WITH_CODE (McdAccountManager, mcd_account_manager, G_TYPE_OBJECT,
struct _McdAccountManagerPrivate
{
- /* DBUS connection */
TpDBusDaemon *dbus_daemon;
+ TpSimpleClientFactory *client_factory;
McdStorage *storage;
GHashTable *accounts;
@@ -131,6 +131,7 @@ enum
{
PROP_0,
PROP_DBUS_DAEMON,
+ PROP_CLIENT_FACTORY
};
static guint write_conf_id = 0;
@@ -589,15 +590,23 @@ list_connection_names_cb (const gchar * const *names, gsize n,
{
/* Close the connection */
TpConnection *proxy;
+ gchar *path;
+
+ path = g_strdup_printf ("/%s", names[i]);
+ g_strdelimit (path, ".", '/');
DEBUG ("Killing connection");
- proxy = tp_connection_new (priv->dbus_daemon, names[i], NULL, NULL);
+ proxy = tp_simple_client_factory_ensure_connection (
+ priv->client_factory, path, NULL, NULL);
+
if (proxy)
{
tp_cli_connection_call_disconnect (proxy, -1, NULL, NULL,
NULL, NULL);
g_object_unref (proxy);
}
+
+ g_free (path);
}
}
g_free (contents);
@@ -1506,10 +1515,15 @@ set_property (GObject *obj, guint prop_id,
switch (prop_id)
{
- case PROP_DBUS_DAEMON:
- tp_clear_object (&priv->dbus_daemon);
- priv->dbus_daemon = TP_DBUS_DAEMON (g_value_dup_object (val));
- break;
+ case PROP_CLIENT_FACTORY:
+ g_assert (priv->client_factory == NULL); /* construct-only */
+ priv->client_factory =
+ TP_SIMPLE_CLIENT_FACTORY (g_value_dup_object (val));
+ priv->dbus_daemon =
+ tp_simple_client_factory_get_dbus_daemon (priv->client_factory);
+ g_object_ref (priv->dbus_daemon);
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, prop_id, pspec);
break;
@@ -1560,6 +1574,7 @@ _mcd_account_manager_dispose (GObject *object)
McdAccountManagerPrivate *priv = MCD_ACCOUNT_MANAGER_PRIV (object);
tp_clear_object (&priv->dbus_daemon);
+ tp_clear_object (&priv->client_factory);
G_OBJECT_CLASS (mcd_account_manager_parent_class)->dispose (object);
}
@@ -1580,7 +1595,15 @@ mcd_account_manager_class_init (McdAccountManagerClass *klass)
(object_class, PROP_DBUS_DAEMON,
g_param_spec_object ("dbus-daemon", "DBus daemon", "DBus daemon",
TP_TYPE_DBUS_DAEMON,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ G_PARAM_READABLE));
+
+ g_object_class_install_property
+ (object_class, PROP_CLIENT_FACTORY,
+ g_param_spec_object ("client-factory",
+ "Client factory",
+ "Client factory",
+ TP_TYPE_SIMPLE_CLIENT_FACTORY,
+ G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
}
static const gchar *
@@ -1653,13 +1676,13 @@ _mcd_account_manager_constructed (GObject *obj)
}
McdAccountManager *
-mcd_account_manager_new (TpDBusDaemon *dbus_daemon)
+mcd_account_manager_new (TpSimpleClientFactory *client_factory)
{
gpointer *obj;
obj = g_object_new (MCD_TYPE_ACCOUNT_MANAGER,
- "dbus-daemon", dbus_daemon,
- NULL);
+ "client-factory", client_factory,
+ NULL);
return MCD_ACCOUNT_MANAGER (obj);
}
diff --git a/src/mcd-account-manager.h b/src/mcd-account-manager.h
index 373dffa..8241082 100644
--- a/src/mcd-account-manager.h
+++ b/src/mcd-account-manager.h
@@ -59,7 +59,8 @@ struct _McdAccountManagerClass
};
GType mcd_account_manager_get_type (void);
-McdAccountManager *mcd_account_manager_new (TpDBusDaemon *dbus_daemon);
+McdAccountManager *mcd_account_manager_new (
+ TpSimpleClientFactory *client_factory);
TpDBusDaemon *mcd_account_manager_get_dbus_daemon
(McdAccountManager *account_manager);
diff --git a/src/mcd-master.c b/src/mcd-master.c
index c7f1d97..22ee8c2 100644
--- a/src/mcd-master.c
+++ b/src/mcd-master.c
@@ -94,8 +94,9 @@ typedef struct _McdMasterPrivate
McdAccountManager *account_manager;
McdDispatcher *dispatcher;
- /* We create this for our member objects */
+ /* We create these for our member objects */
TpDBusDaemon *dbus_daemon;
+ TpSimpleClientFactory *client_factory;
GPtrArray *transport_plugins;
GList *account_connections;
@@ -352,6 +353,7 @@ _mcd_master_dispose (GObject * object)
tp_clear_object (&priv->account_manager);
tp_clear_object (&priv->dbus_daemon);
tp_clear_object (&priv->dispatcher);
+ tp_clear_object (&priv->client_factory);
if (default_master == (McdMaster *) object)
{
@@ -379,8 +381,10 @@ mcd_master_constructor (GType type, guint n_params,
umask (0077);
#endif
+ priv->client_factory = tp_simple_client_factory_new (priv->dbus_daemon);
+
if (!priv->account_manager)
- priv->account_manager = mcd_account_manager_new (priv->dbus_daemon);
+ priv->account_manager = mcd_account_manager_new (priv->client_factory);
priv->dispatcher = mcd_dispatcher_new (priv->dbus_daemon, master);
g_assert (MCD_IS_DISPATCHER (priv->dispatcher));
More information about the telepathy-commits
mailing list