add support for participant VCards
This commit is contained in:
parent
bb49001ab2
commit
d6f0f11efc
|
@ -154,13 +154,14 @@ class SpectrumBackend:
|
||||||
self.send(message);
|
self.send(message);
|
||||||
|
|
||||||
|
|
||||||
def handleParticipantChanged(self, user, nickname, room, flags, status, statusMessage = "", newname = ""):
|
def handleParticipantChanged(self, user, nickname, room, flags, status, statusMessage = "", newname = "", iconHash = ""):
|
||||||
d = protocol_pb2.Participant()
|
d = protocol_pb2.Participant()
|
||||||
d.userName = user
|
d.userName = user
|
||||||
d.nickname = nickname
|
d.nickname = nickname
|
||||||
d.room = room
|
d.room = room
|
||||||
d.flag = flags
|
d.flag = flags
|
||||||
d.newname = newname
|
d.newname = newname
|
||||||
|
d.iconHash = iconHash
|
||||||
d.status = status
|
d.status = status
|
||||||
d.statusMessage = statusMessage
|
d.statusMessage = statusMessage
|
||||||
|
|
||||||
|
|
|
@ -110,6 +110,7 @@ message Participant {
|
||||||
required StatusType status = 5;
|
required StatusType status = 5;
|
||||||
optional string statusMessage = 6;
|
optional string statusMessage = 6;
|
||||||
optional string newname = 7;
|
optional string newname = 7;
|
||||||
|
optional string iconHash = 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
message VCard {
|
message VCard {
|
||||||
|
|
File diff suppressed because one or more lines are too long
30
buddy.py
30
buddy.py
|
@ -172,15 +172,29 @@ class BuddyList(dict):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def requestVCard(self, buddy, ID=None):
|
def requestVCard(self, buddy, ID=None):
|
||||||
if buddy == self.user or buddy == self.user.split('@')[0]:
|
if "/" in buddy:
|
||||||
buddy = self.session.legacyName
|
room, nick = buddy.split("/")
|
||||||
|
group = self.session.groups[room]
|
||||||
|
buddynr = None
|
||||||
|
for othernumber, othernick in group.participants.iteritems():
|
||||||
|
if othernick == nick:
|
||||||
|
buddynr = othernumber
|
||||||
|
break
|
||||||
|
if buddynr is None:
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
buddynr = buddy
|
||||||
|
|
||||||
|
|
||||||
|
if buddynr == self.user or buddynr == self.user.split('@')[0]:
|
||||||
|
buddynr = self.session.legacyName
|
||||||
|
|
||||||
# Get profile picture
|
# Get profile picture
|
||||||
self.logger.debug('Requesting profile picture of %s', buddy)
|
self.logger.debug('Requesting profile picture of %s', buddynr)
|
||||||
response = deferred.Deferred()
|
response = deferred.Deferred()
|
||||||
# Error probably means image doesn't exist
|
# Error probably means image doesn't exist
|
||||||
error = deferred.Deferred()
|
error = deferred.Deferred()
|
||||||
self.session.requestProfilePicture(buddy, onSuccess=response.run,
|
self.session.requestProfilePicture(buddynr, onSuccess=response.run,
|
||||||
onFailure=error.run)
|
onFailure=error.run)
|
||||||
response = response.arg(0)
|
response = response.arg(0)
|
||||||
|
|
||||||
|
@ -196,9 +210,9 @@ class BuddyList(dict):
|
||||||
error.when(self.backend.handleVCard, self.user, ID, buddy, "", "", "")
|
error.when(self.backend.handleVCard, self.user, ID, buddy, "", "", "")
|
||||||
|
|
||||||
# Send image hash
|
# Send image hash
|
||||||
if not buddy == self.session.legacyName:
|
if not buddynr == self.session.legacyName:
|
||||||
try:
|
try:
|
||||||
obuddy = self[buddy]
|
obuddy = self[buddynr]
|
||||||
nick = obuddy.nick
|
nick = obuddy.nick
|
||||||
groups = obuddy.groups
|
groups = obuddy.groups
|
||||||
except KeyError:
|
except KeyError:
|
||||||
|
@ -206,10 +220,10 @@ class BuddyList(dict):
|
||||||
groups = []
|
groups = []
|
||||||
image_hash = pictureData.then(utils.sha1hash)
|
image_hash = pictureData.then(utils.sha1hash)
|
||||||
call(self.logger.debug, 'Image hash is %s', image_hash)
|
call(self.logger.debug, 'Image hash is %s', image_hash)
|
||||||
call(self.update, buddy, nick, groups, image_hash)
|
call(self.update, buddynr, nick, groups, image_hash)
|
||||||
# No image
|
# No image
|
||||||
error.when(self.logger.debug, 'No image')
|
error.when(self.logger.debug, 'No image')
|
||||||
error.when(self.update, buddy, nick, groups, '')
|
error.when(self.update, buddynr, nick, groups, '')
|
||||||
|
|
||||||
def refresh(self, number):
|
def refresh(self, number):
|
||||||
self.session.unsubscribePresence(number)
|
self.session.unsubscribePresence(number)
|
||||||
|
|
8
group.py
8
group.py
|
@ -68,6 +68,10 @@ class Group():
|
||||||
if number == yourNumber:
|
if number == yourNumber:
|
||||||
flags = flags | protocol_pb2.PARTICIPANT_FLAG_ME
|
flags = flags | protocol_pb2.PARTICIPANT_FLAG_ME
|
||||||
|
|
||||||
|
try:
|
||||||
|
self._updateParticipant(number, flags, protocol_pb2.STATUS_ONLINE,
|
||||||
|
self.backend.sessions[self.user].buddies[number].image_hash)
|
||||||
|
except KeyError:
|
||||||
self._updateParticipant(number, flags, protocol_pb2.STATUS_ONLINE)
|
self._updateParticipant(number, flags, protocol_pb2.STATUS_ONLINE)
|
||||||
|
|
||||||
def removeParticipants(self, participants):
|
def removeParticipants(self, participants):
|
||||||
|
@ -94,10 +98,10 @@ class Group():
|
||||||
self._updateParticipant(number, flags, protocol_pb2.STATUS_ONLINE, new_nick)
|
self._updateParticipant(number, flags, protocol_pb2.STATUS_ONLINE, new_nick)
|
||||||
self.participants[number] = new_nick
|
self.participants[number] = new_nick
|
||||||
|
|
||||||
def _updateParticipant(self, number, flags, status, newNick = ""):
|
def _updateParticipant(self, number, flags, status, imageHash = "", newNick = ""):
|
||||||
nick = self.participants[number]
|
nick = self.participants[number]
|
||||||
# Notice the status message is the buddy's number
|
# Notice the status message is the buddy's number
|
||||||
if self.joined:
|
if self.joined:
|
||||||
self.backend.handleParticipantChanged(
|
self.backend.handleParticipantChanged(
|
||||||
self.user, nick, self.id, flags,
|
self.user, nick, self.id, flags,
|
||||||
status, number, newname = newNick)
|
status, number, newname = newNick, iconHash = imageHash)
|
||||||
|
|
Loading…
Reference in a new issue