# HG changeset patch # User souliane # Date 1398615732 -7200 # Node ID 6f1e03068b5fdc3b3f2be971c4caf720fcde6f2d # Parent c37a24922f27377f95a1aaa3cad95506dca86b27 primitivus: fixes contact group update diff -r c37a24922f27 -r 6f1e03068b5f frontends/src/primitivus/contact_list.py --- a/frontends/src/primitivus/contact_list.py Fri Apr 11 11:02:42 2014 +0200 +++ b/frontends/src/primitivus/contact_list.py Sun Apr 27 18:22:12 2014 +0200 @@ -234,20 +234,32 @@ self.update() def replace(self, jid, groups=None, attributes=None): - """add a contact to the list if doesn't exist, else update it""" + """Add a contact to the list if doesn't exist, else update it. + + @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) if jid.bare in self.specials: return - if not groups: - groups = [None] if not attributes: - attributes={} - assert isinstance(groups, list) + attributes = {} assert isinstance(jid, JID) - for group in groups: - if not self.groups.has_key(group): - self.groups[group] = [True,set()] #[unfold,list_of_contacts] - self.groups[group][1].add(jid.bare) + 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) self.update() def remove(self, jid): @@ -264,9 +276,9 @@ del self.groups[group] self.update() - def add(self, jid, param_groups=[None]): + def add(self, jid, param_groups=None): """add a contact to the list""" - self.replace(jid,param_groups) + self.replace(jid, param_groups) def setSpecial(self, special_jid, special_type, show=False): """Set entity as a special diff -r c37a24922f27 -r 6f1e03068b5f frontends/src/primitivus/primitivus --- a/frontends/src/primitivus/primitivus Fri Apr 11 11:02:42 2014 +0200 +++ b/frontends/src/primitivus/primitivus Sun Apr 27 18:22:12 2014 +0200 @@ -388,8 +388,7 @@ if not from_jid in self.contact_list and from_jid.bare != self.profiles[profile]['whoami'].bare: #XXX: needed to show entities which haven't sent any # presence information and which are not in roster - #TODO: put these entities in a "not in roster" list - self.contact_list.replace(from_jid) + self.contact_list.replace(from_jid, ['Not in roster']) if JID(self.contact_list.selected).bare != from_jid.bare: self.contact_list.putAlert(from_jid) diff -r c37a24922f27 -r 6f1e03068b5f frontends/src/quick_frontend/quick_contact_list.py --- a/frontends/src/quick_frontend/quick_contact_list.py Fri Apr 11 11:02:42 2014 +0200 +++ b/frontends/src/quick_frontend/quick_contact_list.py Sun Apr 27 18:22:12 2014 +0200 @@ -54,7 +54,14 @@ self.specials.clear() def replace(self, jid, groups=None, attributes=None): - """add a contact to the list if doesn't exist, else update it""" + """Add a contact to the list if doesn't exist, else update it. + + @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. + """ if attributes and 'name' in attributes: self.setCache(jid, 'name', attributes['name']) diff -r c37a24922f27 -r 6f1e03068b5f frontends/src/wix/contact_list.py --- a/frontends/src/wix/contact_list.py Fri Apr 11 11:02:42 2014 +0200 +++ b/frontends/src/wix/contact_list.py Sun Apr 27 18:22:12 2014 +0200 @@ -76,6 +76,14 @@ self.replace(jid) def replace(self, contact, groups=None, attributes=None): + """Add a contact to the list if doesn't exist, else update it. + + @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. + """ debug(_("update %s") % contact) if not self.__find_idx(contact): self.add(contact, groups)