[Telepathy-commits] [telepathy-haze/master] Implement SetAvatar and ClearAvatar

Will Thompson will.thompson at collabora.co.uk
Mon Aug 18 03:49:27 PDT 2008


20080629214714-9f02e-dfcfab3f5cc1d87513c1e4c09d51ca1bbf7f203c.gz
---
 src/connection-avatars.c |   46 ++++++++++++++++++++++++++++++++++------------
 1 files changed, 34 insertions(+), 12 deletions(-)

diff --git a/src/connection-avatars.c b/src/connection-avatars.c
index 31be7a0..4ac9b71 100644
--- a/src/connection-avatars.c
+++ b/src/connection-avatars.c
@@ -19,6 +19,8 @@
  *
  */
 
+#include <string.h>
+
 #include <telepathy-glib/svc-connection.h>
 
 #include <libpurple/cipher.h>
@@ -281,12 +283,15 @@ void
 haze_connection_clear_avatar (TpSvcConnectionInterfaceAvatars *self,
                               DBusGMethodInvocation *context)
 {
-    GError *error = NULL;
-    g_set_error (&error, TP_ERRORS, TP_ERROR_NOT_AVAILABLE,
-        "Haven't got around to dealing with your own avatar yet");
-    dbus_g_method_return_error (context, error);
-    g_error_free (error);
-/*    tp_svc_connection_interface_avatars_return_from_clear_avatar (context);*/
+    HazeConnection *conn = HAZE_CONNECTION (self);
+    TpBaseConnection *base_conn = TP_BASE_CONNECTION (conn);
+    PurpleAccount *account = conn->account;
+
+    purple_buddy_icons_set_account_icon (account, NULL, 0);
+
+    tp_svc_connection_interface_avatars_return_from_clear_avatar (context);
+    tp_svc_connection_interface_avatars_emit_avatar_updated (conn,
+        base_conn->self_handle, "");
 }
 
 void
@@ -295,12 +300,29 @@ haze_connection_set_avatar (TpSvcConnectionInterfaceAvatars *self,
                             const gchar *mime_type,
                             DBusGMethodInvocation *context)
 {
-    GError *error = NULL;
-    g_set_error (&error, TP_ERRORS, TP_ERROR_NOT_AVAILABLE,
-        "Haven't got around to dealing with your own avatar yet");
-    dbus_g_method_return_error (context, error);
-    g_error_free (error);
-//  tp_svc_connection_interface_avatars_return_from_set_avatar (context, token);
+    HazeConnection *conn = HAZE_CONNECTION (self);
+    TpBaseConnection *base_conn = TP_BASE_CONNECTION (conn);
+    PurpleAccount *account = conn->account;
+
+    /* TODO: is 'avatar' guaranteed non-null? */
+    /* TODO: check that the avatar is few enough bytes for the mime type. */
+    guchar *icon_data = NULL;
+    size_t icon_len = avatar->len;
+    gchar *token;
+
+    /* purple_buddy_icons_set_account_icon () takes ownership of the pointer
+     * passed to it, but 'avatar' will be freed soon.
+     */
+    icon_data = g_malloc (avatar->len);
+    memcpy (icon_data, avatar->data, icon_len);
+    purple_buddy_icons_set_account_icon (account, icon_data, icon_len);
+    token = get_token (avatar);
+    DEBUG ("%s", token);
+
+    tp_svc_connection_interface_avatars_return_from_set_avatar (context, token);
+    tp_svc_connection_interface_avatars_emit_avatar_updated (conn,
+        base_conn->self_handle, token);
+    g_free (token);
 }
 
 void
-- 
1.5.6.3




More information about the Telepathy-commits mailing list