[Telepathy-commits] [telepathy-mission-control/master] Accounts with no conditions can go online
Alberto Mardegan
alberto.mardegan at nokia.com
Tue Nov 4 23:11:50 PST 2008
Rewrite the check for accounts that can connect when MC is started: make it so
that if an account doesn't have any conditions, it can go online even if no
transport is active.
---
src/mcd-master.c | 82 ++++++++++++++++++++++++++++++++++++++++++++----------
1 files changed, 67 insertions(+), 15 deletions(-)
diff --git a/src/mcd-master.c b/src/mcd-master.c
index faeea0e..7371b7c 100644
--- a/src/mcd-master.c
+++ b/src/mcd-master.c
@@ -227,27 +227,79 @@ mcd_master_transport_disconnected (McdMaster *master, McdTransportPlugin *plugin
g_hash_table_foreach (valid_accounts, disconnect_account_transport, &td);
}
+static gboolean
+account_conditions_satisfied (McdMasterPrivate *priv, McdAccount *account)
+{
+ GHashTable *conditions;
+ gboolean ret = FALSE;
+
+ conditions = mcd_account_get_conditions (account);
+ if (g_hash_table_size (conditions) == 0)
+ ret = TRUE;
+ else
+ {
+ guint i;
+ for (i = 0; i < priv->transport_plugins->len; i++)
+ {
+ McdTransportPlugin *plugin;
+ const GList *transports;
+
+ plugin = g_ptr_array_index (priv->transport_plugins, i);
+ transports = mcd_transport_plugin_get_transports (plugin);
+ while (transports)
+ {
+ McdTransport *transport = transports->data;
+ if (mcd_transport_get_status (plugin, transport) ==
+ MCD_TRANSPORT_STATUS_CONNECTED &&
+ mcd_transport_plugin_check_conditions (plugin, transport,
+ conditions))
+ {
+ set_account_transport (account, transport);
+ ret = TRUE;
+ goto finish;
+ }
+ transports = transports->next;
+ }
+ }
+ }
+finish:
+ g_hash_table_unref (conditions);
+ return ret;
+}
+
static void
mcd_master_connect_automatic_accounts (McdMaster *master)
{
McdMasterPrivate *priv = MCD_MASTER_PRIV (master);
- guint i;
+ GHashTable *valid_accounts;
+ GHashTableIter iter;
+ gpointer ht_key, ht_value;
- for (i = 0; i < priv->transport_plugins->len; i++)
+ valid_accounts =
+ mcd_account_manager_get_valid_accounts (priv->account_manager);
+ g_hash_table_iter_init (&iter, valid_accounts);
+ while (g_hash_table_iter_next (&iter, &ht_key, &ht_value))
{
- McdTransportPlugin *plugin;
- const GList *transports;
-
- plugin = g_ptr_array_index (priv->transport_plugins, i);
- transports = mcd_transport_plugin_get_transports (plugin);
- while (transports)
- {
- if (mcd_transport_get_status (plugin, transports->data) !=
- MCD_TRANSPORT_STATUS_CONNECTED)
- continue;
- mcd_master_transport_connected (master, plugin, transports->data);
- transports = transports->next;
- }
+ McdAccount *account = MCD_ACCOUNT (ht_value);
+
+ if (mcd_account_is_enabled (account) &&
+ mcd_account_get_connect_automatically (account) &&
+ mcd_account_get_connection_status (account) ==
+ TP_CONNECTION_STATUS_DISCONNECTED)
+ {
+ /* if the account conditions are satisfied, connect */
+ if (account_conditions_satisfied (priv, account))
+ {
+ TpConnectionPresenceType presence;
+ const gchar *status, *message;
+
+ g_debug ("conditions matched");
+ mcd_account_get_automatic_presence (account, &presence,
+ &status, &message);
+ mcd_account_request_presence (account, presence, status,
+ message);
+ }
+ }
}
}
--
1.5.6.5
More information about the Telepathy-commits
mailing list