telepathy-mission-control: McdAccount: respond to connectivity status changes
Simon McVittie
smcv at kemper.freedesktop.org
Wed Sep 4 05:38:35 PDT 2013
Module: telepathy-mission-control
Branch: master
Commit: cb99598acaa71edd6efcedadaaff3103acf76571
URL: http://cgit.freedesktop.org/telepathy/telepathy-mission-control/commit/?id=cb99598acaa71edd6efcedadaaff3103acf76571
Author: Simon McVittie <simon.mcvittie at collabora.co.uk>
Date: Thu Aug 29 16:41:22 2013 +0100
McdAccount: respond to connectivity status changes
Instead of proxying through the transport plugin and the McdMaster, just
watch the McdConnectivityMonitor. Much simpler!
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/connectivity-monitor.c | 5 ++-
src/kludge-transport.c | 20 --------
src/mcd-account.c | 28 +++++++++++
src/mcd-master.c | 108 --------------------------------------------
4 files changed, 32 insertions(+), 129 deletions(-)
diff --git a/src/connectivity-monitor.c b/src/connectivity-monitor.c
index 3bf428d..7015ef2 100644
--- a/src/connectivity-monitor.c
+++ b/src/connectivity-monitor.c
@@ -109,7 +109,10 @@ connectivity_monitor_change_states (
priv->connectivity = connectivity;
if (old_total != new_total)
- g_signal_emit (self, signals[STATE_CHANGE], 0, new_total);
+ {
+ DEBUG ("%s", new_total ? "connected" : "disconnected");
+ g_signal_emit (self, signals[STATE_CHANGE], 0, new_total);
+ }
}
#ifdef HAVE_NM
diff --git a/src/kludge-transport.c b/src/kludge-transport.c
index 06c30a2..664b8c3 100644
--- a/src/kludge-transport.c
+++ b/src/kludge-transport.c
@@ -45,10 +45,6 @@ struct _McdKludgeTransportPrivate {
static void transport_iface_init (
gpointer g_iface,
gpointer iface_data);
-static void monitor_state_changed_cb (
- McdConnectivityMonitor *monitor,
- gboolean connected,
- gpointer user_data);
G_DEFINE_TYPE_WITH_CODE (McdKludgeTransport, mcd_kludge_transport,
G_TYPE_OBJECT,
@@ -158,20 +154,6 @@ transport_iface_init (
klass->get_transport_status = mcd_kludge_transport_get_transport_status;
}
-static void
-monitor_state_changed_cb (
- McdConnectivityMonitor *monitor,
- gboolean connected,
- gpointer user_data)
-{
- McdKludgeTransport *self = MCD_KLUDGE_TRANSPORT (user_data);
- McdTransportStatus new_status =
- connected ? MCD_TRANSPORT_STATUS_CONNECTED
- : MCD_TRANSPORT_STATUS_DISCONNECTED;
-
- g_signal_emit_by_name (self, "status-changed", self, new_status);
-}
-
static McdTransportPlugin *
mcd_kludge_transport_new (McdConnectivityMonitor *connectivity_monitor)
{
@@ -180,8 +162,6 @@ mcd_kludge_transport_new (McdConnectivityMonitor *connectivity_monitor)
/* 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);
}
diff --git a/src/mcd-account.c b/src/mcd-account.c
index c16c05c..d3edfc0 100644
--- a/src/mcd-account.c
+++ b/src/mcd-account.c
@@ -3610,6 +3610,34 @@ monitor_state_changed_cb (
{
McdAccount *self = MCD_ACCOUNT (user_data);
+ if (connected)
+ {
+ if (mcd_account_would_like_to_connect (self))
+ {
+ DEBUG ("account %s would like to connect",
+ self->priv->unique_name);
+ _mcd_account_connect_with_auto_presence (self, FALSE);
+ }
+ }
+ else
+ {
+ if (_mcd_account_needs_dispatch (self))
+ {
+ /* special treatment for cellular accounts */
+ DEBUG ("account %s is always dispatched and does not need a "
+ "transport", self->priv->unique_name);
+ }
+ else
+ {
+ McdConnection *connection;
+
+ DEBUG ("account %s must disconnect", self->priv->unique_name);
+ connection = mcd_account_get_connection (self);
+ if (connection)
+ mcd_connection_close (connection);
+ }
+ }
+
if (!self->priv->waiting_for_connectivity)
return;
diff --git a/src/mcd-master.c b/src/mcd-master.c
index e673335..f1cbbf7 100644
--- a/src/mcd-master.c
+++ b/src/mcd-master.c
@@ -126,71 +126,6 @@ typedef struct {
#define POISONED_MASTER ((McdMaster *) 0xdeadbeef)
static McdMaster *default_master = NULL;
-
-static void
-mcd_master_transport_connected (McdMaster *master, McdTransportPlugin *plugin,
- McdTransport *transport)
-{
- McdMasterPrivate *priv = master->priv;
- GHashTable *accounts;
- GHashTableIter iter;
- gpointer v;
-
- DEBUG ("%s", mcd_transport_get_name (plugin, transport));
-
- accounts = _mcd_account_manager_get_accounts (priv->account_manager);
- g_hash_table_iter_init (&iter, accounts);
-
- while (g_hash_table_iter_next (&iter, NULL, &v))
- {
- McdAccount *account = MCD_ACCOUNT (v);
-
- if (!mcd_account_would_like_to_connect (account))
- continue;
-
- DEBUG ("account %s would like to connect",
- mcd_account_get_unique_name (account));
- _mcd_account_connect_with_auto_presence (account, FALSE);
- }
-}
-
-static void
-mcd_master_transport_disconnected (McdMaster *master, McdTransportPlugin *plugin,
- McdTransport *transport)
-{
- McdMasterPrivate *priv = master->priv;
- GHashTable *accounts;
- GHashTableIter iter;
- gpointer v;
-
- DEBUG ("%s", mcd_transport_get_name (plugin, transport));
-
- accounts = _mcd_account_manager_get_accounts (priv->account_manager);
- g_hash_table_iter_init (&iter, accounts);
-
- while (g_hash_table_iter_next (&iter, NULL, &v))
- {
- McdAccount *account = MCD_ACCOUNT (v);
-
- if (_mcd_account_needs_dispatch (account))
- {
- /* special treatment for cellular accounts */
- DEBUG ("account %s is always dispatched and does not need a "
- "transport", mcd_account_get_unique_name (account));
- }
- else
- {
- McdConnection *connection;
-
- DEBUG ("account %s must disconnect",
- mcd_account_get_unique_name (account));
- connection = mcd_account_get_connection (account);
- if (connection)
- mcd_connection_close (connection);
- }
- }
-}
-
static void
mcd_master_connect_automatic_accounts (McdMaster *master)
{
@@ -207,43 +142,6 @@ mcd_master_connect_automatic_accounts (McdMaster *master)
}
}
-static const gchar *
-mcd_transport_status_to_string (McdTransportStatus status)
-{
- switch (status)
- {
- case MCD_TRANSPORT_STATUS_CONNECTED:
- return "connected";
- case MCD_TRANSPORT_STATUS_CONNECTING:
- return "connecting";
- case MCD_TRANSPORT_STATUS_DISCONNECTED:
- return "disconnected";
- case MCD_TRANSPORT_STATUS_DISCONNECTING:
- return "disconnecting";
- }
-
- return "invalid";
-}
-
-static void
-on_transport_status_changed (McdTransportPlugin *plugin,
- McdTransport *transport,
- McdTransportStatus status, McdMaster *master)
-{
- DEBUG ("Transport %s changed status to %u (%s)",
- mcd_transport_get_name (plugin, transport), status,
- mcd_transport_status_to_string (status));
-
- if (status == MCD_TRANSPORT_STATUS_CONNECTED)
- mcd_master_transport_connected (master, plugin, transport);
- else if (status == MCD_TRANSPORT_STATUS_DISCONNECTING ||
- status == MCD_TRANSPORT_STATUS_DISCONNECTED)
- {
- /* disconnect all accounts that were using this transport */
- mcd_master_transport_disconnected (master, plugin, transport);
- }
-}
-
static void
_mcd_master_get_property (GObject * obj, guint prop_id,
GValue * val, GParamSpec * pspec)
@@ -308,9 +206,6 @@ _mcd_master_dispose (GObject * object)
{
McdTransportPlugin *plugin;
plugin = g_ptr_array_index (priv->transport_plugins, i);
- g_signal_handlers_disconnect_by_func (plugin,
- on_transport_status_changed,
- object);
g_object_unref (plugin);
}
g_ptr_array_unref (priv->transport_plugins);
@@ -507,9 +402,6 @@ mcd_master_register_transport (McdMaster *master,
McdTransportPlugin *transport_plugin)
{
DEBUG ("called");
- g_signal_connect (transport_plugin, "status-changed",
- G_CALLBACK (on_transport_status_changed),
- master);
g_ptr_array_add (master->priv->transport_plugins, transport_plugin);
}
More information about the telepathy-commits
mailing list