[telepathy-gabble/master] Extract satisfying a waiter to a function

Will Thompson will.thompson at collabora.co.uk
Tue May 12 02:04:49 PDT 2009


---
 src/presence-cache.c |   66 +++++++++++++++++++++++++++++++-------------------
 1 files changed, 41 insertions(+), 25 deletions(-)

diff --git a/src/presence-cache.c b/src/presence-cache.c
index 8b9ad3a..4e54d33 100644
--- a/src/presence-cache.c
+++ b/src/presence-cache.c
@@ -933,6 +933,45 @@ parse_contact_caps (TpBaseConnection *base_conn,
   return per_channel_manager_caps;
 }
 
+/**
+ * set_caps_for:
+ *
+ * Sets caps for @waiter to (@caps, @per_channel_manager_caps), having received
+ * a trusted reply from @responder_{handle,jid}.
+ */
+static void
+set_caps_for (DiscoWaiter *waiter,
+    GabblePresenceCache *cache,
+    GabblePresenceCapabilities caps,
+    GHashTable *per_channel_manager_caps,
+    TpHandle responder_handle,
+    const gchar *responder_jid)
+{
+  GabblePresence *presence = gabble_presence_cache_get (cache, waiter->handle);
+
+  if (presence != NULL)
+    {
+      GabblePresenceCapabilities save_caps = presence->caps;
+      GHashTable *save_enhanced_caps;
+
+      gabble_presence_cache_copy_cache_entry (&save_enhanced_caps,
+          presence->per_channel_manager_caps);
+
+      DEBUG ("setting caps for %d (thanks to %d %s) to %d (save_caps %d)",
+          waiter->handle, responder_handle, responder_jid, caps, save_caps);
+
+      gabble_presence_set_capabilities (presence, waiter->resource,
+          caps, per_channel_manager_caps, waiter->serial);
+
+      DEBUG ("caps for %d now %d", waiter->handle, presence->caps);
+
+      g_signal_emit (cache, signals[CAPABILITIES_UPDATE], 0,
+        waiter->handle, save_caps, presence->caps,
+        save_enhanced_caps, presence->per_channel_manager_caps);
+      gabble_presence_cache_free_cache_entry (save_enhanced_caps);
+    }
+}
+
 static void
 _caps_disco_cb (GabbleDisco *disco,
                 GabbleDiscoRequest *request,
@@ -1036,7 +1075,6 @@ _caps_disco_cb (GabbleDisco *disco,
   for (i = waiters; NULL != i;)
     {
       DiscoWaiter *waiter;
-      GabblePresence *presence;
 
       waiter = (DiscoWaiter *) i->data;
 
@@ -1047,30 +1085,8 @@ _caps_disco_cb (GabbleDisco *disco,
           gpointer value;
 
           if (!bad_hash)
-            {
-              /* trusted reply */
-              presence = gabble_presence_cache_get (cache, waiter->handle);
-
-              if (presence)
-              {
-                GabblePresenceCapabilities save_caps = presence->caps;
-                GHashTable *save_enhanced_caps;
-                gabble_presence_cache_copy_cache_entry (&save_enhanced_caps,
-                    presence->per_channel_manager_caps);
-
-                DEBUG ("setting caps for %d (thanks to %d %s) to "
-                    "%d (save_caps %d)",
-                    waiter->handle, handle, jid, caps, save_caps);
-                gabble_presence_set_capabilities (presence, waiter->resource,
-                    caps, per_channel_manager_caps, waiter->serial);
-                DEBUG ("caps for %d (thanks to %d %s) now %d", waiter->handle,
-                    handle, jid, presence->caps);
-                g_signal_emit (cache, signals[CAPABILITIES_UPDATE], 0,
-                  waiter->handle, save_caps, presence->caps,
-                  save_enhanced_caps, presence->per_channel_manager_caps);
-                gabble_presence_cache_free_cache_entry (save_enhanced_caps);
-              }
-            }
+            set_caps_for (waiter, cache, caps, per_channel_manager_caps,
+                handle, jid);
 
           tmp = i;
           i = i->next;
-- 
1.5.6.5




More information about the telepathy-commits mailing list