[Telepathy-commits] [telepathy-mission-control/master] Add mc_account_monitor_list_accounts()

mardy mardy at 64d1ce6a-1406-0410-9ac8-afed03b27183
Mon Nov 17 00:05:13 PST 2008


Add a function to list and filter accounts present in the McAccountManager
cache.

git-svn-id: https://projects.maemo.org/svn/chavo/trunk/framework/open/telepathy-mission-control@20540 64d1ce6a-1406-0410-9ac8-afed03b27183
---
 libmcclient/mc-account-manager.c |   48 ++++++++++++++++++++++++++++++++++++++
 libmcclient/mc-account-manager.h |    5 ++++
 2 files changed, 53 insertions(+), 0 deletions(-)

diff --git a/libmcclient/mc-account-manager.c b/libmcclient/mc-account-manager.c
index d6822ca..5ed67f4 100644
--- a/libmcclient/mc-account-manager.c
+++ b/libmcclient/mc-account-manager.c
@@ -839,3 +839,51 @@ mc_account_manager_get_account (McAccountManager *manager,
     return account;
 }
 
+/**
+ * McAccountFilterFunc:
+ * @account: a #McAccount.
+ * @user_data: the user data that was passed to
+ * mc_account_manager_list_accounts().
+ *
+ * Returns: %TRUE if @account must be listed, %FALSE otherwise.
+ */
+
+/**
+ * mc_account_manager_list_accounts:
+ * @manager: the #McAccountManager.
+ * @filter: a function for filtering accounts, or %NULL.
+ * @user_data: user data to be supplied to the filtering callback.
+ *
+ * List all accounts known by the @manager. For this function to be really
+ * useful, you first need to have waited for
+ * mc_account_manager_call_when_ready_with_accounts(), or it will only return
+ * those accounts for which mc_account_manager_get_account() has been called.
+ *
+ * Returns: a #GList of #McAccount objects; to be free'd with g_list_free().
+ */
+GList *
+mc_account_manager_list_accounts (McAccountManager *manager,
+				  McAccountFilterFunc filter,
+				  gpointer user_data)
+{
+    GHashTable *accounts_ht;
+    GHashTableIter iter;
+    McAccount *account;
+    GList *list = NULL;
+
+    g_return_val_if_fail (MC_IS_ACCOUNT_MANAGER (manager), NULL);
+    accounts_ht = manager->priv->accounts;
+    if (G_UNLIKELY (accounts_ht == NULL)) return NULL;
+
+    g_hash_table_iter_init (&iter, accounts_ht);
+    while (g_hash_table_iter_next (&iter, NULL, (gpointer)&account))
+    {
+	if (filter && !filter (account, user_data))
+	    continue;
+
+	list = g_list_prepend (list, account);
+    }
+
+    return g_list_reverse (list);
+}
+
diff --git a/libmcclient/mc-account-manager.h b/libmcclient/mc-account-manager.h
index 1b02316..de0eb5c 100644
--- a/libmcclient/mc-account-manager.h
+++ b/libmcclient/mc-account-manager.h
@@ -87,6 +87,11 @@ void mc_account_manager_call_when_ready_with_accounts (
 McAccount *mc_account_manager_get_account (McAccountManager *manager,
 					   const gchar *account_name);
 
+typedef gboolean (*McAccountFilterFunc) (McAccount *account,
+					 gpointer user_data);
+GList *mc_account_manager_list_accounts (McAccountManager *manager,
+					 McAccountFilterFunc filter,
+					 gpointer user_data);
 G_END_DECLS
 
 /* auto-generated stubs */
-- 
1.5.6.5




More information about the Telepathy-commits mailing list