core: contact deletion from roster if we have no subscription to it (behaviour may change in futur)

quick frontend: groups is updated in contactList in case of roster push
This commit is contained in:
Goffi 2011-05-29 16:12:08 +02:00
commit 279f173624
4 changed files with 17 additions and 3 deletions

View file

@ -203,7 +203,11 @@ class QuickApp():
if not self.check_profile(profile):
return
entity=JID(JabberId)
self.rosterList[entity.short]=(dict(attributes), list(groups))
_groups = list(groups)
self.rosterList[entity.short]=(dict(attributes), _groups)
if entity in self.CM:
self.CM.update(entity, 'groups', _groups)
self.contactList.replace(entity, self.CM.getAttr(entity, 'groups'))
def newMessage(self, from_jid, msg, type, to_jid, profile):
if not self.check_profile(profile):

View file

@ -31,6 +31,9 @@ class QuickContactManagement():
def __init__(self):
self.__contactlist = {}
def __contains__(self, entity):
return entity.short in self.__contactlist
def clear(self):
"""Clear all the contact list"""
self.__contactlist.clear()
@ -39,6 +42,8 @@ class QuickContactManagement():
"""Add contact to the list, update resources"""
if not self.__contactlist.has_key(entity.short):
self.__contactlist[entity.short] = {'resources':[]}
if not entity.resource:
return
if entity.resource in self.__contactlist[entity.short]['resources']:
self.__contactlist[entity.short]['resources'].remove(entity.resource)
self.__contactlist[entity.short]['resources'].append(entity.resource)

View file

@ -475,7 +475,6 @@ class SAT(service.Service):
to_jid=jid.JID(to)
self.profiles[profile].roster.removeItem(to_jid)
self.profiles[profile].presence.unsubscribe(to_jid)
self.bridge.contactDeleted(to, profile)
## callbacks ##

View file

@ -158,6 +158,12 @@ class SatRosterProtocol(xmppim.RosterClientProtocol):
def onRosterSet(self, item):
"""Called when a new/update roster item is received"""
#TODO: send a signal to frontends
if not item.subscriptionTo and not item.subscriptionFrom and not item.ask:
#XXX: current behaviour: we don't want contact in our roster list
#if there is no presence subscription
#may change in the future
self.removeItem(item.jid)
return
item_attr = {'to': str(item.subscriptionTo),
'from': str(item.subscriptionFrom),
'ask': str(item.ask)
@ -171,9 +177,9 @@ class SatRosterProtocol(xmppim.RosterClientProtocol):
def onRosterRemove(self, entity):
"""Called when a roster removal event is received"""
#TODO: send a signal to frontends
print _("removing %s from roster list") % entity.full()
self.host.memory.delContact(entity, self.parent.profile)
self.host.bridge.contactDeleted(entity.userhost(), self.parent.profile)
def getGroups(self):
"""Return a set of groups"""