peers - more callback and peers list refactoring
This commit is contained in:
parent
b8fa8df41a
commit
c6b67452ed
@ -144,6 +144,9 @@ class ContactsManager(ToxSave):
|
|||||||
def is_active_a_friend(self):
|
def is_active_a_friend(self):
|
||||||
return type(self.get_curr_contact()) is Friend
|
return type(self.get_curr_contact()) is Friend
|
||||||
|
|
||||||
|
def is_active_a_group(self):
|
||||||
|
return type(self.get_curr_contact()) is GroupChat
|
||||||
|
|
||||||
# -----------------------------------------------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------------------------------------------
|
||||||
# Filtration
|
# Filtration
|
||||||
# -----------------------------------------------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------------------------------------------
|
||||||
|
@ -41,6 +41,10 @@ class GroupChat(contact.Contact, ToxSave):
|
|||||||
is_current_user)
|
is_current_user)
|
||||||
self._peers.append(peer)
|
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):
|
def get_peer_by_id(self, peer_id):
|
||||||
peers = list(filter(lambda p: p.id == peer_id, self._peers))
|
peers = list(filter(lambda p: p.id == peer_id, self._peers))
|
||||||
|
|
||||||
|
@ -68,6 +68,8 @@ class GroupsService(tox_save.ToxSave):
|
|||||||
# -----------------------------------------------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
def generate_peers_list(self):
|
def generate_peers_list(self):
|
||||||
|
if not self._contacts_manager.is_active_a_group():
|
||||||
|
return
|
||||||
group = self._contacts_manager.get_curr_contact()
|
group = self._contacts_manager.get_curr_contact()
|
||||||
PeersListGenerator().generate(group.peers, self, self._peers_list_widget, group.tox_id)
|
PeersListGenerator().generate(group.peers, self, self._peers_list_widget, group.tox_id)
|
||||||
|
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
from PyQt5 import QtWidgets, QtCore
|
|
||||||
from ui.group_peers_list import PeerItem, PeerTypeItem
|
from ui.group_peers_list import PeerItem, PeerTypeItem
|
||||||
import utils.ui as util_ui
|
|
||||||
from wrapper.toxcore_enums_and_consts import *
|
from wrapper.toxcore_enums_and_consts import *
|
||||||
from ui.widgets import *
|
from ui.widgets import *
|
||||||
|
|
||||||
@ -35,18 +33,16 @@ class PeerListBuilder:
|
|||||||
|
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def build(self, parent):
|
def build(self, list_widget):
|
||||||
parent.clear()
|
list_widget.clear()
|
||||||
|
|
||||||
for i in range(self._index):
|
for i in range(self._index):
|
||||||
if i in self._peers:
|
if i in self._peers:
|
||||||
peer = self._peers[i]
|
peer = self._peers[i]
|
||||||
self._add_peer_item(peer, parent)
|
self._add_peer_item(peer, list_widget)
|
||||||
else:
|
else:
|
||||||
title = self._titles[i]
|
title = self._titles[i]
|
||||||
self._add_peer_type_item(title, parent)
|
self._add_peer_type_item(title, list_widget)
|
||||||
|
|
||||||
return parent
|
|
||||||
|
|
||||||
def _add_peer_item(self, peer, parent):
|
def _add_peer_item(self, peer, parent):
|
||||||
item = PeerItem(peer, self._handler, parent.width(), parent)
|
item = PeerItem(peer, self._handler, parent.width(), parent)
|
||||||
@ -75,7 +71,7 @@ class PeerListBuilder:
|
|||||||
class PeersListGenerator:
|
class PeersListGenerator:
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def generate(peers_list, groups_service, parent, chat_id):
|
def generate(peers_list, groups_service, list_widget, chat_id):
|
||||||
admin_title = util_ui.tr('Administrator')
|
admin_title = util_ui.tr('Administrator')
|
||||||
moderators_title = util_ui.tr('Moderators')
|
moderators_title = util_ui.tr('Moderators')
|
||||||
users_title = util_ui.tr('Users')
|
users_title = util_ui.tr('Users')
|
||||||
@ -87,15 +83,22 @@ class PeersListGenerator:
|
|||||||
observers = list(filter(lambda p: p.role == TOX_GROUP_ROLE['OBSERVER'], peers_list))
|
observers = list(filter(lambda p: p.role == TOX_GROUP_ROLE['OBSERVER'], peers_list))
|
||||||
|
|
||||||
builder = (PeerListBuilder()
|
builder = (PeerListBuilder()
|
||||||
.with_click_handler(lambda peer_id: groups_service.peer_selected(chat_id, peer_id))
|
.with_click_handler(lambda peer_id: groups_service.peer_selected(chat_id, peer_id)))
|
||||||
.with_title(admin_title)
|
if len(admins):
|
||||||
.with_peers(admins)
|
(builder
|
||||||
.with_title(moderators_title)
|
.with_title(admin_title)
|
||||||
.with_peers(moderators)
|
.with_peers(admins))
|
||||||
.with_title(users_title)
|
if len(moderators):
|
||||||
.with_peers(users)
|
(builder
|
||||||
.with_title(observers_title)
|
.with_title(moderators_title)
|
||||||
.with_peers(observers)
|
.with_peers(moderators))
|
||||||
)
|
if len(users):
|
||||||
|
(builder
|
||||||
|
.with_title(users_title)
|
||||||
|
.with_peers(users))
|
||||||
|
if len(observers):
|
||||||
|
(builder
|
||||||
|
.with_title(observers_title)
|
||||||
|
.with_peers(observers))
|
||||||
|
|
||||||
return builder.build(parent)
|
builder.build(list_widget)
|
||||||
|
@ -401,28 +401,40 @@ def group_self_join(contacts_provider, groups_service):
|
|||||||
return wrapped
|
return wrapped
|
||||||
|
|
||||||
|
|
||||||
def group_peer_join(contacts_provider):
|
def group_peer_join(contacts_provider, groups_service):
|
||||||
def wrapped(tox, group_number, peer_id, user_data):
|
def wrapped(tox, group_number, peer_id, user_data):
|
||||||
group = contacts_provider.get_group_by_number(group_number)
|
group = contacts_provider.get_group_by_number(group_number)
|
||||||
group.add_peer(peer_id)
|
group.add_peer(peer_id)
|
||||||
|
invoke_in_main_thread(groups_service.generate_peers_list)
|
||||||
|
|
||||||
return wrapped
|
return wrapped
|
||||||
|
|
||||||
|
|
||||||
def group_peer_name(contacts_provider):
|
def group_peer_exit(contacts_provider, groups_service):
|
||||||
|
def wrapped(tox, group_number, peer_id, message, length, user_data):
|
||||||
|
group = contacts_provider.get_group_by_number(group_number)
|
||||||
|
group.remove_peer(peer_id)
|
||||||
|
invoke_in_main_thread(groups_service.generate_peers_list)
|
||||||
|
|
||||||
|
return wrapped
|
||||||
|
|
||||||
|
|
||||||
|
def group_peer_name(contacts_provider, groups_service):
|
||||||
def wrapped(tox, group_number, peer_id, name, length, user_data):
|
def wrapped(tox, group_number, peer_id, name, length, user_data):
|
||||||
group = contacts_provider.get_group_by_number(group_number)
|
group = contacts_provider.get_group_by_number(group_number)
|
||||||
peer = group.get_peer_by_id(peer_id)
|
peer = group.get_peer_by_id(peer_id)
|
||||||
peer.name = str(name[:length])
|
peer.name = str(name[:length])
|
||||||
|
invoke_in_main_thread(groups_service.generate_peers_list)
|
||||||
|
|
||||||
return wrapped
|
return wrapped
|
||||||
|
|
||||||
|
|
||||||
def group_peer_status(contacts_provider):
|
def group_peer_status(contacts_provider, groups_service):
|
||||||
def wrapped(tox, group_number, peer_id, peer_status, user_data):
|
def wrapped(tox, group_number, peer_id, peer_status, user_data):
|
||||||
group = contacts_provider.get_group_by_number(group_number)
|
group = contacts_provider.get_group_by_number(group_number)
|
||||||
peer = group.get_peer_by_id(peer_id)
|
peer = group.get_peer_by_id(peer_id)
|
||||||
peer.status = peer_status
|
peer.status = peer_status
|
||||||
|
invoke_in_main_thread(groups_service.generate_peers_list)
|
||||||
|
|
||||||
return wrapped
|
return wrapped
|
||||||
|
|
||||||
@ -456,6 +468,8 @@ def init_callbacks(tox, profile, settings, plugin_loader, contacts_manager,
|
|||||||
:param main_window: MainWindow instance
|
:param main_window: MainWindow instance
|
||||||
:param tray: tray (for notifications)
|
:param tray: tray (for notifications)
|
||||||
:param messenger: Messenger instance
|
:param messenger: Messenger instance
|
||||||
|
:param groups_service: GroupsService instance
|
||||||
|
:param contacts_provider: ContactsProvider instance
|
||||||
"""
|
"""
|
||||||
# self callbacks
|
# self callbacks
|
||||||
tox.callback_self_connection_status(self_connection_status(tox, profile), 0)
|
tox.callback_self_connection_status(self_connection_status(tox, profile), 0)
|
||||||
@ -493,7 +507,8 @@ def init_callbacks(tox, profile, settings, plugin_loader, contacts_manager,
|
|||||||
tox.callback_group_message(group_message(main_window, tray, tox, messenger, settings, profile), 0)
|
tox.callback_group_message(group_message(main_window, tray, tox, messenger, settings, profile), 0)
|
||||||
tox.callback_group_invite(group_invite(groups_service), 0)
|
tox.callback_group_invite(group_invite(groups_service), 0)
|
||||||
tox.callback_group_self_join(group_self_join(contacts_provider, groups_service), 0)
|
tox.callback_group_self_join(group_self_join(contacts_provider, groups_service), 0)
|
||||||
tox.callback_group_peer_join(group_peer_join(contacts_provider), 0)
|
tox.callback_group_peer_join(group_peer_join(contacts_provider, groups_service), 0)
|
||||||
tox.callback_group_peer_name(group_peer_name(contacts_provider), 0)
|
tox.callback_group_peer_exit(group_peer_exit(contacts_provider, groups_service), 0)
|
||||||
tox.callback_group_peer_status(group_peer_status(contacts_provider), 0)
|
tox.callback_group_peer_name(group_peer_name(contacts_provider, groups_service), 0)
|
||||||
|
tox.callback_group_peer_status(group_peer_status(contacts_provider, groups_service), 0)
|
||||||
tox.callback_group_topic(group_topic(contacts_provider), 0)
|
tox.callback_group_topic(group_topic(contacts_provider), 0)
|
||||||
|
@ -435,7 +435,6 @@ class MainWindow(QtWidgets.QMainWindow):
|
|||||||
self.account_name.setGeometry(QtCore.QRect(100, 15, self.width() - 560, 25))
|
self.account_name.setGeometry(QtCore.QRect(100, 15, self.width() - 560, 25))
|
||||||
self.account_status.setGeometry(QtCore.QRect(100, 35, self.width() - 560, 25))
|
self.account_status.setGeometry(QtCore.QRect(100, 35, self.width() - 560, 25))
|
||||||
self.messageEdit.setFocus()
|
self.messageEdit.setFocus()
|
||||||
self._contacts_manager.update()
|
|
||||||
|
|
||||||
def keyPressEvent(self, event):
|
def keyPressEvent(self, event):
|
||||||
key, modifiers = event.key(), event.modifiers()
|
key, modifiers = event.key(), event.modifiers()
|
||||||
|
Loading…
Reference in New Issue
Block a user