summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWill Thompson <will.thompson@collabora.co.uk>2011-11-03 11:53:28 +0000
committerWill Thompson <will.thompson@collabora.co.uk>2011-11-03 11:59:07 +0000
commitbe2e5c2d899d9542b567983e809caf371ba9be6c (patch)
tree1538bfb4746b839127819adf89ac7a49a5d336b6
parentcc746edd95fdc1802cd656eca664a7089de61745 (diff)
parent82f1d4b02a32131b48ea9e461865415070ab7b72 (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.c15
-rwxr-xr-xtests/twisted/account-manager/presence.py44
-rw-r--r--util/mc-tool.c5
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);