Use the result of Sync to delete invalid numbers
This commit is contained in:
parent
e32365a065
commit
2895f78ec7
29
buddy.py
29
buddy.py
|
@ -60,7 +60,6 @@ class BuddyList(dict):
|
||||||
self.session = session
|
self.session = session
|
||||||
self.user = user
|
self.user = user
|
||||||
self.logger = logging.getLogger(self.__class__.__name__)
|
self.logger = logging.getLogger(self.__class__.__name__)
|
||||||
self.synced = False
|
|
||||||
|
|
||||||
def _load(self, buddies):
|
def _load(self, buddies):
|
||||||
for buddy in buddies:
|
for buddy in buddies:
|
||||||
|
@ -77,20 +76,32 @@ class BuddyList(dict):
|
||||||
contacts = self.keys()
|
contacts = self.keys()
|
||||||
contacts.remove('bot')
|
contacts.remove('bot')
|
||||||
|
|
||||||
if self.synced == False:
|
self.session.sendSync(contacts, delta=False, interactive=True,
|
||||||
self.session.sendSync(contacts, delta = False, interactive = True)
|
success=self.onSync)
|
||||||
self.synced = True
|
|
||||||
|
|
||||||
self.logger.debug("Roster add: %s", str(list(contacts)))
|
self.logger.debug("Roster add: %s", str(list(contacts)))
|
||||||
|
|
||||||
for number in contacts:
|
for number in contacts:
|
||||||
buddy = self[number]
|
buddy = self[number]
|
||||||
self.backend.handleBuddyChanged(self.user, number, buddy.nick,
|
self.updateSpectrum(buddy)
|
||||||
buddy.groups, protocol_pb2.STATUS_NONE,
|
|
||||||
iconHash = buddy.image_hash if buddy.image_hash is not None else "")
|
def onSync(self, existing, nonexisting, invalid):
|
||||||
|
"""We should only presence subscribe to existing numbers"""
|
||||||
|
|
||||||
|
for number in existing:
|
||||||
self.session.subscribePresence(number)
|
self.session.subscribePresence(number)
|
||||||
self.logger.debug("%s is requesting statuses of: %s", self.user, contacts)
|
self.logger.debug("%s is requesting statuses of: %s", self.user, existing)
|
||||||
self.session.requestStatuses(contacts, success = self.onStatus)
|
self.session.requestStatuses(existing, success = self.onStatus)
|
||||||
|
|
||||||
|
self.logger.debug("Removing nonexisting buddies %s", nonexisting)
|
||||||
|
for number in nonexisting:
|
||||||
|
self.remove(number)
|
||||||
|
del self[number]
|
||||||
|
|
||||||
|
self.logger.debug("Removing invalid buddies %s", invalid)
|
||||||
|
for number in invalid:
|
||||||
|
self.remove(number)
|
||||||
|
del self[number]
|
||||||
|
|
||||||
def onStatus(self, contacts):
|
def onStatus(self, contacts):
|
||||||
self.logger.debug("%s received statuses of: %s", self.user, contacts)
|
self.logger.debug("%s received statuses of: %s", self.user, contacts)
|
||||||
|
|
|
@ -272,7 +272,7 @@ class YowsupApp(object):
|
||||||
)
|
)
|
||||||
self.sendEntity(state)
|
self.sendEntity(state)
|
||||||
|
|
||||||
def sendSync(self, contacts, delta = False, interactive = True):
|
def sendSync(self, contacts, delta = False, interactive = True, success = None, failure = None):
|
||||||
"""
|
"""
|
||||||
You need to sync new contacts before you interact with
|
You need to sync new contacts before you interact with
|
||||||
them, failure to do so could result in a temporary ban.
|
them, failure to do so could result in a temporary ban.
|
||||||
|
@ -285,12 +285,18 @@ class YowsupApp(object):
|
||||||
contact list.
|
contact list.
|
||||||
- interactive: (bool; default: True) Set to false if you are
|
- interactive: (bool; default: True) Set to false if you are
|
||||||
sure this is the first time registering
|
sure this is the first time registering
|
||||||
|
- success: (func) - Callback; Takes three arguments: existing numbers,
|
||||||
|
non-existing numbers, invalid numbers.
|
||||||
"""
|
"""
|
||||||
# TODO: Implement callbacks
|
# TODO: Implement callbacks
|
||||||
mode = GetSyncIqProtocolEntity.MODE_DELTA if delta else GetSyncIqProtocolEntity.MODE_FULL
|
mode = GetSyncIqProtocolEntity.MODE_DELTA if delta else GetSyncIqProtocolEntity.MODE_FULL
|
||||||
context = GetSyncIqProtocolEntity.CONTEXT_INTERACTIVE if interactive else GetSyncIqProtocolEntity.CONTEXT_REGISTRATION
|
context = GetSyncIqProtocolEntity.CONTEXT_INTERACTIVE if interactive else GetSyncIqProtocolEntity.CONTEXT_REGISTRATION
|
||||||
iq = GetSyncIqProtocolEntity(contacts, mode, context)
|
iq = GetSyncIqProtocolEntity(contacts, mode, context)
|
||||||
self.sendIq(iq)
|
def onSuccess(response, request):
|
||||||
|
success(response.inNumbers.keys(), response.outNumbers.keys(), response.invalidNumbers)
|
||||||
|
|
||||||
|
self.sendIq(iq, onSuccess = onSuccess, onError = failure)
|
||||||
|
|
||||||
|
|
||||||
def requestStatuses(self, contacts, success = None, failure = None):
|
def requestStatuses(self, contacts, success = None, failure = None):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in a new issue