[telepathy-mission-control/master] McdMaster: do auto-away by prodding each Account individually
Simon McVittie
simon.mcvittie at collabora.co.uk
Wed Apr 8 10:53:58 PDT 2009
This avoids using the presence frame and its suspicious
synchronized-presence model.
---
src/mcd-master.c | 64 ++++++++++++++++++++++++++++++++++++-----------------
1 files changed, 43 insertions(+), 21 deletions(-)
diff --git a/src/mcd-master.c b/src/mcd-master.c
index 09c2d23..95af12a 100644
--- a/src/mcd-master.c
+++ b/src/mcd-master.c
@@ -431,27 +431,49 @@ _mcd_master_set_flags (McdMission * mission, McdSystemFlags flags)
if (idle_flag_old != idle_flag_new)
{
- if (idle_flag_new)
- {
- /* Save the current presence first */
- priv->awake_presence =
- mcd_presence_frame_get_actual_presence (priv->presence_frame);
- if (priv->awake_presence != TP_CONNECTION_PRESENCE_TYPE_AVAILABLE)
- return;
- g_free (priv->awake_presence_message);
- priv->awake_presence_message = g_strdup
- (mcd_presence_frame_get_actual_presence_message
- (priv->presence_frame));
-
- mcd_presence_frame_request_presence (priv->presence_frame,
- TP_CONNECTION_PRESENCE_TYPE_AWAY, NULL);
- }
- else
- {
- mcd_presence_frame_request_presence (priv->presence_frame,
- priv->awake_presence,
- priv->awake_presence_message);
- }
+ GHashTableIter iter;
+ gpointer v;
+
+ g_hash_table_iter_init (&iter,
+ mcd_account_manager_get_accounts (priv->account_manager));
+
+ while (g_hash_table_iter_next (&iter, NULL, &v))
+ {
+ McdAccount *account = MCD_ACCOUNT (v);
+
+ if (idle_flag_new)
+ {
+ TpConnectionPresenceType presence;
+
+ /* If the current presence is not Available then we don't go
+ * auto-away - this avoids (a) manipulating offline accounts
+ * and (b) messing up people's busy or invisible status */
+ mcd_account_get_current_presence (account, &presence, NULL,
+ NULL);
+
+ if (presence != TP_CONNECTION_PRESENCE_TYPE_AVAILABLE)
+ {
+ continue;
+ }
+
+ /* Set the Connection to be "away" if the CM supports it
+ * (if not, it'll just fail - no harm done) */
+ _mcd_account_request_temporary_presence (account,
+ TP_CONNECTION_PRESENCE_TYPE_AWAY, "away");
+ }
+ else
+ {
+ TpConnectionPresenceType presence;
+ const gchar *status;
+ const gchar *message;
+
+ /* Go back to the requested presence */
+ mcd_account_get_requested_presence (account, &presence,
+ &status, &message);
+ mcd_account_request_presence (account, presence, status,
+ message);
+ }
+ }
}
MCD_MISSION_CLASS (mcd_master_parent_class)->set_flags (mission, flags);
}
--
1.5.6.5
More information about the telepathy-commits
mailing list