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):