diff options
author | Will Thompson <will.thompson@collabora.co.uk> | 2011-11-03 11:53:28 +0000 |
---|---|---|
committer | Will Thompson <will.thompson@collabora.co.uk> | 2011-11-03 11:59:07 +0000 |
commit | be2e5c2d899d9542b567983e809caf371ba9be6c (patch) | |
tree | 1538bfb4746b839127819adf89ac7a49a5d336b6 | |
parent | cc746edd95fdc1802cd656eca664a7089de61745 (diff) | |
parent | 82f1d4b02a32131b48ea9e461865415070ab7b72 (diff) |
Merge branch 'ChangingPresence'
Reviewed-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
Fixes: <https://bugs.freedesktop.org/show_bug.cgi?id=42548>
-rw-r--r-- | src/mcd-account.c | 15 | ||||
-rwxr-xr-x | tests/twisted/account-manager/presence.py | 44 | ||||
-rw-r--r-- | util/mc-tool.c | 5 |
3 files changed, 53 insertions, 11 deletions
diff --git a/src/mcd-account.c b/src/mcd-account.c index d43a69a3..a0ddf898 100644 --- a/src/mcd-account.c +++ b/src/mcd-account.c @@ -884,20 +884,25 @@ mcd_account_request_presence_int (McdAccount *account, } } - if (changed) - { - _mcd_account_set_changing_presence (account, TRUE); - } - if (priv->connection == NULL) { if (type >= TP_CONNECTION_PRESENCE_TYPE_AVAILABLE) { + if (changed) + { + _mcd_account_set_changing_presence (account, TRUE); + } + _mcd_account_connection_begin (account, user_initiated); } } else { + if (changed) + { + _mcd_account_set_changing_presence (account, TRUE); + } + _mcd_connection_request_presence (priv->connection, priv->req_presence_type, priv->req_presence_status, diff --git a/tests/twisted/account-manager/presence.py b/tests/twisted/account-manager/presence.py index abef3b00..5577f5a6 100755 --- a/tests/twisted/account-manager/presence.py +++ b/tests/twisted/account-manager/presence.py @@ -30,13 +30,45 @@ def test(q, bus, mc): "password": "ionstorm"}, signature='sv') (cm_name_ref, account) = create_fakecm_account(q, bus, mc, params) - account_iface = dbus.Interface(account, cs.ACCOUNT) - account_props = dbus.Interface(account, cs.PROPERTIES_IFACE) - - # Go online with a particular presence presence = dbus.Struct((dbus.UInt32(cs.PRESENCE_TYPE_BUSY), 'busy', 'Fighting conspiracies'), signature='uss') + def mk_offline(message=''): + return dbus.Struct((dbus.UInt32(cs.PRESENCE_TYPE_OFFLINE), 'offline', + message), signature='uss') + + offline = mk_offline() + + # While the account is disabled, pushing stuff into RequestedPresence + # should not make ChangingPresence become True. + assert not account.Properties.Get(cs.ACCOUNT, 'Enabled') + assert not account.Properties.Get(cs.ACCOUNT, 'ChangingPresence') + events = [ + EventPattern('dbus-signal', signal='AccountPropertyChanged', + predicate=lambda e: 'ChangingPresence' in e.args[0]), + EventPattern('dbus-method-call', method='RequestConnection'), + ] + q.forbid_events(events) + account.Properties.Set(cs.ACCOUNT, 'RequestedPresence', presence) + account.Properties.Set(cs.ACCOUNT, 'RequestedPresence', offline) + account.Properties.Set(cs.ACCOUNT, 'RequestedPresence', presence) + account.Properties.Set(cs.ACCOUNT, 'RequestedPresence', offline) + + # Check that changing the message associated with our requested offline + # presence doesn't make anything happen either. + account.Properties.Set(cs.ACCOUNT, 'RequestedPresence', + mk_offline('byeeee')) + + # Enable the account; RequestedPresence is still offline, so this should + # have no effect on ChangingPresence. + account.Properties.Set(cs.ACCOUNT, 'Enabled', True) + account.Properties.Set(cs.ACCOUNT, 'Enabled', False) + + sync_dbus(bus, q, account) + assert not account.Properties.Get(cs.ACCOUNT, 'ChangingPresence') + q.unforbid_events(events) + + # Go online with a particular presence log = [] # FIXME: using predicate for its side-effects here is weird @@ -92,7 +124,7 @@ def test(q, bus, mc): # Change requested presence after going online presence = dbus.Struct((dbus.UInt32(cs.PRESENCE_TYPE_AWAY), 'away', 'In Hong Kong'), signature='uss') - call_async(q, account_props, 'Set', cs.ACCOUNT, 'RequestedPresence', + call_async(q, account.Properties, 'Set', cs.ACCOUNT, 'RequestedPresence', presence) e, _, _ = q.expect_many( @@ -121,7 +153,7 @@ def test(q, bus, mc): presence = dbus.Struct((dbus.UInt32(cs.PRESENCE_TYPE_AWAY), 'away', 'In Hong Kong'), signature='uss') - call_async(q, account_props, 'Set', cs.ACCOUNT, 'RequestedPresence', + call_async(q, account.Properties, 'Set', cs.ACCOUNT, 'RequestedPresence', presence) e = q.expect('dbus-method-call', diff --git a/util/mc-tool.c b/util/mc-tool.c index 86635d1d..f55d4bb9 100644 --- a/util/mc-tool.c +++ b/util/mc-tool.c @@ -640,6 +640,8 @@ command_show (TpAccount *account) show ("Nickname", tp_account_get_nickname (account)); show ("Service", tp_account_get_service (account)); + puts (""); + puts ("Presences:"); automatic.type = tp_account_get_automatic_presence (account, &automatic.status, &automatic.message); @@ -658,6 +660,9 @@ command_show (TpAccount *account) show_presence ("Requested", &requested); free_presence (&requested); + show ("Changing", + tp_account_get_changing_presence (account) ? "yes" : "no"); + puts (""); parameters = tp_account_get_parameters (account); |