diff frontends/src/primitivus/contact_list.py @ 1058:0a9986452bba

frontends: fixes bug with private message introduced with revision 1000 (6f1e03068b5f) + display messages from contacts not in roster
author souliane <souliane@mailoo.org>
date Thu, 29 May 2014 14:34:01 +0200
parents 6f1e03068b5f
children 75025461141f
line wrap: on
line diff
--- a/frontends/src/primitivus/contact_list.py	Sun Jun 08 17:39:21 2014 +0200
+++ b/frontends/src/primitivus/contact_list.py	Thu May 29 14:34:01 2014 +0200
@@ -236,30 +236,36 @@
     def replace(self, jid, groups=None, attributes=None):
         """Add a contact to the list if doesn't exist, else update it.
 
+        This method can be called with groups=None for the purpose of updating
+        the contact's attributes (e.g. nickname). In that case, the groups
+        attribute must not be set to the default group but ignored. If not,
+        you may move your contact from its actual group(s) to the default one.
+
+        None value for 'groups' has a different meaning than [None] which is for the default group.
+
         @param jid (JID)
         @param groups (list): list of groups or None to ignore the groups membership.
         @param attributes (dict)
-
-        XXX: None value for 'groups' has a different meaning than [None] which is for the default group.
         """
-        QuickContactList.replace(self, jid, groups, attributes)
+        QuickContactList.replace(self, jid, groups, attributes)  # eventually change the nickname
         if jid.bare in self.specials:
             return
-        if not attributes:
-            attributes = {}
+        if groups is None:
+            self.update()
+            return
         assert isinstance(jid, JID)
-        if groups is not None:
-            if not groups:
-                groups = [None]
-            for group in [group for group in self.groups if group not in groups]:
-                try:  # remove the contact from a previous group
-                    self.groups[group][1].remove(jid.bare)
-                except KeyError:
-                    pass
-            for group in groups:
-                if group not in self.groups:
-                    self.groups[group] = [True, set()]  # [unfold, list_of_contacts]
-                self.groups[group][1].add(jid.bare)
+        assert isinstance(groups, list)
+        if groups == []:
+            groups = [None]  # [None] is the default group
+        for group in [group for group in self.groups if group not in groups]:
+            try:  # remove the contact from a previous group
+                self.groups[group][1].remove(jid.bare)
+            except KeyError:
+                pass
+        for group in groups:
+            if group not in self.groups:
+                self.groups[group] = [True, set()]  # [unfold, list_of_contacts]
+            self.groups[group][1].add(jid.bare)
         self.update()
 
     def remove(self, jid):
@@ -278,7 +284,7 @@
 
     def add(self, jid, param_groups=None):
         """add a contact to the list"""
-        self.replace(jid, param_groups)
+        self.replace(jid, param_groups if param_groups else [None])
 
     def setSpecial(self, special_jid, special_type, show=False):
         """Set entity as a special