diff options
author | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2010-03-02 17:25:46 +0800 |
---|---|---|
committer | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2010-03-02 23:37:32 +0800 |
commit | b7329ee88d54447ed5b8a0de32a6b26a25ef5024 (patch) | |
tree | 253ba191b96681b0e6aeeb83883fbe3e44c92c54 /libempathy | |
parent | 2af6c1375e1465566d57170d8090e1b425de88fa (diff) | |
download | gsoc2013-empathy-b7329ee88d54447ed5b8a0de32a6b26a25ef5024.tar gsoc2013-empathy-b7329ee88d54447ed5b8a0de32a6b26a25ef5024.tar.gz gsoc2013-empathy-b7329ee88d54447ed5b8a0de32a6b26a25ef5024.tar.bz2 gsoc2013-empathy-b7329ee88d54447ed5b8a0de32a6b26a25ef5024.tar.lz gsoc2013-empathy-b7329ee88d54447ed5b8a0de32a6b26a25ef5024.tar.xz gsoc2013-empathy-b7329ee88d54447ed5b8a0de32a6b26a25ef5024.tar.zst gsoc2013-empathy-b7329ee88d54447ed5b8a0de32a6b26a25ef5024.zip |
factor out empathy_connect_new_account
Diffstat (limited to 'libempathy')
-rw-r--r-- | libempathy/empathy-utils.c | 37 | ||||
-rw-r--r-- | libempathy/empathy-utils.h | 4 |
2 files changed, 41 insertions, 0 deletions
diff --git a/libempathy/empathy-utils.c b/libempathy/empathy-utils.c index fedb14b98..7d169ff94 100644 --- a/libempathy/empathy-utils.c +++ b/libempathy/empathy-utils.c @@ -606,3 +606,40 @@ empathy_account_manager_get_accounts_connected (gboolean *connecting) return out_connected; } + +/* Change the RequestedPresence of a newly created account to ensure that it + * is actually connected. */ +void +empathy_connect_new_account (TpAccount *account, + TpAccountManager *account_manager) +{ + TpConnectionPresenceType presence; + gchar *status, *message; + + /* only force presence if presence was offline, unknown or unset */ + presence = tp_account_get_requested_presence (account, NULL, NULL); + switch (presence) + { + case TP_CONNECTION_PRESENCE_TYPE_OFFLINE: + case TP_CONNECTION_PRESENCE_TYPE_UNKNOWN: + case TP_CONNECTION_PRESENCE_TYPE_UNSET: + presence = tp_account_manager_get_most_available_presence ( + account_manager, &status, &message); + + if (presence == TP_CONNECTION_PRESENCE_TYPE_OFFLINE) + /* Global presence is offline; we force it so user doesn't have to + * manually change the presence to connect his new account. */ + presence = TP_CONNECTION_PRESENCE_TYPE_AVAILABLE; + + tp_account_request_presence_async (account, presence, + status, NULL, NULL, NULL); + + g_free (status); + g_free (message); + break; + + default: + /* do nothing if the presence is not offline */ + break; + } +} diff --git a/libempathy/empathy-utils.h b/libempathy/empathy-utils.h index 0fc6fc2a9..0ab905282 100644 --- a/libempathy/empathy-utils.h +++ b/libempathy/empathy-utils.h @@ -31,6 +31,7 @@ #include <libxml/parser.h> #include <libxml/tree.h> +#include <telepathy-glib/account-manager.h> #include "empathy-contact.h" @@ -90,6 +91,9 @@ TpAccount * empathy_get_account_for_connection (TpConnection *connection); gboolean empathy_account_manager_get_accounts_connected (gboolean *connecting); +void empathy_connect_new_account (TpAccount *account, + TpAccountManager *account_manager); + G_END_DECLS #endif /* __EMPATHY_UTILS_H__ */ |