transpub/transWhat/group.py

85 lines
2.7 KiB
Python
Raw Normal View History

2019-04-25 20:41:45 +00:00
import Spectrum2
2013-05-31 18:53:21 +00:00
class Group():
def __init__(self, id, owner, subject, subjectOwner, backend, user):
2013-05-31 18:53:21 +00:00
self.id = id
self.subject = subject
2013-06-28 17:45:34 +00:00
self.subjectOwner = subjectOwner
2013-05-31 18:53:21 +00:00
self.owner = owner
self.joined = False
self.backend = backend
self.user = user
self.nick = "me"
# Participants is a number -> nickname dict
self.participants = {}
def addParticipants(self, participants, buddies, yourNumber):
"""
Adds participants to the group.
Args:
- participants: (Iterable) phone numbers of participants
- buddies: (dict) Used to get the nicknames of the participants
- yourNumber: The number you are using
"""
for jid in participants:
number = jid.split('@')[0]
try:
nick = buddies[number].nick
except KeyError:
nick = number
if number == yourNumber:
nick = self.nick
if nick == "":
nick = number
self.participants[number] = nick
def sendParticipantsToSpectrum(self, yourNumber):
for number, nick in self.participants.iteritems():
if number == self.owner:
2019-04-25 20:41:45 +00:00
flags = Spectrum2.protocol_pb2.PARTICIPANT_FLAG_MODERATOR
else:
2019-04-25 20:41:45 +00:00
flags = Spectrum2.protocol_pb2.PARTICIPANT_FLAG_NONE
if number == yourNumber:
2019-04-25 20:41:45 +00:00
flags = flags | Spectrum2.protocol_pb2.PARTICIPANT_FLAG_ME
2016-02-10 23:46:53 +00:00
try:
2019-04-25 20:41:45 +00:00
self._updateParticipant(number, flags, Spectrum2.protocol_pb2.STATUS_ONLINE,
2016-02-10 23:46:53 +00:00
self.backend.sessions[self.user].buddies[number].image_hash)
except KeyError:
2019-04-25 20:41:45 +00:00
self._updateParticipant(number, flags, Spectrum2.protocol_pb2.STATUS_ONLINE)
def removeParticipants(self, participants):
for jid in participants:
number = jid.split('@')[0]
nick = self.participants[number]
2019-04-25 20:41:45 +00:00
flags = Spectrum2.protocol_pb2.PARTICIPANT_FLAG_NONE
self._updateParticipant(number, flags, Spectrum2.protocol_pb2.STATUS_NONE)
del self.participants[number]
2016-01-06 14:33:28 +00:00
def leaveRoom(self):
for number in self.participants:
nick = self.participants[number]
2019-04-25 20:41:45 +00:00
flags = Spectrum2.protocol_pb2.PARTICIPANT_FLAG_ROOM_NOT_FOUND
self._updateParticipant(number, flags, Spectrum2.protocol_pb2.STATUS_NONE)
2016-01-06 14:33:28 +00:00
def changeNick(self, number, new_nick):
if self.participants[number] == new_nick:
return
if number == self.owner:
2019-04-25 20:41:45 +00:00
flags = Spectrum2.protocol_pb2.PARTICIPANT_FLAG_MODERATOR
else:
2019-04-25 20:41:45 +00:00
flags = Spectrum2.protocol_pb2.PARTICIPANT_FLAG_NONE
self._updateParticipant(number, flags, Spectrum2.protocol_pb2.STATUS_ONLINE, new_nick)
self.participants[number] = new_nick
2016-02-10 23:46:53 +00:00
def _updateParticipant(self, number, flags, status, imageHash = "", newNick = ""):
nick = self.participants[number]
# Notice the status message is the buddy's number
if self.joined:
self.backend.handleParticipantChanged(
self.user, nick, self.id, flags,
2016-02-10 23:46:53 +00:00
status, number, newname = newNick, iconHash = imageHash)