130 lines
4.4 KiB
Python
130 lines
4.4 KiB
Python
from contacts import contact
|
|
from contacts.contact_menu import GroupMenuGenerator
|
|
import utils.util as util
|
|
from groups.group_peer import GroupChatPeer
|
|
from wrapper import toxcore_enums_and_consts as constants
|
|
from common.tox_save import ToxSave
|
|
from groups.group_ban import GroupBan
|
|
|
|
|
|
class GroupChat(contact.Contact, ToxSave):
|
|
|
|
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)
|
|
|
|
self._is_private = is_private
|
|
self._password = str()
|
|
self._peers_limit = 512
|
|
self._peers = []
|
|
self._add_self_to_gc()
|
|
|
|
def remove_invalid_unsent_files(self):
|
|
pass
|
|
|
|
def get_context_menu_generator(self):
|
|
return GroupMenuGenerator(self)
|
|
|
|
# -----------------------------------------------------------------------------------------------------------------
|
|
# 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)
|
|
|
|
# -----------------------------------------------------------------------------------------------------------------
|
|
# Peers methods
|
|
# -----------------------------------------------------------------------------------------------------------------
|
|
|
|
def get_self_peer(self):
|
|
return self._peers[0]
|
|
|
|
def get_self_name(self):
|
|
return self._peers[0].name
|
|
|
|
def get_self_role(self):
|
|
return self._peers[0].role
|
|
|
|
def is_self_moderator_or_founder(self):
|
|
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']
|
|
|
|
def add_peer(self, peer_id, is_current_user=False):
|
|
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),
|
|
self._tox.group_peer_get_public_key(self._number, peer_id),
|
|
is_current_user)
|
|
self._peers.append(peer)
|
|
|
|
def remove_peer(self, peer_id):
|
|
peer = self.get_peer_by_id(peer_id)
|
|
self._peers.remove(peer)
|
|
|
|
def get_peer_by_id(self, peer_id):
|
|
peers = list(filter(lambda p: p.id == peer_id, self._peers))
|
|
|
|
return peers[0]
|
|
|
|
def get_peer_by_public_key(self, public_key):
|
|
peers = list(filter(lambda p: p.public_key == public_key, self._peers))
|
|
|
|
return peers[0]
|
|
|
|
def remove_all_peers_except_self(self):
|
|
self._peers = self._peers[:1]
|
|
|
|
def get_peers(self):
|
|
return self._peers[:]
|
|
|
|
peers = property(get_peers)
|
|
|
|
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)
|
|
|
|
# -----------------------------------------------------------------------------------------------------------------
|
|
# Private methods
|
|
# -----------------------------------------------------------------------------------------------------------------
|
|
|
|
@staticmethod
|
|
def _get_default_avatar_path():
|
|
return util.join_path(util.get_images_directory(), 'group.png')
|
|
|
|
def _add_self_to_gc(self):
|
|
peer_id = self._tox.group_self_get_peer_id(self._number)
|
|
self.add_peer(peer_id, True)
|