diff options
author | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2010-06-07 19:37:39 +0100 |
---|---|---|
committer | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2010-06-16 11:58:03 +0100 |
commit | 549147aadbabcd86464e9cf924c95d8433f6ef34 (patch) | |
tree | cf090f986fa4f989807d724ba09eed32099e4c03 | |
parent | f00511ef405f7bccd18029576bf3f65e53504e70 (diff) | |
download | telepathy-mission-control-549147aadbabcd86464e9cf924c95d8433f6ef34.tar.gz |
fd.o #28118: clear the 'register' flag when an account goes to CONNECTED
-rw-r--r-- | src/mcd-account.c | 32 | ||||
-rw-r--r-- | test/twisted/account-manager/recover-from-disconnect.py | 8 |
2 files changed, 37 insertions, 3 deletions
diff --git a/src/mcd-account.c b/src/mcd-account.c index 2d2a5215..4e48b4fd 100644 --- a/src/mcd-account.c +++ b/src/mcd-account.c @@ -3649,6 +3649,36 @@ on_conn_status_changed (McdConnection *connection, _mcd_account_set_connection_status (account, status, reason); } +/* clear the "register" flag, if necessary */ +static void +clear_register_dup_params_cb (McdAccount *self, + GHashTable *params, + gpointer user_data) +{ + if (tp_asv_get_boolean (params, "register", NULL)) + { + GValue value = { 0 }; + + _mcd_account_set_parameter (self, "register", NULL, NULL, NULL); + + g_hash_table_remove (params, "register"); + + _mcd_account_set_parameter (self, "register", NULL, NULL, NULL); + + g_value_init (&value, TP_HASH_TYPE_STRING_VARIANT_MAP); + g_value_take_boxed (&value, params); + mcd_account_changed_property (self, "Parameters", &value); + g_value_unset (&value); + + mcd_account_manager_write_conf_async (self->priv->account_manager, + NULL, NULL); + } + else + { + g_hash_table_unref (params); + } +} + void _mcd_account_set_connection_status (McdAccount *account, TpConnectionStatus status, @@ -3660,6 +3690,8 @@ _mcd_account_set_connection_status (McdAccount *account, if (status == TP_CONNECTION_STATUS_CONNECTED) { _mcd_account_set_has_been_online (account); + _mcd_account_dup_parameters (account, clear_register_dup_params_cb, + NULL); } if (status != priv->conn_status) diff --git a/test/twisted/account-manager/recover-from-disconnect.py b/test/twisted/account-manager/recover-from-disconnect.py index 3b8cfdaa..f28411e3 100644 --- a/test/twisted/account-manager/recover-from-disconnect.py +++ b/test/twisted/account-manager/recover-from-disconnect.py @@ -32,7 +32,8 @@ def test(q, bus, mc): # Create an account params = dbus.Dictionary({"account": "someguy@example.com", - "password": "secrecy"}, signature='sv') + "password": "secrecy", + "register": True}, signature='sv') (cm_name_ref, account) = create_fakecm_account(q, bus, mc, params) account_iface = dbus.Interface(account, cs.ACCOUNT) @@ -89,8 +90,9 @@ def test(q, bus, mc): conn.StatusChanged(cs.CONN_STATUS_DISCONNECTED, cs.CONN_STATUS_REASON_NETWORK_ERROR) - # MC reconnects - + # MC reconnects. This time, we expect it to have deleted the 'register' + # parameter. + del params['register'] e = q.expect('dbus-method-call', method='RequestConnection', args=['fakeprotocol', params], destination=tp_name_prefix + '.ConnectionManager.fakecm', |