[telepathy-gabble/master] Flatten _emit_capabilities_changed into _emit_contact_capabilities_changed

Simon McVittie simon.mcvittie at collabora.co.uk
Wed Aug 26 08:59:55 PDT 2009


In the process, stop assuming that AdvertiseCapabilities will never change
our ContactCapabilities, and that SetSelfCapabilities will never change
our Capabilities.
---
 src/connection.c |   55 ++++++++++++++++++++++-------------------------------
 1 files changed, 23 insertions(+), 32 deletions(-)

diff --git a/src/connection.c b/src/connection.c
index f038bf0..6b627d0 100644
--- a/src/connection.c
+++ b/src/connection.c
@@ -2321,6 +2321,9 @@ ERROR:
  *                          D-BUS EXPORTED METHODS                          *
  ****************************************************************************/
 
+static void gabble_connection_get_handle_contact_capabilities (
+    GabbleConnection *self, TpHandle handle, GPtrArray *arr);
+static void gabble_free_enhanced_contact_capabilities (GPtrArray *caps);
 
 static void
 _emit_capabilities_changed (GabbleConnection *conn,
@@ -2330,11 +2333,14 @@ _emit_capabilities_changed (GabbleConnection *conn,
 {
   GPtrArray *caps_arr;
   const CapabilityConversionData *ccd;
+  GHashTable *hash;
   guint i;
 
   if (gabble_capability_set_equals (old_set, new_set))
     return;
 
+  /* Capabilities */
+
   caps_arr = g_ptr_array_new ();
 
   for (ccd = capabilities_conversions; NULL != ccd->iface; ccd++)
@@ -2385,6 +2391,22 @@ _emit_capabilities_changed (GabbleConnection *conn,
           g_ptr_array_index (caps_arr, i));
     }
   g_ptr_array_free (caps_arr, TRUE);
+
+  /* ContactCapabilities (draft 1) */
+
+  caps_arr = g_ptr_array_new ();
+
+  gabble_connection_get_handle_contact_capabilities (conn, handle,
+      caps_arr);
+
+  hash = g_hash_table_new (NULL, NULL);
+  g_hash_table_insert (hash, GUINT_TO_POINTER (handle), caps_arr);
+
+  gabble_svc_connection_interface_contact_capabilities_emit_contact_capabilities_changed (
+      conn, hash);
+
+  g_hash_table_destroy (hash);
+  gabble_free_enhanced_contact_capabilities (caps_arr);
 }
 
 /**
@@ -2437,36 +2459,6 @@ gabble_free_enhanced_contact_capabilities (GPtrArray *caps)
 }
 
 static void
-_emit_contact_capabilities_changed (GabbleConnection *conn,
-    TpHandle handle,
-    const GabbleCapabilitySet *old_caps,
-    const GabbleCapabilitySet *new_caps)
-{
-  GPtrArray *ret;
-  GHashTable *hash;
-
-  /* Don't emit the D-Bus signal if there is no change */
-  if (gabble_capability_set_equals (old_caps, new_caps))
-    {
-      DEBUG ("unchanged; not emitting ContactCapabilitiesChanged");
-      return;
-    }
-
-  ret = g_ptr_array_new ();
-
-  gabble_connection_get_handle_contact_capabilities (conn, handle, ret);
-
-  hash = g_hash_table_new (NULL, NULL);
-  g_hash_table_insert (hash, GUINT_TO_POINTER (handle), ret);
-
-  gabble_svc_connection_interface_contact_capabilities_emit_contact_capabilities_changed (
-      conn, hash);
-
-  g_hash_table_destroy (hash);
-  gabble_free_enhanced_contact_capabilities (ret);
-}
-
-static void
 connection_capabilities_update_cb (GabblePresenceCache *cache,
     TpHandle handle,
     const GabbleCapabilitySet *old_cap_set,
@@ -2476,7 +2468,6 @@ connection_capabilities_update_cb (GabblePresenceCache *cache,
   GabbleConnection *conn = GABBLE_CONNECTION (user_data);
 
   _emit_capabilities_changed (conn, handle, old_cap_set, new_cap_set);
-  _emit_contact_capabilities_changed (conn, handle, old_cap_set, new_cap_set);
 }
 
 /**
@@ -2646,7 +2637,7 @@ gabble_connection_set_self_capabilities (
 
   if (gabble_connection_refresh_capabilities (self))
     {
-      _emit_contact_capabilities_changed (self, base->self_handle, old_caps,
+      _emit_capabilities_changed (self, base->self_handle, old_caps,
           self->priv->all_caps);
     }
 
-- 
1.5.6.5




More information about the telepathy-commits mailing list