From 8385888e97864a6f254e7fab6a226e99a91f50f6 Mon Sep 17 00:00:00 2001 From: moyamo Date: Tue, 1 Dec 2015 23:21:38 +0200 Subject: [PATCH] Minor bug fixes --- Spectrum2/backend.py | 4 ++-- buddy.py | 19 +++++++++++-------- session.py | 14 +++++++------- transwhat.py | 2 ++ whatsappbackend.py | 1 + 5 files changed, 23 insertions(+), 17 deletions(-) diff --git a/Spectrum2/backend.py b/Spectrum2/backend.py index 5ea4d5f..feb2e94 100644 --- a/Spectrum2/backend.py +++ b/Spectrum2/backend.py @@ -437,8 +437,8 @@ class SpectrumBackend: self.handleConvMessageAckPayload(wrapper.payload) elif wrapper.type == protocol_pb2.WrapperMessage.TYPE_RAW_XML: self.handleRawXmlRequest(wrapper.payload) - elif wrapper.type == Protocol_pb2.WrapperMessage.TYPE_BUDDIES: - self.handleBuddiesPayload() + elif wrapper.type == protocol_pb2.WrapperMessage.TYPE_BUDDIES: + self.handleBuddiesPayload(wrapper.payload) def send(self, data): header = struct.pack('!I',len(data)) diff --git a/buddy.py b/buddy.py index e03123b..0eff8cf 100644 --- a/buddy.py +++ b/buddy.py @@ -50,10 +50,10 @@ class Buddy(): class BuddyList(dict): - def __init__(self, owner, backend, user, sendSync): + def __init__(self, owner, backend, user, session): self.owner = owner self.backend = backend - self.sendSync = sendSync + self.session = session self.user = user self.logger = logging.getLogger(self.__class__.__name__) self.synced = False @@ -76,7 +76,7 @@ class BuddyList(dict): contacts = self.keys() if self.synced == False: - self.sendSync(contacts, delta = False, interactive = True) + self.session.sendSync(contacts, delta = False, interactive = True) self.synced = True # add = set(new) - set(old) @@ -91,8 +91,9 @@ class BuddyList(dict): # self.backend.handleBuddyRemoved(self.user, number) # self.unsubscribePresence(number) # - for buddy in contacts: -# self.subscribePresence(number) + for number in contacts: + self.session.subscribePresence(number) + buddy = self[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 "") @@ -103,8 +104,10 @@ class BuddyList(dict): buddy = self[number] buddy.update(nick, groups, image_hash) else: - self.sendSync([number], delta = True, interactive = True) + self.session.sendSync([number], delta = True, interactive = True) + self.session.subscribePresence(number) buddy = Buddy(self.owner, number, nick, "", groups, image_hash) + self[number] = buddy self.logger.debug("Roster add: %s", buddy) self.backend.handleBuddyChanged(self.user, number, buddy.nick, @@ -116,11 +119,11 @@ class BuddyList(dict): def remove(self, number): try: buddy = self[number] - buddy.delete() + del self[number] self.backend.handleBuddyChanged(self.user, number, "", [], protocol_pb2.STATUS_NONE) self.backend.handleBuddyRemoved(self.user, number) -# self.unsubscribePresence(number) + self.session.unsubscribePresence(number) # TODO Sync remove return buddy except KeyError: diff --git a/session.py b/session.py index c89aeb3..c7f2934 100644 --- a/session.py +++ b/session.py @@ -87,7 +87,7 @@ class Session(YowsupApp): self.lastMsgId = None self.synced = False - self.buddies = BuddyList(self.legacyName, self.backend, self.user, self.sendSync) + self.buddies = BuddyList(self.legacyName, self.backend, self.user, self) self.bot = Bot(self) self.imgMsgId = None @@ -271,7 +271,7 @@ class Session(YowsupApp): buddy = self.buddies[_from.split('@')[0]] #self.backend.handleBuddyChanged(self.user, buddy.number.number, # buddy.nick, buddy.groups, protocol_pb2.STATUS_ONLINE) - self.backend.handleMessageAck(self.user, buddy.number.number, self.msgIDs[_id].xmppId) + self.backend.handleMessageAck(self.user, buddy.number, self.msgIDs[_id].xmppId) self.msgIDs[_id].cnt = self.msgIDs[_id].cnt +1 if self.msgIDs[_id].cnt == 2: del self.msgIDs[_id] @@ -509,12 +509,12 @@ class Session(YowsupApp): def onPresenceAvailable(self, buddy, statusmsg): self.logger.info("Is available: %s", buddy) - self.backend.handleBuddyChanged(self.user, buddy.number.number, + self.backend.handleBuddyChanged(self.user, buddy.number, buddy.nick, buddy.groups, protocol_pb2.STATUS_ONLINE, statusmsg, buddy.image_hash) def onPresenceUnavailable(self, buddy, statusmsg): self.logger.info("Is unavailable: %s", buddy) - self.backend.handleBuddyChanged(self.user, buddy.number.number, + self.backend.handleBuddyChanged(self.user, buddy.number, buddy.nick, buddy.groups, protocol_pb2.STATUS_AWAY, statusmsg, buddy.image_hash) # spectrum RequestMethods @@ -756,8 +756,8 @@ class Session(YowsupApp): self.backend.handleMessage(self.user, msg[0], msg[1], "", "", msg[2]) # Called when user logs in to initialize the roster - def loadBuddies(self, buddy): - self.buddies.load(buddy) + def loadBuddies(self, buddies): + self.buddies.load(buddies) # also for adding a new buddy def updateBuddy(self, buddy, nick, groups, image_hash = None): @@ -794,7 +794,7 @@ class Session(YowsupApp): name=os.path.basename(self.imgPath) self.logger.info("Buddy %s",self.imgBuddy) self.image_send(self.imgBuddy, self.imgPath) - + #self.logger.info("Sending picture %s of size %s with name %s",self.imgPath, statinfo.st_size, name) #mtype = "image" diff --git a/transwhat.py b/transwhat.py index 5875dc4..281398a 100755 --- a/transwhat.py +++ b/transwhat.py @@ -80,6 +80,8 @@ io = IOChannel(args.host, args.port, handleTransportData, connectionClosed) plugin = WhatsAppBackend(io, db, args.j) +plugin.handleBackendConfig('features', 'send_buddies_on_login', 1) + while True: try: asyncore.loop(timeout=1.0, count=10, use_poll = True) diff --git a/whatsappbackend.py b/whatsappbackend.py index 1858d3b..8761599 100644 --- a/whatsappbackend.py +++ b/whatsappbackend.py @@ -90,6 +90,7 @@ class WhatsAppBackend(SpectrumBackend): def handleBuddies(self, buddies): """Called when user logs in. Used to initialize roster.""" self.logger.debug("handleBuddies(buddies=%s)", buddies) + buddies = [b for b in buddies.buddy] user = buddies[0].userName self.sessions[user].loadBuddies(buddies)