toxygen/toxygen/contacts/group_chat.py

138 lines
4.6 KiB
Python
Raw Normal View History

from contacts import contact
2018-05-19 15:08:25 +00:00
from contacts.contact_menu import GroupMenuGenerator
2018-05-10 17:47:34 +00:00
import utils.util as util
2018-05-19 15:08:25 +00:00
from groups.group_peer import GroupChatPeer
from wrapper import toxcore_enums_and_consts as constants
from common.tox_save import ToxSave
2018-08-05 18:05:18 +00:00
from groups.group_ban import GroupBan
2017-07-16 19:51:20 +00:00
class GroupChat(contact.Contact, ToxSave):
2017-07-16 19:51:20 +00:00
2018-07-22 21:50:53 +00:00
def __init__(self, tox, profile_manager, message_getter, number, name, status_message, widget, tox_id, is_private):
super().__init__(profile_manager, message_getter, number, name, status_message, widget, tox_id)
ToxSave.__init__(self, tox)
2018-08-05 13:33:51 +00:00
2018-07-22 21:50:53 +00:00
self._is_private = is_private
2018-08-05 13:33:51 +00:00
self._password = str()
self._peers_limit = 512
2018-05-19 13:00:28 +00:00
self._peers = []
self._add_self_to_gc()
2017-07-16 19:51:20 +00:00
2017-07-17 18:53:35 +00:00
def remove_invalid_unsent_files(self):
pass
2017-07-18 18:36:14 +00:00
2018-05-19 15:08:25 +00:00
def get_context_menu_generator(self):
return GroupMenuGenerator(self)
2017-07-18 20:36:40 +00:00
2018-07-22 21:50:53 +00:00
# -----------------------------------------------------------------------------------------------------------------
# Properties
# -----------------------------------------------------------------------------------------------------------------
def get_is_private(self):
return self._is_private
def set_is_private(self, is_private):
self._is_private = is_private
is_private = property(get_is_private, set_is_private)
def get_password(self):
return self._password
def set_password(self, password):
self._password = password
password = property(get_password, set_password)
def get_peers_limit(self):
return self._peers_limit
def set_peers_limit(self, peers_limit):
self._peers_limit = peers_limit
peers_limit = property(get_peers_limit, set_peers_limit)
2018-07-22 21:50:53 +00:00
2018-05-19 15:08:25 +00:00
# -----------------------------------------------------------------------------------------------------------------
# Peers methods
# -----------------------------------------------------------------------------------------------------------------
2018-05-19 13:00:28 +00:00
2018-07-22 21:35:52 +00:00
def get_self_peer(self):
return self._peers[0]
2018-05-19 13:00:28 +00:00
def get_self_name(self):
return self._peers[0].name
2018-07-21 17:25:10 +00:00
def get_self_role(self):
return self._peers[0].role
def is_self_moderator_or_founder(self):
2018-07-21 17:25:10 +00:00
return self.get_self_role() <= constants.TOX_GROUP_ROLE['MODERATOR']
def is_self_founder(self):
return self.get_self_role() == constants.TOX_GROUP_ROLE['FOUNDER']
2018-05-20 10:33:56 +00:00
def add_peer(self, peer_id, is_current_user=False):
2018-05-19 15:08:25 +00:00
peer = GroupChatPeer(peer_id,
self._tox.group_peer_get_name(self._number, peer_id),
self._tox.group_peer_get_status(self._number, peer_id),
self._tox.group_peer_get_role(self._number, peer_id),
2018-05-20 10:33:56 +00:00
self._tox.group_peer_get_public_key(self._number, peer_id),
is_current_user)
2018-05-19 15:08:25 +00:00
self._peers.append(peer)
def remove_peer(self, peer_id):
2018-08-23 13:02:29 +00:00
if peer_id == self.get_self_peer().id: # we were kicked or banned
self.remove_all_peers_except_self()
else:
peer = self.get_peer_by_id(peer_id)
self._peers.remove(peer)
def get_peer_by_id(self, peer_id):
2018-05-19 15:08:25 +00:00
peers = list(filter(lambda p: p.id == peer_id, self._peers))
return peers[0]
2018-07-22 09:59:52 +00:00
def get_peer_by_public_key(self, public_key):
peers = list(filter(lambda p: p.public_key == public_key, self._peers))
return peers[0]
2018-07-21 14:16:01 +00:00
def remove_all_peers_except_self(self):
self._peers = self._peers[:1]
2018-08-22 10:36:22 +00:00
def get_peers_names(self):
peers_names = map(lambda p: p.name, self._peers)
return list(peers_names)
2018-05-20 10:33:56 +00:00
def get_peers(self):
return self._peers[:]
peers = property(get_peers)
2018-08-05 18:05:18 +00:00
def get_bans(self):
ban_ids = self._tox.group_ban_get_list(self._number)
bans = []
for ban_id in ban_ids:
ban = GroupBan(ban_id,
self._tox.group_ban_get_target(self._number, ban_id),
self._tox.group_ban_get_time_set(self._number, ban_id))
bans.append(ban)
return bans
bans = property(get_bans)
2018-05-19 13:00:28 +00:00
# -----------------------------------------------------------------------------------------------------------------
# Private methods
# -----------------------------------------------------------------------------------------------------------------
@staticmethod
def _get_default_avatar_path():
return util.join_path(util.get_images_directory(), 'group.png')
def _add_self_to_gc(self):
2018-05-19 15:08:25 +00:00
peer_id = self._tox.group_self_get_peer_id(self._number)
2018-05-20 10:33:56 +00:00
self.add_peer(peer_id, True)