Subscribe to presence only after user has logged in
Buddy.py would try to subscribe to presence before the user had logged in to whatsapp. A loginQueue was added, so that functions could be deferred to login.
This commit is contained in:
parent
8385888e97
commit
5a8874c9b9
19
buddy.py
19
buddy.py
|
@ -76,7 +76,12 @@ class BuddyList(dict):
|
|||
contacts = self.keys()
|
||||
|
||||
if self.synced == False:
|
||||
self.session.sendSync(contacts, delta = False, interactive = True)
|
||||
if self.session.loggedIn:
|
||||
self.session.sendSync(contacts, delta = False, interactive = True)
|
||||
else:
|
||||
self.session.loginQueue.append(
|
||||
lambda: self.session.sendSync(contacts, delta = False, interactive = True)
|
||||
)
|
||||
self.synced = True
|
||||
|
||||
# add = set(new) - set(old)
|
||||
|
@ -92,7 +97,17 @@ class BuddyList(dict):
|
|||
# self.unsubscribePresence(number)
|
||||
#
|
||||
for number in contacts:
|
||||
self.session.subscribePresence(number)
|
||||
self.logger.debug("Attempting to subscribe to %s", number)
|
||||
if self.session.loggedIn and number != 'bot':
|
||||
self.session.subscribePresence(number)
|
||||
elif number != 'bot':
|
||||
# Bah! Python scoping rules aren't nice. This function is needed
|
||||
# preserve the value of number
|
||||
def deferredLogin(number):
|
||||
self.session.loginQueue.append(
|
||||
lambda: self.session.subscribePresence(number)
|
||||
)
|
||||
deferredLogin(number)
|
||||
buddy = self[number]
|
||||
self.backend.handleBuddyChanged(self.user, number, buddy.nick,
|
||||
buddy.groups, protocol_pb2.STATUS_NONE,
|
||||
|
|
10
session.py
10
session.py
|
@ -74,12 +74,14 @@ class Session(YowsupApp):
|
|||
|
||||
self.groups = {}
|
||||
self.gotGroupList = False
|
||||
# Functions to exectute when logged in via yowsup
|
||||
self.loginQueue = []
|
||||
self.joinRoomQueue = []
|
||||
self.presenceRequested = []
|
||||
self.offlineQueue = []
|
||||
self.msgIDs = { }
|
||||
self.groupOfflineQueue = { }
|
||||
self.shouldBeConnected = False
|
||||
self.loggedIn = False
|
||||
|
||||
self.timer = None
|
||||
self.password = None
|
||||
|
@ -102,6 +104,7 @@ class Session(YowsupApp):
|
|||
def logout(self):
|
||||
self.logger.info("%s logged out", self.user)
|
||||
super(Session, self).logout()
|
||||
self.loggedIn = False
|
||||
|
||||
def login(self, password):
|
||||
self.logger.info("%s attempting login", self.user)
|
||||
|
@ -245,16 +248,19 @@ class Session(YowsupApp):
|
|||
#self.bot.call("welcome")
|
||||
self.initialized = True
|
||||
self.sendPresence(True)
|
||||
for func in self.loginQueue:
|
||||
func()
|
||||
|
||||
self.logger.debug('Requesting groups list')
|
||||
self.requestGroupsList(self._updateGroups)
|
||||
self.loggedIn = True
|
||||
|
||||
# Called by superclass
|
||||
def onAuthFailed(self, reason):
|
||||
self.logger.info("Auth failed: %s (%s)", self.user, reason)
|
||||
self.backend.handleDisconnected(self.user, 0, reason)
|
||||
self.password = None
|
||||
self.shouldBeConnected = False
|
||||
self.loggedIn = False
|
||||
|
||||
# Called by superclass
|
||||
def onDisconnect(self):
|
||||
|
|
|
@ -216,6 +216,7 @@ class YowsupApp(object):
|
|||
- phone_number: (str) The cellphone number of the person to
|
||||
subscribe to
|
||||
"""
|
||||
self.logger.debug("Subscribing to Presence updates from %s", (phone_number))
|
||||
jid = phone_number + '@s.whatsapp.net'
|
||||
entity = SubscribePresenceProtocolEntity(jid)
|
||||
self.sendEntity(entity)
|
||||
|
|
Loading…
Reference in a new issue