Move requestVCard to BuddyList and send image_hash of new contact
This commit is contained in:
parent
0b4e2f13d4
commit
ef04f49152
67
buddy.py
67
buddy.py
|
@ -26,6 +26,10 @@ from Spectrum2 import protocol_pb2
|
||||||
import logging
|
import logging
|
||||||
import time
|
import time
|
||||||
import utils
|
import utils
|
||||||
|
import base64
|
||||||
|
|
||||||
|
import deferred
|
||||||
|
from deferred import call
|
||||||
|
|
||||||
|
|
||||||
class Buddy():
|
class Buddy():
|
||||||
|
@ -39,7 +43,6 @@ class Buddy():
|
||||||
self.lastseen = 0
|
self.lastseen = 0
|
||||||
self.presence = 0
|
self.presence = 0
|
||||||
|
|
||||||
|
|
||||||
def update(self, nick, groups, image_hash):
|
def update(self, nick, groups, image_hash):
|
||||||
self.nick = nick
|
self.nick = nick
|
||||||
self.groups = groups
|
self.groups = groups
|
||||||
|
@ -71,10 +74,6 @@ class BuddyList(dict):
|
||||||
|
|
||||||
self.logger.debug("Update roster")
|
self.logger.debug("Update roster")
|
||||||
|
|
||||||
# old = self.buddies.keys()
|
|
||||||
# self.buddies.load()
|
|
||||||
# new = self.buddies.keys()
|
|
||||||
# contacts = new
|
|
||||||
contacts = self.keys()
|
contacts = self.keys()
|
||||||
contacts.remove('bot')
|
contacts.remove('bot')
|
||||||
|
|
||||||
|
@ -82,18 +81,8 @@ class BuddyList(dict):
|
||||||
self.session.sendSync(contacts, delta = False, interactive = True)
|
self.session.sendSync(contacts, delta = False, interactive = True)
|
||||||
self.synced = 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)))
|
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 number in contacts:
|
for number in contacts:
|
||||||
buddy = self[number]
|
buddy = self[number]
|
||||||
self.backend.handleBuddyChanged(self.user, number, buddy.nick,
|
self.backend.handleBuddyChanged(self.user, number, buddy.nick,
|
||||||
|
@ -125,13 +114,14 @@ class BuddyList(dict):
|
||||||
buddy = self[number]
|
buddy = self[number]
|
||||||
buddy.update(nick, groups, image_hash)
|
buddy.update(nick, groups, image_hash)
|
||||||
else:
|
else:
|
||||||
self.session.sendSync([number], delta = True, interactive = True)
|
|
||||||
self.session.subscribePresence(number)
|
|
||||||
self.session.requestStatuses([number], success = self.onStatus)
|
|
||||||
buddy = Buddy(self.owner, number, nick, "", groups, image_hash)
|
buddy = Buddy(self.owner, number, nick, "", groups, image_hash)
|
||||||
self[number] = buddy
|
self[number] = buddy
|
||||||
self.logger.debug("Roster add: %s", buddy)
|
self.logger.debug("Roster add: %s", buddy)
|
||||||
|
self.session.sendSync([number], delta = True, interactive = True)
|
||||||
|
self.session.subscribePresence(number)
|
||||||
|
self.session.requestStatuses([number], success = self.onStatus)
|
||||||
|
if image_hash == "" or image_hash is None:
|
||||||
|
self.requestVCard(number)
|
||||||
self.updateSpectrum(buddy)
|
self.updateSpectrum(buddy)
|
||||||
return buddy
|
return buddy
|
||||||
|
|
||||||
|
@ -148,9 +138,13 @@ class BuddyList(dict):
|
||||||
timestamp = time.localtime(buddy.lastseen)
|
timestamp = time.localtime(buddy.lastseen)
|
||||||
statusmsg += time.strftime("\n Last seen: %a, %d %b %Y %H:%M:%S", timestamp)
|
statusmsg += time.strftime("\n Last seen: %a, %d %b %Y %H:%M:%S", timestamp)
|
||||||
|
|
||||||
|
iconHash = buddy.image_hash if buddy.image_hash is not None else ""
|
||||||
|
|
||||||
|
self.logger.debug("Updating buddy %s (%s) in %s, image_hash = %s",
|
||||||
|
buddy.nick, buddy.number, buddy.groups, iconHash)
|
||||||
|
self.logger.debug("Status Message: %s", statusmsg)
|
||||||
self.backend.handleBuddyChanged(self.user, buddy.number, buddy.nick,
|
self.backend.handleBuddyChanged(self.user, buddy.number, buddy.nick,
|
||||||
buddy.groups, status, statusMessage = statusmsg,
|
buddy.groups, status, statusMessage=statusmsg, iconHash=iconHash)
|
||||||
iconHash = buddy.image_hash if buddy.image_hash is not None else "")
|
|
||||||
|
|
||||||
|
|
||||||
def remove(self, number):
|
def remove(self, number):
|
||||||
|
@ -165,3 +159,34 @@ class BuddyList(dict):
|
||||||
return buddy
|
return buddy
|
||||||
except KeyError:
|
except KeyError:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def requestVCard(self, buddy, ID=None):
|
||||||
|
if buddy == self.user or buddy == self.user.split('@')[0]:
|
||||||
|
buddy = self.session.legacyName
|
||||||
|
|
||||||
|
# Get profile picture
|
||||||
|
self.logger.debug('Requesting profile picture of %s', buddy)
|
||||||
|
response = deferred.Deferred()
|
||||||
|
self.session.requestProfilePicture(buddy, onSuccess = response.run)
|
||||||
|
response = response.arg(0)
|
||||||
|
|
||||||
|
pictureData = response.pictureData()
|
||||||
|
# Send VCard
|
||||||
|
if ID != None:
|
||||||
|
call(self.logger.debug, 'Sending VCard (%s) with image id %s: %s',
|
||||||
|
ID, response.pictureId(), pictureData.then(base64.b64encode))
|
||||||
|
call(self.backend.handleVCard, self.user, ID, buddy, "", "",
|
||||||
|
pictureData)
|
||||||
|
|
||||||
|
# Send image hash
|
||||||
|
if not buddy == self.session.legacyName:
|
||||||
|
try:
|
||||||
|
obuddy = self[buddy]
|
||||||
|
nick = obuddy.nick
|
||||||
|
groups = obuddy.groups
|
||||||
|
except KeyError:
|
||||||
|
nick = ""
|
||||||
|
groups = []
|
||||||
|
image_hash = pictureData.then(utils.sha1hash)
|
||||||
|
call(self.logger.debug, 'Image hash is %s', image_hash)
|
||||||
|
call(self.update, buddy, nick, groups, image_hash)
|
||||||
|
|
25
session.py
25
session.py
|
@ -725,30 +725,7 @@ class Session(YowsupApp):
|
||||||
self.buddies.remove(buddy)
|
self.buddies.remove(buddy)
|
||||||
|
|
||||||
def requestVCard(self, buddy, ID=None):
|
def requestVCard(self, buddy, ID=None):
|
||||||
if buddy == self.user or buddy == self.user.split('@')[0]:
|
self.buddies.requestVCard(buddy, ID)
|
||||||
buddy = self.legacyName
|
|
||||||
|
|
||||||
# Get profile picture
|
|
||||||
self.logger.debug('Requesting profile picture of %s', buddy)
|
|
||||||
response = deferred.Deferred()
|
|
||||||
self.requestProfilePicture(buddy, onSuccess = response.run)
|
|
||||||
response = response.arg(0)
|
|
||||||
|
|
||||||
# Send VCard
|
|
||||||
if ID != None:
|
|
||||||
call(self.logger.debug, 'Sending VCard (%s) with image id %s',
|
|
||||||
ID, response.pictureId())
|
|
||||||
pictureData = response.pictureData()
|
|
||||||
call(self.backend.handleVCard, self.user, ID, buddy, "", "",
|
|
||||||
response.pictureData())
|
|
||||||
|
|
||||||
# Send image hash
|
|
||||||
if not buddy == self.legacyName:
|
|
||||||
obuddy = self.buddies[buddy]
|
|
||||||
image_hash = pictureData.then(utils.sha1hash)
|
|
||||||
call(self.logger.debug, 'Image hash is %s', image_hash)
|
|
||||||
call(self.updateBuddy, buddy, obuddy.nick, obuddy.groups, image_hash)
|
|
||||||
|
|
||||||
|
|
||||||
def onDlsuccess(self, path):
|
def onDlsuccess(self, path):
|
||||||
self.logger.info("Success: Image downloaded to %s", path)
|
self.logger.info("Success: Image downloaded to %s", path)
|
||||||
|
|
Loading…
Reference in a new issue