core, quick_frontend, primitivus, wix: Contacts List refactoring phase 1:

- QuickContactManagement is not used anymore and will be removed, ContactList + Core are used instead
	- disconnected contacts are now displayed in Primitivus (M-d to show/hide them)
	- avatars are temporary unavailable in wix
	- new bridge method: getContactsFromGroup
This commit is contained in:
Goffi 2012-09-25 00:58:34 +02:00
commit b44412ec0d
3 changed files with 207 additions and 130 deletions

View file

@ -30,3 +30,6 @@ class ConnectedProfileError(Exception):
class UnknownEntityError(Exception):
pass
class UnknownGroupError(Exception):
pass

View file

@ -126,6 +126,7 @@ class SAT(service.Service):
self.bridge.register("asyncConnect", self.asyncConnect)
self.bridge.register("disconnect", self.disconnect)
self.bridge.register("getContacts", self.getContacts)
self.bridge.register("getContactsFromGroup", self.getContactsFromGroup)
self.bridge.register("getLastResource", self.memory.getLastResource)
self.bridge.register("getPresenceStatus", self.memory.getPresenceStatus)
self.bridge.register("getWaitingSub", self.memory.getWaitingSub)
@ -276,8 +277,7 @@ class SAT(service.Service):
def getContacts(self, profile_key):
client = self.getClient(profile_key)
if not client:
error(_('Asking contacts for a non-existant profile'))
return []
raise ProfileUnknownError(_('Asking contacts for a non-existant profile'))
ret = []
for item in client.roster.getItems(): #we get all item for client's roster
#and convert them to expected format
@ -285,6 +285,12 @@ class SAT(service.Service):
ret.append([item.jid.userhost(), attr, item.groups])
return ret
def getContactsFromGroup(self, group, profile_key):
client = self.getClient(profile_key)
if not client:
raise ProfileUnknownError(_("Asking group's contacts for a non-existant profile"))
return client.roster.getJidsFromGroup(group)
def purgeClient(self, profile):
"""Remove reference to a profile client and purge cache
the garbage collector can then free the memory"""

View file

@ -23,6 +23,7 @@ from twisted.internet import task, defer
from twisted.words.protocols.jabber import jid, xmlstream
from wokkel import client, disco, xmppim, generic, compat
from logging import debug, info, error
from sat.core import exceptions
class SatXMPPClient(client.XMPPClient):
@ -164,9 +165,9 @@ class SatRosterProtocol(xmppim.RosterClientProtocol):
"""Return dictionary of attributes as used in bridge from a RosterItem
@param item: RosterItem
@return: dictionary of attributes"""
item_attr = {'to': str(item.subscriptionTo),
'from': str(item.subscriptionFrom),
'ask': str(item.ask)
item_attr = {'to': unicode(item.subscriptionTo),
'from': unicode(item.subscriptionFrom),
'ask': unicode(item.ask)
}
if item.name:
item_attr['name'] = item.name
@ -235,6 +236,12 @@ class SatRosterProtocol(xmppim.RosterClientProtocol):
def getItems(self):
"""Return all items of the roster"""
return self._jids.values()
def getJidsFromGroup(self, group):
try:
return self._groups[group]
except KeyError:
return exceptions.UnknownGroupError
class SatPresenceProtocol(xmppim.PresenceClientProtocol):