Move updateRoster code to BuddyList
This commit is contained in:
parent
da8a415d32
commit
107354af81
48
buddy.py
48
buddy.py
|
@ -50,8 +50,13 @@ class Buddy():
|
||||||
|
|
||||||
class BuddyList(dict):
|
class BuddyList(dict):
|
||||||
|
|
||||||
def __init__(self, owner):
|
def __init__(self, owner, backend, user, sendSync):
|
||||||
self.owner = owner
|
self.owner = owner
|
||||||
|
self.backend = backend
|
||||||
|
self.sendSync = sendSync
|
||||||
|
self.user = user
|
||||||
|
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:
|
||||||
|
@ -62,13 +67,49 @@ class BuddyList(dict):
|
||||||
image_hash = buddy.iconHash
|
image_hash = buddy.iconHash
|
||||||
self[number] = Buddy(self.owner, number, nick, statusMsg,
|
self[number] = Buddy(self.owner, number, nick, statusMsg,
|
||||||
groups, image_hash)
|
groups, image_hash)
|
||||||
|
self.logger.debug("Update roster")
|
||||||
|
|
||||||
|
# old = self.buddies.keys()
|
||||||
|
# self.buddies.load()
|
||||||
|
# new = self.buddies.keys()
|
||||||
|
# contacts = new
|
||||||
|
contacts = self.keys()
|
||||||
|
|
||||||
|
if self.synced == False:
|
||||||
|
self.sendSync(contacts, delta = False, interactive = True)
|
||||||
|
self.synced = True
|
||||||
|
|
||||||
|
# add = set(new) - set(old)
|
||||||
|
# remove = set(old) - set(new)
|
||||||
|
|
||||||
|
# self.logger.debug("Roster remove: %s", str(list(remove)))
|
||||||
|
self.logger.debug("Roster add: %s", str(list(contacts)))
|
||||||
|
|
||||||
|
# for number in remove:
|
||||||
|
# self.backend.handleBuddyChanged(self.user, number, "", [],
|
||||||
|
# protocol_pb2.STATUS_NONE)
|
||||||
|
# self.backend.handleBuddyRemoved(self.user, number)
|
||||||
|
# self.unsubscribePresence(number)
|
||||||
|
#
|
||||||
|
for buddy in contacts:
|
||||||
|
# self.subscribePresence(number)
|
||||||
|
self.backend.handleBuddyChanged(self.user, number, buddy.nick,
|
||||||
|
buddy.groups, protocol_pb2.STATUS_NONE,
|
||||||
|
iconHash = buddy.image_hash if buddy.image_hash is not None else "")
|
||||||
|
|
||||||
|
|
||||||
def update(self, number, nick, groups, image_hash):
|
def update(self, number, nick, groups, image_hash):
|
||||||
if number in self:
|
if number in self:
|
||||||
buddy = self[number]
|
buddy = self[number]
|
||||||
buddy.update(nick, groups, image_hash)
|
buddy.update(nick, groups, image_hash)
|
||||||
else:
|
else:
|
||||||
|
self.sendSync([number], delta = True, interactive = True)
|
||||||
buddy = Buddy(self.owner, number, nick, "", groups, image_hash)
|
buddy = Buddy(self.owner, number, nick, "", groups, image_hash)
|
||||||
|
self.logger.debug("Roster add: %s", buddy)
|
||||||
|
|
||||||
|
self.backend.handleBuddyChanged(self.user, number, buddy.nick,
|
||||||
|
buddy.groups, protocol_pb2.STATUS_NONE,
|
||||||
|
iconHash = buddy.image_hash if buddy.image_hash is not None else "")
|
||||||
|
|
||||||
return buddy
|
return buddy
|
||||||
|
|
||||||
|
@ -76,6 +117,11 @@ class BuddyList(dict):
|
||||||
try:
|
try:
|
||||||
buddy = self[number]
|
buddy = self[number]
|
||||||
buddy.delete()
|
buddy.delete()
|
||||||
|
self.backend.handleBuddyChanged(self.user, number, "", [],
|
||||||
|
protocol_pb2.STATUS_NONE)
|
||||||
|
self.backend.handleBuddyRemoved(self.user, number)
|
||||||
|
# self.unsubscribePresence(number)
|
||||||
|
# TODO Sync remove
|
||||||
return buddy
|
return buddy
|
||||||
except KeyError:
|
except KeyError:
|
||||||
return None
|
return None
|
||||||
|
|
40
session.py
40
session.py
|
@ -87,7 +87,7 @@ class Session(YowsupApp):
|
||||||
self.lastMsgId = None
|
self.lastMsgId = None
|
||||||
self.synced = False
|
self.synced = False
|
||||||
|
|
||||||
self.buddies = BuddyList(self.legacyName)
|
self.buddies = BuddyList(self.legacyName, self.backend, self.user, self.sendSync)
|
||||||
self.bot = Bot(self)
|
self.bot = Bot(self)
|
||||||
|
|
||||||
self.imgMsgId = None
|
self.imgMsgId = None
|
||||||
|
@ -132,39 +132,6 @@ class Session(YowsupApp):
|
||||||
'\n'.join(text) + '\nIf you do not join them you will lose messages'
|
'\n'.join(text) + '\nIf you do not join them you will lose messages'
|
||||||
#self.bot.send(message)
|
#self.bot.send(message)
|
||||||
|
|
||||||
def updateRoster(self):
|
|
||||||
self.logger.debug("Update roster")
|
|
||||||
|
|
||||||
old = self.buddies.keys()
|
|
||||||
self.buddies.load()
|
|
||||||
new = self.buddies.keys()
|
|
||||||
contacts = new
|
|
||||||
|
|
||||||
if self.synced == False:
|
|
||||||
self.sendSync(contacts, delta = False, interactive = True)
|
|
||||||
self.synced = True
|
|
||||||
|
|
||||||
add = set(new) - set(old)
|
|
||||||
remove = set(old) - set(new)
|
|
||||||
|
|
||||||
self.logger.debug("Roster remove: %s", str(list(remove)))
|
|
||||||
self.logger.debug("Roster add: %s", str(list(add)))
|
|
||||||
|
|
||||||
for number in remove:
|
|
||||||
self.backend.handleBuddyChanged(self.user, number, "", [],
|
|
||||||
protocol_pb2.STATUS_NONE)
|
|
||||||
self.backend.handleBuddyRemoved(self.user, number)
|
|
||||||
self.unsubscribePresence(number)
|
|
||||||
|
|
||||||
for number in add:
|
|
||||||
buddy = self.buddies[number]
|
|
||||||
self.subscribePresence(number)
|
|
||||||
self.backend.handleBuddyChanged(self.user, number, buddy.nick,
|
|
||||||
buddy.groups, protocol_pb2.STATUS_NONE,
|
|
||||||
iconHash = buddy.image_hash if buddy.image_hash is not None else "")
|
|
||||||
|
|
||||||
#self.requestLastSeen(number, self._lastSeen)
|
|
||||||
|
|
||||||
def _updateGroups(self, response, request):
|
def _updateGroups(self, response, request):
|
||||||
self.logger.debug('Received groups list %s', response)
|
self.logger.debug('Received groups list %s', response)
|
||||||
groups = response.getGroups()
|
groups = response.getGroups()
|
||||||
|
@ -278,7 +245,6 @@ class Session(YowsupApp):
|
||||||
#self.bot.call("welcome")
|
#self.bot.call("welcome")
|
||||||
self.initialized = True
|
self.initialized = True
|
||||||
self.sendPresence(True)
|
self.sendPresence(True)
|
||||||
self.updateRoster()
|
|
||||||
|
|
||||||
self.logger.debug('Requesting groups list')
|
self.logger.debug('Requesting groups list')
|
||||||
self.requestGroupsList(self._updateGroups)
|
self.requestGroupsList(self._updateGroups)
|
||||||
|
@ -797,15 +763,11 @@ class Session(YowsupApp):
|
||||||
def updateBuddy(self, buddy, nick, groups, image_hash = None):
|
def updateBuddy(self, buddy, nick, groups, image_hash = None):
|
||||||
if buddy != "bot":
|
if buddy != "bot":
|
||||||
self.buddies.update(buddy, nick, groups, image_hash)
|
self.buddies.update(buddy, nick, groups, image_hash)
|
||||||
if self.initialized == True:
|
|
||||||
self.updateRoster()
|
|
||||||
|
|
||||||
def removeBuddy(self, buddy):
|
def removeBuddy(self, buddy):
|
||||||
if buddy != "bot":
|
if buddy != "bot":
|
||||||
self.logger.info("Buddy removed: %s", buddy)
|
self.logger.info("Buddy removed: %s", buddy)
|
||||||
self.buddies.remove(buddy)
|
self.buddies.remove(buddy)
|
||||||
self.updateRoster()
|
|
||||||
|
|
||||||
|
|
||||||
def requestVCard(self, buddy, ID=None):
|
def requestVCard(self, buddy, ID=None):
|
||||||
def onSuccess(response, request):
|
def onSuccess(response, request):
|
||||||
|
|
Loading…
Reference in a new issue