From eb74b2e59210e87d8367bb98e463139ef655d67b Mon Sep 17 00:00:00 2001 From: Yann Leboulanger Date: Thu, 7 Jan 2010 19:46:32 +0100 Subject: [PATCH] [roidelapluie] gajim-remote change_avatar feature. Fixes #2793 --- src/gajim-remote.py | 9 +++++++++ src/remote_control.py | 27 +++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/src/gajim-remote.py b/src/gajim-remote.py index 09db604d0..efa807543 100644 --- a/src/gajim-remote.py +++ b/src/gajim-remote.py @@ -264,6 +264,15 @@ class GajimRemote: False) ] ], + 'change_avatar': [ + _('Change the avatar'), + [ + ('picture', _('Picture to use'), True), + ('account', _('Account in which the avatar will be set; ' + 'if not specified, the avatar will be set for all accounts'), + False) + ] + ], 'handle_uri': [ _('Handle a xmpp:/ uri'), [ diff --git a/src/remote_control.py b/src/remote_control.py index 87107cc0b..b3ec7bf33 100644 --- a/src/remote_control.py +++ b/src/remote_control.py @@ -29,6 +29,8 @@ import gobject import gtk import os +import base64 +import mimetypes from common import gajim from common import helpers @@ -736,6 +738,31 @@ class SignalObject(dbus.service.Object): for acc in gajim.contacts.get_accounts(): gajim.connections[acc].send_stanza(str(xml)) + @dbus.service.method(INTERFACE, in_signature='ss', out_signature='') + def change_avatar(self, picture, account): + filesize = os.path.getsize(picture) + invalid_file = False + if os.path.isfile(picture): + stat = os.stat(picture) + if stat[6] == 0: + invalid_file = True + else: + invalid_file = True + if not invalid_file and filesize < 16384: + fd = open(picture, 'rb') + data = fd.read() + avatar = base64.encodestring(data) + avatar_mime_type = mimetypes.guess_type(picture)[0] + vcard={} + vcard['PHOTO'] = {'BINVAL': avatar} + if avatar_mime_type: + vcard['PHOTO']['TYPE'] = avatar_mime_type + if account: + gajim.connections[account].send_vcard(vcard) + else: + for acc in gajim.connections: + gajim.connections[acc].send_vcard(vcard) + @dbus.service.method(INTERFACE, in_signature='ssss', out_signature='') def join_room(self, room_jid, nick, password, account): if not account: