[Telepathy-commits] [telepathy-mission-control/master] Fix avatar change notifications

Alberto Mardegan alberto.mardegan at nokia.com
Thu Feb 19 05:51:17 PST 2009


The remote avatar was not retrieved correctly.
---
 src/mcd-account.c    |   27 ++++++++++++++++++---------
 src/mcd-connection.c |   14 +++++++-------
 2 files changed, 25 insertions(+), 16 deletions(-)

diff --git a/src/mcd-account.c b/src/mcd-account.c
index 8e078ba..c7177f6 100644
--- a/src/mcd-account.c
+++ b/src/mcd-account.c
@@ -2049,19 +2049,28 @@ mcd_account_set_avatar (McdAccount *account, const GArray *avatar,
     }
     g_free (filename);
 
-    if (token)
-	g_key_file_set_string (priv->keyfile, priv->unique_name,
-			       MC_ACCOUNTS_KEY_AVATAR_TOKEN, token);
-    else
-	g_key_file_remove_key (priv->keyfile, priv->unique_name,
-			       MC_ACCOUNTS_KEY_AVATAR_TOKEN, NULL);
-
     if (mime_type)
 	g_key_file_set_string (priv->keyfile, priv->unique_name,
 			       MC_ACCOUNTS_KEY_AVATAR_MIME, mime_type);
 
-    g_signal_emit (account, _mcd_account_signals[AVATAR_CHANGED], 0,
-		   avatar, mime_type);
+    if (token)
+    {
+        gchar *prev_token;
+
+        prev_token = mcd_account_get_avatar_token (account);
+        g_key_file_set_string (priv->keyfile, priv->unique_name,
+                               MC_ACCOUNTS_KEY_AVATAR_TOKEN, token);
+        if (!prev_token || strcmp (prev_token, token) != 0)
+            mc_svc_account_interface_avatar_emit_avatar_changed (account);
+        g_free (prev_token);
+    }
+    else
+    {
+        g_key_file_remove_key (priv->keyfile, priv->unique_name,
+                               MC_ACCOUNTS_KEY_AVATAR_TOKEN, NULL);
+        g_signal_emit (account, _mcd_account_signals[AVATAR_CHANGED], 0,
+                       avatar, mime_type);
+    }
 
     mcd_account_manager_write_conf (priv->account_manager);
     return TRUE;
diff --git a/src/mcd-connection.c b/src/mcd-connection.c
index c21e102..17dafac 100644
--- a/src/mcd-connection.c
+++ b/src/mcd-connection.c
@@ -814,8 +814,7 @@ on_avatar_updated (TpConnection *proxy, guint contact_id, const gchar *token,
     if (priv->setting_avatar) return;
 
     g_debug ("%s: contact %d, token: %s", G_STRFUNC, contact_id, token);
-    if (!(prev_token = mcd_account_get_avatar_token (priv->account)))
-	return;
+    prev_token = mcd_account_get_avatar_token (priv->account);
 
     if (!prev_token || strcmp (token, prev_token) != 0)
     {
@@ -881,11 +880,12 @@ avatars_request_tokens_cb (TpConnection *proxy, GHashTable *tokens,
 	return;
 
     mcd_account_get_avatar (priv->account, &avatar, &mime_type);
-
-    g_debug ("No avatar set, setting our own");
-    _mcd_connection_set_avatar (connection, avatar, mime_type);
-
-    g_array_free (avatar, TRUE);
+    if (avatar)
+    {
+        g_debug ("No avatar set, setting our own");
+        _mcd_connection_set_avatar (connection, avatar, mime_type);
+        g_array_free (avatar, TRUE);
+    }
     g_free (mime_type);
 }
 
-- 
1.5.6.5




More information about the telepathy-commits mailing list