telepathy-mission-control: Put the connectivity monitor in the McdAccountManager

Simon McVittie smcv at kemper.freedesktop.org
Wed Sep 4 05:38:35 PDT 2013


Module: telepathy-mission-control
Branch: master
Commit: e2bcc5b94496d755c28490f28925da6f54a4cf4d
URL:    http://cgit.freedesktop.org/telepathy/telepathy-mission-control/commit/?id=e2bcc5b94496d755c28490f28925da6f54a4cf4d

Author: Simon McVittie <simon.mcvittie at collabora.co.uk>
Date:   Tue Sep  3 18:39:36 2013 +0100

Put the connectivity monitor in the McdAccountManager

Bug: https://bugs.freedesktop.org/show_bug.cgi?id=68712
Signed-off-by: Simon McVittie <simon.mcvittie at collabora.co.uk>
Reviewed-by: Guillaume Desmottes <guillaume.desmottes at collabora.co.uk>

---

 src/kludge-transport.c    |   21 +++++++++++++--------
 src/kludge-transport.h    |    4 +++-
 src/mcd-account-manager.c |   11 +++++++++++
 src/mcd-account-manager.h |    4 ++++
 src/mcd-master.c          |    3 ++-
 5 files changed, 33 insertions(+), 10 deletions(-)

diff --git a/src/kludge-transport.c b/src/kludge-transport.c
index 47b6cc0..c9beb5b 100644
--- a/src/kludge-transport.c
+++ b/src/kludge-transport.c
@@ -75,10 +75,6 @@ mcd_kludge_transport_constructed (GObject *object)
   if (parent_class->constructed != NULL)
     parent_class->constructed (object);
 
-  priv->minotaur = mcd_connectivity_monitor_new ();
-  tp_g_signal_connect_object (priv->minotaur, "state-change",
-      (GCallback) monitor_state_changed_cb, self, 0);
-
   /* We just use ourself as the McdTransport pointer... */
   priv->transports = g_list_prepend (NULL, self);
 
@@ -235,15 +231,24 @@ mcd_kludge_transport_account_connection_cb (
 }
 
 static McdTransportPlugin *
-mcd_kludge_transport_new (void)
+mcd_kludge_transport_new (McdConnectivityMonitor *connectivity_monitor)
 {
-  return g_object_new (MCD_TYPE_KLUDGE_TRANSPORT, NULL);
+  McdKludgeTransport *self = g_object_new (MCD_TYPE_KLUDGE_TRANSPORT, NULL);
+
+  /* Strictly speaking this should be done with properties, but I'm
+   * going to delete this class soon anyway. */
+  self->priv->minotaur = connectivity_monitor;
+  tp_g_signal_connect_object (self->priv->minotaur, "state-change",
+      (GCallback) monitor_state_changed_cb, self, 0);
+
+  return MCD_TRANSPORT_PLUGIN (self);
 }
 
 void
-mcd_kludge_transport_install (McdMaster *master)
+mcd_kludge_transport_install (McdMaster *master,
+    McdConnectivityMonitor *connectivity_monitor)
 {
-  McdTransportPlugin *self = mcd_kludge_transport_new ();
+  McdTransportPlugin *self = mcd_kludge_transport_new (connectivity_monitor);
 
   mcd_master_register_transport (master, self);
   mcd_master_register_account_connection (master,
diff --git a/src/kludge-transport.h b/src/kludge-transport.h
index 7f27043..b246f21 100644
--- a/src/kludge-transport.h
+++ b/src/kludge-transport.h
@@ -23,6 +23,7 @@
 #include <glib-object.h>
 #include "mcd-master.h"
 #include "mcd-transport.h"
+#include "connectivity-monitor.h"
 
 typedef struct _McdKludgeTransport McdKludgeTransport;
 typedef struct _McdKludgeTransportClass McdKludgeTransportClass;
@@ -40,7 +41,8 @@ struct _McdKludgeTransport {
 
 GType mcd_kludge_transport_get_type (void);
 
-void mcd_kludge_transport_install (McdMaster *master);
+void mcd_kludge_transport_install (McdMaster *master,
+    McdConnectivityMonitor *connectivity_monitor);
 
 /* TYPE MACROS */
 #define MCD_TYPE_KLUDGE_TRANSPORT \
diff --git a/src/mcd-account-manager.c b/src/mcd-account-manager.c
index 2948225..0dc5363 100644
--- a/src/mcd-account-manager.c
+++ b/src/mcd-account-manager.c
@@ -90,6 +90,7 @@ struct _McdAccountManagerPrivate
 {
     TpDBusDaemon *dbus_daemon;
     TpSimpleClientFactory *client_factory;
+    McdConnectivityMonitor *minotaur;
 
     McdStorage *storage;
     GHashTable *accounts;
@@ -1579,6 +1580,7 @@ _mcd_account_manager_dispose (GObject *object)
 
     tp_clear_object (&priv->dbus_daemon);
     tp_clear_object (&priv->client_factory);
+    tp_clear_object (&priv->minotaur);
 
     G_OBJECT_CLASS (mcd_account_manager_parent_class)->dispose (object);
 }
@@ -1656,6 +1658,8 @@ _mcd_account_manager_constructed (GObject *obj)
 
     DEBUG ("");
 
+    priv->minotaur = mcd_connectivity_monitor_new ();
+
     priv->storage = mcd_storage_new (priv->dbus_daemon);
     priv->accounts = g_hash_table_new_full (g_str_hash, g_str_equal,
                                             NULL, unref_account);
@@ -1704,6 +1708,13 @@ mcd_account_manager_get_dbus_daemon (McdAccountManager *account_manager)
     return account_manager->priv->dbus_daemon;
 }
 
+McdConnectivityMonitor *
+mcd_account_manager_get_connectivity_monitor (McdAccountManager *self)
+{
+  g_return_val_if_fail (MCD_IS_ACCOUNT_MANAGER (self), NULL);
+  return self->priv->minotaur;
+}
+
 /**
  * McdAccountManagerWriteConfCb:
  * @account_manager: the #McdAccountManager
diff --git a/src/mcd-account-manager.h b/src/mcd-account-manager.h
index 8241082..922f489 100644
--- a/src/mcd-account-manager.h
+++ b/src/mcd-account-manager.h
@@ -27,6 +27,7 @@
 #include <telepathy-glib/telepathy-glib.h>
 #include "mission-control-plugins/mission-control-plugins.h"
 #include "mcd-storage.h"
+#include "connectivity-monitor.h"
 
 G_BEGIN_DECLS
 #define MCD_TYPE_ACCOUNT_MANAGER         (mcd_account_manager_get_type ())
@@ -81,6 +82,9 @@ McdAccount *mcd_account_manager_lookup_account_by_path (McdAccountManager *accou
 
 McdStorage *mcd_account_manager_get_storage (McdAccountManager *manager);
 
+McdConnectivityMonitor *mcd_account_manager_get_connectivity_monitor (
+    McdAccountManager *self);
+
 G_END_DECLS
 
 #endif
diff --git a/src/mcd-master.c b/src/mcd-master.c
index 7d1dca0..006a27b 100644
--- a/src/mcd-master.c
+++ b/src/mcd-master.c
@@ -373,7 +373,8 @@ mcd_master_constructor (GType type, guint n_params,
             tp_proxy_get_dbus_connection (TP_PROXY (priv->dbus_daemon))),
         TRUE);
 
-    mcd_kludge_transport_install (master);
+    mcd_kludge_transport_install (master,
+        mcd_account_manager_get_connectivity_monitor (priv->account_manager));
 
     /* we assume that at this point all transport plugins have been registered.
      * We get the active transports and check whether some accounts should be



More information about the telepathy-commits mailing list