int connected;
int connecting;
gboolean dispose_run;
+ gboolean ready;
TpProxySignalConnection *proxy_signal;
TpAccountManager *tp_manager;
TpDBusDaemon *dbus;
LAST_SIGNAL
};
+enum {
+ PROP_READY = 1,
+};
+
static guint signals[LAST_SIGNAL];
static EmpathyAccountManager *manager_singleton = NULL;
priv->global_presence, priv->global_status, priv->global_status_message);
}
+static void
+empathy_account_manager_check_ready (EmpathyAccountManager *manager)
+{
+ EmpathyAccountManagerPriv *priv = GET_PRIV (manager);
+ GHashTableIter iter;
+ gpointer value;
+
+ if (priv->ready)
+ return;
+
+ g_hash_table_iter_init (&iter, priv->accounts);
+ while (g_hash_table_iter_next (&iter, NULL, &value))
+ {
+ EmpathyAccount *account = EMPATHY_ACCOUNT (value);
+ gboolean ready;
+
+ g_object_get (account, "ready", &ready, NULL);
+
+ if (!ready)
+ return;
+ }
+
+ priv->ready = TRUE;
+ g_object_notify (G_OBJECT (manager), "ready");
+}
+
static void
emp_account_ready_cb (GObject *obj, GParamSpec *spec, gpointer user_data)
{
g_signal_connect (account, "presence-changed",
G_CALLBACK (emp_account_presence_changed_cb), manager);
+
+ empathy_account_manager_check_ready (manager);
}
static void
accounts = tp_asv_get_boxed (properties, "ValidAccounts",
EMPATHY_ARRAY_TYPE_OBJECT);
-
for (i = 0; i < accounts->len; i++)
{
EmpathyAccount *account;
g_signal_connect (account, "notify::ready",
G_CALLBACK (emp_account_ready_cb), manager);
}
+
+ empathy_account_manager_check_ready (manager);
}
static void
return retval;
}
+static void
+do_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EmpathyAccountManager *manager = EMPATHY_ACCOUNT_MANAGER (object);
+ EmpathyAccountManagerPriv *priv = GET_PRIV (manager);
+
+ switch (prop_id)
+ {
+ case PROP_READY:
+ g_value_set_boolean (value, priv->ready);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
static void
empathy_account_manager_class_init (EmpathyAccountManagerClass *klass)
{
oclass->finalize = do_finalize;
oclass->dispose = do_dispose;
oclass->constructor = do_constructor;
+ oclass->get_property = do_get_property;
+
+ g_object_class_install_property (oclass, PROP_READY,
+ g_param_spec_boolean ("ready",
+ "Ready",
+ "Whether the initial state dump from the account manager is finished",
+ FALSE,
+ G_PARAM_STATIC_STRINGS | G_PARAM_READABLE));
signals[ACCOUNT_CREATED] =
g_signal_new ("account-created",
return NULL;
}
+
+gboolean
+empathy_account_manager_is_ready (EmpathyAccountManager *manager)
+{
+ EmpathyAccountManagerPriv *priv = GET_PRIV (manager);
+
+ return priv->ready;
+}
+
int
empathy_account_manager_get_connected_accounts (EmpathyAccountManager *manager)
{
return priv->global_presence;
}
-