[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