core: added a rosterResync method to bridge:
rosterResync do a full resynchronisation of roster with server. This should not be needed, but may be useful if user suspect a sync issue for whatever reason.
This commit is contained in:
parent
5ceffc1491
commit
f51e924eb6
7 changed files with 52 additions and 1 deletions
|
|
@ -692,6 +692,16 @@ doc=Remove a contact from profile's roster
|
|||
doc_param_0=entity_jid: JID to remove from roster
|
||||
doc_param_1=%(doc_profile_key)s
|
||||
|
||||
[rosterResync]
|
||||
async=
|
||||
type=method
|
||||
category=core
|
||||
sig_in=s
|
||||
sig_out=
|
||||
param_0_default="@DEFAULT@"
|
||||
doc=Do a full resynchronisation of roster with server
|
||||
doc_param_0=%(doc_profile_key)s
|
||||
|
||||
[launchAction]
|
||||
async=
|
||||
type=method
|
||||
|
|
|
|||
|
|
@ -510,6 +510,12 @@ class DbusObject(dbus.service.Object):
|
|||
def progressGetAllMetadata(self, profile):
|
||||
return self._callback("progressGetAllMetadata", unicode(profile))
|
||||
|
||||
@dbus.service.method(const_INT_PREFIX+const_CORE_SUFFIX,
|
||||
in_signature='s', out_signature='',
|
||||
async_callbacks=('callback', 'errback'))
|
||||
def rosterResync(self, profile_key="@DEFAULT@", callback=None, errback=None):
|
||||
return self._callback("rosterResync", unicode(profile_key), callback=callback, errback=errback)
|
||||
|
||||
@dbus.service.method(const_INT_PREFIX+const_CORE_SUFFIX,
|
||||
in_signature='s', out_signature='b',
|
||||
async_callbacks=None)
|
||||
|
|
|
|||
|
|
@ -20,9 +20,9 @@
|
|||
|
||||
from sat.core.log import getLogger
|
||||
|
||||
log = getLogger(__name__)
|
||||
from twisted.spread import jelly, pb
|
||||
from twisted.internet import reactor
|
||||
log = getLogger(__name__)
|
||||
|
||||
|
||||
## jelly hack
|
||||
|
|
|
|||
|
|
@ -145,6 +145,7 @@ class SAT(service.Service):
|
|||
self.bridge.register_method("addContact", self._addContact)
|
||||
self.bridge.register_method("updateContact", self._updateContact)
|
||||
self.bridge.register_method("delContact", self._delContact)
|
||||
self.bridge.register_method("rosterResync", self._rosterResync)
|
||||
self.bridge.register_method("isConnected", self.isConnected)
|
||||
self.bridge.register_method("launchAction", self.launchCallback)
|
||||
self.bridge.register_method("actionsGet", self.actionsGet)
|
||||
|
|
@ -809,6 +810,10 @@ class SAT(service.Service):
|
|||
self.profiles[profile].presence.unsubscribe(to_jid) # is not asynchronous
|
||||
return self.profiles[profile].roster.removeItem(to_jid)
|
||||
|
||||
def _rosterResync(self, profile_key):
|
||||
client = self.getClient(profile_key)
|
||||
return client.roster.resync()
|
||||
|
||||
## Discovery ##
|
||||
# discovery methods are shortcuts to self.memory.disco
|
||||
# the main difference with client.disco is that self.memory.disco manage cache
|
||||
|
|
|
|||
|
|
@ -1170,6 +1170,19 @@ class SatRosterProtocol(xmppim.RosterClientProtocol):
|
|||
roster_item_elt = roster_item.toElement().toXml()
|
||||
roster_cache[roster_jid_s] = roster_item_elt
|
||||
|
||||
@defer.inlineCallbacks
|
||||
def resync(self):
|
||||
"""Ask full roster to resync database
|
||||
|
||||
this should not be necessary, but may be used if user suspsect roster
|
||||
to be somehow corrupted
|
||||
"""
|
||||
roster_cache = self.roster_cache
|
||||
yield roster_cache.clear()
|
||||
self._jids.clear()
|
||||
self._groups.clear()
|
||||
yield self.requestRoster()
|
||||
|
||||
@defer.inlineCallbacks
|
||||
def requestRoster(self):
|
||||
"""Ask the server for Roster list """
|
||||
|
|
|
|||
|
|
@ -726,6 +726,15 @@ class Bridge(object):
|
|||
kwargs['error_handler'] = error_handler
|
||||
return self.db_core_iface.progressGetAllMetadata(profile, **kwargs)
|
||||
|
||||
def rosterResync(self, profile_key="@DEFAULT@", callback=None, errback=None):
|
||||
if callback is None:
|
||||
error_handler = None
|
||||
else:
|
||||
if errback is None:
|
||||
errback = log.error
|
||||
error_handler = lambda err:errback(dbus_to_bridge_exception(err))
|
||||
return self.db_core_iface.rosterResync(profile_key, timeout=const_TIMEOUT, reply_handler=callback, error_handler=error_handler)
|
||||
|
||||
def saveParamsTemplate(self, filename, callback=None, errback=None):
|
||||
if callback is None:
|
||||
error_handler = None
|
||||
|
|
|
|||
|
|
@ -526,6 +526,14 @@ class Bridge(object):
|
|||
errback = self._generic_errback
|
||||
d.addErrback(errback)
|
||||
|
||||
def rosterResync(self, profile_key="@DEFAULT@", callback=None, errback=None):
|
||||
d = self.root.callRemote("rosterResync", profile_key)
|
||||
if callback is not None:
|
||||
d.addCallback(lambda __: callback())
|
||||
if errback is None:
|
||||
errback = self._generic_errback
|
||||
d.addErrback(errback)
|
||||
|
||||
def saveParamsTemplate(self, filename, callback=None, errback=None):
|
||||
d = self.root.callRemote("saveParamsTemplate", filename)
|
||||
if callback is not None:
|
||||
|
|
|
|||
Loading…
Reference in a new issue