aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXavier Claessens <xclaesse@src.gnome.org>2009-01-07 00:46:53 +0800
committerXavier Claessens <xclaesse@src.gnome.org>2009-01-07 00:46:53 +0800
commit4a80cadbc7e0a02f0a1122a62733d52e3334f634 (patch)
tree4dde9a052e13ded45034af81ec8b94cd6885a2e7
parent90be87aae20ca84d5cb58367e640bfe0d7b036e5 (diff)
downloadgsoc2013-empathy-4a80cadbc7e0a02f0a1122a62733d52e3334f634.tar
gsoc2013-empathy-4a80cadbc7e0a02f0a1122a62733d52e3334f634.tar.gz
gsoc2013-empathy-4a80cadbc7e0a02f0a1122a62733d52e3334f634.tar.bz2
gsoc2013-empathy-4a80cadbc7e0a02f0a1122a62733d52e3334f634.tar.lz
gsoc2013-empathy-4a80cadbc7e0a02f0a1122a62733d52e3334f634.tar.xz
gsoc2013-empathy-4a80cadbc7e0a02f0a1122a62733d52e3334f634.tar.zst
gsoc2013-empathy-4a80cadbc7e0a02f0a1122a62733d52e3334f634.zip
Add new API in EmpathyAccountManager to cache the number of connecting
and connected accounts. svn path=/trunk/; revision=2042
-rw-r--r--libempathy/empathy-account-manager.c71
-rw-r--r--libempathy/empathy-account-manager.h11
2 files changed, 76 insertions, 6 deletions
diff --git a/libempathy/empathy-account-manager.c b/libempathy/empathy-account-manager.c
index 021e20164..e3b628146 100644
--- a/libempathy/empathy-account-manager.c
+++ b/libempathy/empathy-account-manager.c
@@ -31,9 +31,11 @@
typedef struct {
McAccountMonitor *monitor;
- MissionControl *mc;
+ MissionControl *mc;
- GHashTable *accounts;
+ GHashTable *accounts;
+ int connected;
+ int connecting;
} EmpathyAccountManagerPriv;
typedef struct {
@@ -89,7 +91,7 @@ account_data_new_default (MissionControl *mc,
actual_c = mission_control_get_connection_status (mc,
account, &err);
if (err) {
- actual_c = -1;
+ actual_c = TP_CONNECTION_STATUS_DISCONNECTED;
}
return account_data_new (actual_p, actual_c, mc_account_is_enabled (account));
@@ -197,6 +199,37 @@ account_enabled_cb (McAccountMonitor *mon,
}
static void
+update_connection_numbers (EmpathyAccountManager *manager,
+ TpConnectionStatus conn,
+ TpConnectionStatus old_c)
+{
+ EmpathyAccountManagerPriv *priv = GET_PRIV (manager);
+
+ if (conn == TP_CONNECTION_STATUS_CONNECTED) {
+ priv->connected++;
+ if (old_c == TP_CONNECTION_STATUS_CONNECTING) {
+ priv->connecting--;
+ }
+ }
+
+ if (conn == TP_CONNECTION_STATUS_CONNECTING) {
+ priv->connecting++;
+ if (old_c == TP_CONNECTION_STATUS_CONNECTED) {
+ priv->connected--;
+ }
+ }
+
+ if (conn == TP_CONNECTION_STATUS_DISCONNECTED) {
+ if (old_c == TP_CONNECTION_STATUS_CONNECTED) {
+ priv->connected--;
+ }
+ if (old_c == TP_CONNECTION_STATUS_CONNECTING) {
+ priv->connecting--;
+ }
+ }
+}
+
+static void
account_status_changed_cb (MissionControl *mc,
TpConnectionStatus connection,
McPresence presence,
@@ -227,6 +260,8 @@ account_status_changed_cb (MissionControl *mc,
if (old_c != connection) {
data->connection = connection;
+ update_connection_numbers (manager, connection, old_c);
+
g_signal_emit (manager, signals[ACCOUNT_CONNECTION_CHANGED], 0,
account, reason, connection, old_c);
}
@@ -247,6 +282,7 @@ empathy_account_manager_init (EmpathyAccountManager *manager)
manager->priv = priv;
priv->monitor = mc_account_monitor_new ();
priv->mc = empathy_mission_control_new ();
+ priv->connected = priv->connecting = 0;
priv->accounts = g_hash_table_new_full (empathy_account_hash,
empathy_account_equal,
@@ -383,6 +419,8 @@ empathy_account_manager_class_init (EmpathyAccountManagerClass *klass)
g_type_class_add_private (oclass, sizeof (EmpathyAccountManagerPriv));
}
+/* public methods */
+
EmpathyAccountManager *
empathy_account_manager_new (void)
{
@@ -394,4 +432,29 @@ empathy_account_manager_new (void)
}
return manager;
-} \ No newline at end of file
+}
+
+int
+empathy_account_manager_get_connected_accounts (EmpathyAccountManager *manager)
+{
+ EmpathyAccountManagerPriv *priv;
+
+ g_assert (EMPATHY_IS_ACCOUNT_MANAGER (manager));
+
+ priv = GET_PRIV (manager);
+
+ return priv->connected;
+}
+
+int
+empathy_account_manager_get_connecting_accounts (EmpathyAccountManager *manager)
+{
+ EmpathyAccountManagerPriv *priv;
+
+ g_assert (EMPATHY_IS_ACCOUNT_MANAGER (manager));
+
+ priv = GET_PRIV (manager);
+
+ return priv->connecting;
+}
+
diff --git a/libempathy/empathy-account-manager.h b/libempathy/empathy-account-manager.h
index 36b77c7e5..1687c0032 100644
--- a/libempathy/empathy-account-manager.h
+++ b/libempathy/empathy-account-manager.h
@@ -46,8 +46,15 @@ struct _EmpathyAccountManagerClass {
};
GType empathy_account_manager_get_type (void);
-EmpathyAccountManager * empathy_account_manager_new (void);
+/* public methods */
+
+EmpathyAccountManager * empathy_account_manager_new (void);
+int empathy_account_manager_get_connected_accounts
+ (EmpathyAccountManager *manager);
+int empathy_account_manager_get_connecting_accounts
+ (EmpathyAccountManager *manager);
G_END_DECLS
-#endif /* __EMPATHY_ACCOUNT_MANAGER_H__ */ \ No newline at end of file
+#endif /* __EMPATHY_ACCOUNT_MANAGER_H__ */
+