# HG changeset patch # User Goffi # Date 1586891684 -7200 # Node ID 1dd6db69406a29a3a8c6bd3646e0ee4983387046 # Parent ec11a35dcf1456268bce078c2e59c12ce6d7b4e7 core: update avatar handling following backend changes: new avatar data format is handled. When ContactItem is created, avatar and nicknames are requested to backend if they are not already in cache. diff -r ec11a35dcf14 -r 1dd6db69406a cagou/core/common.py --- a/cagou/core/common.py Wed Apr 01 23:59:00 2020 +0200 +++ b/cagou/core/common.py Tue Apr 14 21:14:44 2020 +0200 @@ -20,8 +20,6 @@ import json from functools import partial, total_ordering -from sat.core.i18n import _ -from sat.core import log as logging from kivy.uix.widget import Widget from kivy.uix.image import Image, AsyncImage from kivy.uix.label import Label @@ -33,6 +31,9 @@ from kivy.event import EventDispatcher from kivy.metrics import dp from kivy import properties +from sat.core.i18n import _ +from sat.core import log as logging +from sat.tools.common import data_format from sat_frontends.quick_frontend import quick_chat from .constants import Const as C from .common_widgets import CategorySeparator @@ -59,8 +60,7 @@ """An item from ContactList The item will drawn as an icon (JID avatar) with its jid below. - If "notifs" are present in data, a notification counter will be drawn above the - avatar. + If "badge_text" is set, a label with the text will be drawn above the avatar. """ base_width = dp(150) avatar_layout = properties.ObjectProperty() @@ -71,6 +71,23 @@ data = properties.DictProperty() jid = properties.StringProperty('') + def on_kv_post(self, __): + if ((self.profile and self.jid and self.data is not None + and ('avatar' not in self.data or 'nicknames' not in self.data))): + G.host.bridge.identityGet( + self.jid, ['avatar', 'nicknames'], True, self.profile, + callback=self._identityGetCb, + errback=partial( + G.host.errback, + message=_("Can't retrieve identity for {jid}: {{msg}}").format( + jid=self.jid) + ) + ) + + def _identityGetCb(self, identity_raw): + identity_data = data_format.deserialise(identity_raw) + self.data.update(identity_data) + def on_badge_text(self, wid, text): if text: if self.badge is not None: diff -r ec11a35dcf14 -r 1dd6db69406a cagou/kv/common.kv --- a/cagou/kv/common.kv Wed Apr 01 23:59:00 2020 +0200 +++ b/cagou/kv/common.kv Tue Apr 14 21:14:44 2020 +0200 @@ -46,7 +46,7 @@ Avatar: id: avatar pos_hint: {'x': 0, 'y': 0} - source: root.data.get('avatar') or app.default_avatar + source: root.data['avatar']['path'] if root.data.get('avatar') else app.default_avatar allow_stretch: True BoxLayout: id: label_box diff -r ec11a35dcf14 -r 1dd6db69406a cagou/plugins/plugin_wid_chat.kv --- a/cagou/plugins/plugin_wid_chat.kv Wed Apr 01 23:59:00 2020 +0200 +++ b/cagou/plugins/plugin_wid_chat.kv Tue Apr 14 21:14:44 2020 +0200 @@ -113,7 +113,7 @@ size_hint: None, 1 MessAvatar: id: avatar - source: (root.mess_data.avatar or '') if root.mess_data else '' + source: root.mess_data.avatar['path'] if root.mess_data and root.mess_data.avatar else app.default_avatar on_press: root.chat.addNick(root.nick) Widget: # use to push the avatar on the top diff -r ec11a35dcf14 -r 1dd6db69406a cagou/plugins/plugin_wid_chat.py --- a/cagou/plugins/plugin_wid_chat.py Wed Apr 01 23:59:00 2020 +0200 +++ b/cagou/plugins/plugin_wid_chat.py Tue Apr 14 21:14:44 2020 +0200 @@ -320,7 +320,12 @@ def update(self, update_dict): if 'avatar' in update_dict: - self.avatar.source = update_dict['avatar'] + avatar_data = update_dict['avatar'] + if avatar_data is None: + source = G.host.getDefaultAvatar() + else: + source = avatar_data['path'] + self.avatar.source = source if 'status' in update_dict: status = update_dict['status'] self.delivery.text = '\u2714' if status == 'delivered' else ''