diff frontends/src/quick_frontend/quick_chat.py @ 2123:c42aab22c2c0

plugin XEP-0054, quick frontend(app): various improvments: - memory.cache is now used - getAvatar and setAvatar has been renamed to avatarGet and avatarSet to follow new convention - getAvatar now return (optionally) full path, and may request vCard or only return avatar in cache - getAvatarFile has been removed as it is not needed anymore (avatarGet can return full path) - getCard has been removed from bridge as it was only used to request avatar - new internal method getBareOfFull return jid to use depending of the jid being part of a MUC or not - cache is now set per profile in client, instead of a general one for all profiles - thanks to the use of memory.cache, correct extension is now used in saved file, according to MIME type - fixed and better cache handling - a warning message is shown if given avatar hash differs from computed one - empty hash value is now in a constant, and ignored if received - QuickApp has been updated to follow new behaviour - Primitivus has been fixed (it was not declaring not using avatars correclty) - jp has been updated to follow new methods name
author Goffi <goffi@goffi.org>
date Sun, 15 Jan 2017 17:51:37 +0100
parents 3435e8d2e8e4
children 4b78b4c7f805
line wrap: on
line diff
--- a/frontends/src/quick_frontend/quick_chat.py	Sun Jan 15 16:00:41 2017 +0100
+++ b/frontends/src/quick_frontend/quick_chat.py	Sun Jan 15 17:51:37 2017 +0100
@@ -126,7 +126,9 @@
 
     @property
     def avatar(self):
-        return self.host.getAvatar(self.from_jid, self.profile)
+        """avatar full path or None if no avatar is found"""
+        ret = self.host.getAvatar(self.from_jid, profile=self.profile)
+        return ret
 
     def getNick(self, entity):
         """Return nick of an entity when possible"""
@@ -583,16 +585,25 @@
 
     def onAvatar(self, entity, filename, profile):
         if self.type == C.CHAT_GROUP:
-            if entity.bare == self.target and entity.resource in self.occupants:
-                self.occupants[entity.resource].update({'avatar': filename})
+            if entity.bare == self.target:
+                try:
+                    self.occupants[entity.resource].update({'avatar': filename})
+                except KeyError:
+                    # can happen for a message in history where the
+                    # entity is not here anymore
+                    pass
+
                 for m in self.messages.values():
                     if m.nick == entity.resource:
                         for w in m.widgets:
                             w.update({'avatar': filename})
         else:
-            if entity.bare == self.target.bare:
-                log.info("entity avatar updated")
-                # TODO: call a specific method
+            if entity.bare == self.target.bare or entity.bare == self.host.profiles[profile].whoami.bare:
+                log.info(u"avatar updated for {}".format(entity))
+                for m in self.messages.values():
+                    if m.from_jid.bare == entity.bare:
+                        for w in m.widgets:
+                            w.update({'avatar': filename})
 
 
 quick_widgets.register(QuickChat)