Skip to content
Snippets Groups Projects
Commit 2171def0 authored by Yann Leboulanger's avatar Yann Leboulanger
Browse files

we get the roster asynchronously now

parent 2f977d1b
No related branches found
No related tags found
No related merge requests found
......@@ -490,6 +490,16 @@ class Connection:
errcode = iq_obj.getErrorCode()
self.dispatch('MSGERROR', (jid, errcode, errmsg))
def _getRosterCB(self, con, iq_obj):
roster = self.connection.getRoster().getRaw()
if not roster :
roster = {}
name = gajim.config.get_per('accounts', self.name, 'name')
hostname = gajim.config.get_per('accounts', self.name, 'hostname')
if roster.has_key(name + '@' + hostname):
del roster[name + '@' + hostname]
self.dispatch('ROSTER', roster)
def connect(self):
"""Connect and authentificate to the Jabber server"""
name = gajim.config.get_per('accounts', self.name, 'name')
......@@ -508,7 +518,7 @@ class Connection:
else:
proxy = None
if gajim.config.get('verbose'):
con = common.xmpp.Client(hostname)#, debug = [])
con = common.xmpp.Client(hostname)
else:
con = common.xmpp.Client(hostname, debug = [])
#debug = [common.jabber.DBG_ALWAYS], log = sys.stderr, \
......@@ -544,16 +554,13 @@ class Connection:
common.xmpp.NS_VERSION)
con.RegisterHandler('iq', self._MucOwnerCB, 'result',\
common.xmpp.NS_MUC_OWNER)
con.RegisterHandler('iq', self._getRosterCB, 'result',\
common.xmpp.NS_ROSTER)
gajim.log.debug('Connected to server')
if con.auth(name, self.password, resource): #FIXME: blocking
roster = con.getRoster().getRaw() #FIXME: blocking
if not roster :
roster = {}
if roster.has_key(name + '@' + hostname):
del roster[name + '@' + hostname]
self.dispatch('ROSTER', roster)
con.initRoster()
self.connected = 2
return con
else:
......
......@@ -205,10 +205,14 @@ class Client(CommonClient):
self.connected+='+sasl'
return 'sasl'
def initRoster(self):
""" Plug in the roster. """
if not self.__dict__.has_key('Roster'): roster.Roster().PlugIn(self)
def getRoster(self):
""" Return the Roster instance, previously plugging it in and
requesting roster from server if needed. """
if not self.__dict__.has_key('Roster'): roster.Roster().PlugIn(self)
self.initRoster()
return self.Roster.getRoster()
def sendInitPresence(self,requestRoster=1):
......
......@@ -170,7 +170,7 @@ class Dispatcher(PlugIn):
if not self.handlers.has_key(xmlns): self.RegisterNamespace(xmlns,'warn')
if not self.handlers[xmlns].has_key(name): self.RegisterProtocol(name,Protocol,xmlns,'warn')
if not self.handlers[xmlns][name].has_key(typ+ns): self.handlers[xmlns][name][typ+ns]=[]
if makefirst: self.handlers[xmlns][name][typ+ns].insert({'func':handler,'system':system})
if makefirst: self.handlers[xmlns][name][typ+ns].insert(0,{'func':handler,'system':system})
else: self.handlers[xmlns][name][typ+ns].append({'func':handler,'system':system})
def RegisterHandlerOnce(self,name,handler,typ='',ns='',xmlns=None,makefirst=0, system=0):
......
......@@ -42,7 +42,7 @@ class Roster(PlugIn):
""" Register presence and subscription trackers in the owner's dispatcher.
Also request roster from server if the 'request' argument is set.
Used internally."""
self._owner.RegisterHandler('iq',self.RosterIqHandler,'result',NS_ROSTER)
self._owner.RegisterHandler('iq',self.RosterIqHandler,'result',NS_ROSTER,makefirst=1)
self._owner.RegisterHandler('iq',self.RosterIqHandler,'set',NS_ROSTER)
self._owner.RegisterHandler('presence',self.PresenceHandler)
if request: self.Request()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment