[telepathy-gabble/telepathy-gabble-0.8] Emit the signal AvatarUpdated at the end of the conflict resolution

Alban Crequy alban.crequy at collabora.co.uk
Thu Oct 1 11:38:18 PDT 2009


---
 src/conn-avatars.c   |   10 +++-------
 src/presence-cache.c |   13 ++++++++++---
 src/vcard-manager.c  |    2 +-
 src/vcard-manager.h  |    2 ++
 4 files changed, 16 insertions(+), 11 deletions(-)

diff --git a/src/conn-avatars.c b/src/conn-avatars.c
index b8d745c..4ebcdaa 100644
--- a/src/conn-avatars.c
+++ b/src/conn-avatars.c
@@ -77,23 +77,19 @@ update_own_avatar_sha1 (GabbleConnection *conn,
 static void
 connection_avatar_update_cb (GabblePresenceCache *cache,
                              TpHandle handle,
+                             const gchar *sha1,
                              gpointer user_data)
 {
   GabbleConnection *conn = GABBLE_CONNECTION (user_data);
   TpBaseConnection *base = (TpBaseConnection *) conn;
-  GabblePresence *presence;
-
-  presence = gabble_presence_cache_get (conn->presence_cache, handle);
-
-  g_assert (presence != NULL);
 
   gabble_vcard_manager_invalidate_cache (conn->vcard_manager, handle);
 
   if (handle == base->self_handle)
-    update_own_avatar_sha1 (conn, presence->avatar_sha1, NULL);
+    update_own_avatar_sha1 (conn, sha1, NULL);
   else
     tp_svc_connection_interface_avatars_emit_avatar_updated (conn,
-        handle, presence->avatar_sha1);
+        handle, sha1);
 }
 
 /* Called when our vCard is first fetched, so we can start putting the
diff --git a/src/presence-cache.c b/src/presence-cache.c
index cd1941a..1ee43f3 100644
--- a/src/presence-cache.c
+++ b/src/presence-cache.c
@@ -365,7 +365,7 @@ gabble_presence_cache_class_init (GabblePresenceCacheClass *klass)
     G_SIGNAL_RUN_LAST,
     0,
     NULL, NULL,
-    g_cclosure_marshal_VOID__UINT, G_TYPE_NONE, 1, G_TYPE_UINT);
+    g_cclosure_marshal_VOID__UINT_POINTER, G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_POINTER);
   signals[CAPABILITIES_DISCOVERED] = g_signal_new (
     "capabilities-discovered",
     G_TYPE_FROM_CLASS (klass),
@@ -652,8 +652,16 @@ self_vcard_request_cb (GabbleVCardManager *self,
 {
   GabblePresenceCache *cache = user_data;
   GabblePresenceCachePrivate *priv = GABBLE_PRESENCE_CACHE_PRIV (cache);
+  gchar *sha1 = NULL;
 
   priv->avatar_reset_pending = FALSE;
+
+  if (vcard != NULL)
+    {
+      sha1 = vcard_get_avatar_sha1 (vcard);
+      g_signal_emit (cache, signals[AVATAR_UPDATE], 0, handle, sha1);
+      g_free (sha1);
+    }
 }
 
 static void
@@ -765,9 +773,8 @@ _grab_avatar_sha1 (GabblePresenceCache *cache,
       else
         {
           presence->avatar_sha1 = g_strdup (sha1);
+          g_signal_emit (cache, signals[AVATAR_UPDATE], 0, handle, sha1);
         }
-
-      g_signal_emit (cache, signals[AVATAR_UPDATE], 0, handle);
     }
 }
 
diff --git a/src/vcard-manager.c b/src/vcard-manager.c
index f82ff13..57d1fbb 100644
--- a/src/vcard-manager.c
+++ b/src/vcard-manager.c
@@ -553,7 +553,7 @@ gabble_vcard_manager_finalize (GObject *object)
   G_OBJECT_CLASS (gabble_vcard_manager_parent_class)->finalize (object);
 }
 
-static gchar *
+gchar *
 vcard_get_avatar_sha1 (LmMessageNode *vcard)
 {
   gchar *sha1;
diff --git a/src/vcard-manager.h b/src/vcard-manager.h
index 0d35223..844dcc8 100644
--- a/src/vcard-manager.h
+++ b/src/vcard-manager.h
@@ -126,6 +126,8 @@ GabbleVCardManagerEditRequest *gabble_vcard_manager_edit (GabbleVCardManager *,
 
 void gabble_vcard_manager_remove_edit_request (GabbleVCardManagerEditRequest *);
 
+gchar *vcard_get_avatar_sha1 (LmMessageNode *vcard);
+
 /* For unit tests only */
 void gabble_vcard_manager_set_suspend_reply_timeout (guint timeout);
 
-- 
1.5.6.5




More information about the telepathy-commits mailing list