[Telepathy-commits] [telepathy-mission-control/master] Add account-ready signal to McAccountManager
mardy
mardy at 64d1ce6a-1406-0410-9ac8-afed03b27183
Mon Nov 17 00:05:15 PST 2008
When a new account appears, request the desired interfaces and once they are
ready emit the "account-ready" signal.
git-svn-id: https://projects.maemo.org/svn/chavo/trunk/framework/open/telepathy-mission-control@20538 64d1ce6a-1406-0410-9ac8-afed03b27183
---
libmcclient/mc-account-manager.c | 66 +++++++++++++++++++++++++++++++++++++-
1 files changed, 65 insertions(+), 1 deletions(-)
diff --git a/libmcclient/mc-account-manager.c b/libmcclient/mc-account-manager.c
index ff5726a..598c1f4 100644
--- a/libmcclient/mc-account-manager.c
+++ b/libmcclient/mc-account-manager.c
@@ -89,6 +89,7 @@ typedef struct {
enum
{
ACCOUNT_CREATED,
+ ACCOUNT_READY,
LAST_SIGNAL
};
@@ -308,6 +309,32 @@ mc_account_manager_class_init (McAccountManagerClass *klass)
G_TYPE_NONE,
2, G_TYPE_STRING, G_TYPE_BOOLEAN);
+ /**
+ * McAccountManager::account-ready:
+ * @account_manager: the #McAccountManager.
+ * @account: the #McAccount that became ready.
+ *
+ * Emitted when a new account has appeared on the D-Bus and all the
+ * requested interfaces (see
+ * mc_account_manager_call_when_ready_with_accounts()) have become ready.
+ *
+ * Clients should connect to this signal only after
+ * mc_account_manager_call_when_ready_with_accounts() has called the
+ * callback function.
+ *
+ * In the unlikely case that this signal is emitted several times for the
+ * same account, clients should ignore all but the first emission.
+ */
+ _mc_account_manager_signals[ACCOUNT_READY] =
+ g_signal_new ("account-ready",
+ G_OBJECT_CLASS_TYPE (klass),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL,
+ g_cclosure_marshal_VOID__OBJECT,
+ G_TYPE_NONE,
+ 1, MC_TYPE_ACCOUNT);
+
_mc_iface_add (MC_TYPE_ACCOUNT_MANAGER, MC_IFACE_QUARK_ACCOUNT_MANAGER,
&iface_description);
}
@@ -426,12 +453,32 @@ account_add (const gchar *account_path, gchar ***dst)
}
static void
+new_account_ready_cb (TpProxy *proxy, const GError *error,
+ gpointer user_data, GObject *weak_object)
+{
+ McAccountManager *manager = MC_ACCOUNT_MANAGER (weak_object);
+ McAccount *account = MC_ACCOUNT (proxy);
+
+ if (error)
+ {
+ g_warning ("Error retrieving properties for %s: %s",
+ account->name, error->message);
+ return;
+ }
+
+ g_signal_emit (manager,
+ _mc_account_manager_signals[ACCOUNT_READY], 0,
+ account);
+}
+
+static void
on_account_validity_changed (TpProxy *proxy, const gchar *account_path,
gboolean valid, gpointer user_data,
GObject *weak_object)
{
McAccountManager *manager = MC_ACCOUNT_MANAGER (proxy);
- McAccountManagerProps *props = manager->priv->props;
+ McAccountManagerPrivate *priv = manager->priv;
+ McAccountManagerProps *props = priv->props;
gboolean existed;
if (G_UNLIKELY (!props)) return;
@@ -448,9 +495,26 @@ on_account_validity_changed (TpProxy *proxy, const gchar *account_path,
}
if (!existed)
+ {
g_signal_emit (manager,
_mc_account_manager_signals[ACCOUNT_CREATED], 0,
account_path, valid);
+ if (priv->account_ifaces)
+ {
+ McAccount *account;
+ GQuark *ifaces;
+ guint n_ifaces;
+
+ ifaces = (GQuark *)priv->account_ifaces->pdata;
+ n_ifaces = priv->account_ifaces->len;
+
+ account = mc_account_manager_get_account (manager, account_path);
+ _mc_iface_call_when_all_readyv (TP_PROXY (account), MC_TYPE_ACCOUNT,
+ new_account_ready_cb, NULL, NULL,
+ (GObject *)manager,
+ n_ifaces, ifaces);
+ }
+ }
}
static void
--
1.5.6.5
More information about the Telepathy-commits
mailing list