Mercurial > libervia-backend
comparison src/core/xmpp.py @ 1427:1e833970b7f0
core (xmpp): update the cache for a contact group when a contact is removed from it
author | souliane <souliane@mailoo.org> |
---|---|
date | Fri, 24 Apr 2015 14:57:09 +0200 |
parents | 614145ef6e60 |
children | 70abe871eac3 |
comparison
equal
deleted
inserted
replaced
1426:614145ef6e60 | 1427:1e833970b7f0 |
---|---|
179 self._groups = {} # map from groups to jids: key=group value=set of jids | 179 self._groups = {} # map from groups to jids: key=group value=set of jids |
180 self._jids = None # map from jids to RosterItem: key=jid value=RosterItem | 180 self._jids = None # map from jids to RosterItem: key=jid value=RosterItem |
181 | 181 |
182 def rosterCb(self, roster): | 182 def rosterCb(self, roster): |
183 assert roster is not None # FIXME: must be managed with roster versioning | 183 assert roster is not None # FIXME: must be managed with roster versioning |
184 self._groups.clear() | |
184 self._jids = roster | 185 self._jids = roster |
185 for item in roster.itervalues(): | 186 for item in roster.itervalues(): |
186 if not item.subscriptionTo and not item.subscriptionFrom and not item.ask: | 187 if not item.subscriptionTo and not item.subscriptionFrom and not item.ask: |
187 #XXX: current behaviour: we don't want contact in our roster list | 188 #XXX: current behaviour: we don't want contact in our roster list |
188 # if there is no presence subscription | 189 # if there is no presence subscription |
237 return item_attr | 238 return item_attr |
238 | 239 |
239 def setReceived(self, request): | 240 def setReceived(self, request): |
240 #TODO: implement roster versioning (cf RFC 6121 §2.6) | 241 #TODO: implement roster versioning (cf RFC 6121 §2.6) |
241 item = request.item | 242 item = request.item |
243 try: # update the cache for the groups the contact has been removed from | |
244 left_groups = set(self._jids[item.entity].groups).difference(item.groups) | |
245 for group in left_groups: | |
246 jids_set = self._groups[group] | |
247 jids_set.remove(item.entity) | |
248 if not jids_set: | |
249 del self._groups[group] | |
250 except KeyError: | |
251 pass # no previous item registration (or it's been cleared) | |
242 self._jids[item.entity] = item | 252 self._jids[item.entity] = item |
243 self._registerItem(item) | 253 self._registerItem(item) |
244 self.host.bridge.newContact(item.entity.full(), self.getAttributes(item), item.groups, self.parent.profile) | 254 self.host.bridge.newContact(item.entity.full(), self.getAttributes(item), item.groups, self.parent.profile) |
245 | 255 |
246 def removeReceived(self, request): | 256 def removeReceived(self, request): |