[telepathy-salut/master] presence-cache: factor out create_per_channel_manager_caps

Guillaume Desmottes guillaume.desmottes at collabora.co.uk
Wed Apr 1 04:10:39 PDT 2009


---
 src/salut-presence-cache.c |   53 +++++++++++++++++++++++++++----------------
 1 files changed, 33 insertions(+), 20 deletions(-)

diff --git a/src/salut-presence-cache.c b/src/salut-presence-cache.c
index f55b0a1..b341312 100644
--- a/src/salut-presence-cache.c
+++ b/src/salut-presence-cache.c
@@ -343,6 +343,37 @@ salut_presence_cache_set_property (GObject     *object,
     }
 }
 
+static GHashTable *
+create_per_channel_manager_caps (SalutPresenceCache *self,
+                                 GibberXmppNode *query_result)
+{
+  SalutPresenceCachePrivate *priv = SALUT_PRESENCE_CACHE_PRIV (self);
+  TpBaseConnection *base_conn = TP_BASE_CONNECTION (priv->conn);
+  GHashTable *per_channel_manager_caps;
+  TpChannelManagerIter iter;
+  TpChannelManager *manager;
+
+  per_channel_manager_caps = g_hash_table_new (NULL, NULL);
+
+  /* parsing for Connection.Interface.ContactCapabilities.DRAFT */
+  tp_base_connection_channel_manager_iter_init (&iter, base_conn);
+  while (tp_base_connection_channel_manager_iter_next (&iter, &manager))
+    {
+      gpointer *factory_caps;
+
+      /* all channel managers must implement the capability interface */
+      g_assert (SALUT_IS_CAPS_CHANNEL_MANAGER (manager));
+
+      factory_caps = salut_caps_channel_manager_parse_capabilities
+          (SALUT_CAPS_CHANNEL_MANAGER (manager), query_result);
+      if (factory_caps != NULL)
+        g_hash_table_insert (per_channel_manager_caps,
+            SALUT_CAPS_CHANNEL_MANAGER (manager), factory_caps);
+    }
+
+  return per_channel_manager_caps;
+}
+
 static void
 _caps_disco_cb (SalutDisco *disco,
                 SalutDiscoRequest *request,
@@ -360,8 +391,6 @@ _caps_disco_cb (SalutDisco *disco,
   GHashTable *per_channel_manager_caps;
   gboolean bad_hash = FALSE;
   TpBaseConnection *base_conn;
-  TpChannelManagerIter iter;
-  TpChannelManager *manager;
 
   cache = SALUT_PRESENCE_CACHE (user_data);
   priv = SALUT_PRESENCE_CACHE_PRIV (cache);
@@ -415,24 +444,8 @@ _caps_disco_cb (SalutDisco *disco,
       return;
     }
 
-  per_channel_manager_caps = g_hash_table_new (NULL, NULL);
-
-  /* parsing for Connection.Interface.ContactCapabilities.DRAFT */
-  tp_base_connection_channel_manager_iter_init (&iter, base_conn);
-  while (tp_base_connection_channel_manager_iter_next (&iter, &manager))
-    {
-      gpointer *factory_caps;
-
-      /* all channel managers must implement the capability interface */
-      g_assert (SALUT_IS_CAPS_CHANNEL_MANAGER (manager));
-
-      factory_caps = salut_caps_channel_manager_parse_capabilities
-          (SALUT_CAPS_CHANNEL_MANAGER (manager), query_result);
-      if (factory_caps != NULL)
-        g_hash_table_insert (per_channel_manager_caps,
-            SALUT_CAPS_CHANNEL_MANAGER (manager), factory_caps);
-    }
-
+  per_channel_manager_caps = create_per_channel_manager_caps (cache,
+      query_result);
 
   waiter_self = NULL;
   for (i = waiters; NULL != i;  i = i->next)
-- 
1.5.6.5




More information about the telepathy-commits mailing list