aboutsummaryrefslogtreecommitdiffstats
path: root/libempathy
diff options
context:
space:
mode:
authorGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>2010-03-02 17:25:46 +0800
committerGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>2010-03-02 23:37:32 +0800
commitb7329ee88d54447ed5b8a0de32a6b26a25ef5024 (patch)
tree253ba191b96681b0e6aeeb83883fbe3e44c92c54 /libempathy
parent2af6c1375e1465566d57170d8090e1b425de88fa (diff)
downloadgsoc2013-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.c37
-rw-r--r--libempathy/empathy-utils.h4
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__ */