Philipp Hörist pushed to branch master at gajim / gajim
Commits:
-
13b61fe8
by lovetox at 2022-08-12T21:28:46+02:00
-
3aa0c042
by lovetox at 2022-08-12T21:42:15+02:00
-
c29838b7
by lovetox at 2022-08-12T22:06:28+02:00
-
10ee7c7b
by lovetox at 2022-08-12T22:28:23+02:00
9 changed files:
- gajim/common/events.py
- gajim/gtk/app_page.py
- gajim/gtk/chat_list.py
- gajim/gtk/chat_list_stack.py
- gajim/gtk/chat_page.py
- gajim/gtk/chat_stack.py
- gajim/gtk/main.py
- gajim/gtk/main_stack.py
- gajim/gtk/message_actions_box.py
Changes:
| ... | ... | @@ -44,20 +44,17 @@ |
| 44 | 44 | from gajim.plugins.pluginmanager import PluginManifest
|
| 45 | 45 | |
| 46 | 46 | |
| 47 | -MainEventT = Union['PresenceReceived',
|
|
| 48 | - 'MessageSent',
|
|
| 49 | - 'MessageReceived',
|
|
| 50 | - 'MamMessageReceived',
|
|
| 51 | - 'GcMessageReceived',
|
|
| 52 | - 'MessageUpdated',
|
|
| 53 | - 'ReceiptReceived',
|
|
| 54 | - 'DisplayedReceived',
|
|
| 55 | - 'MessageError',
|
|
| 56 | - 'MucDiscoUpdate',
|
|
| 57 | - 'JingleConnectedReceived',
|
|
| 58 | - 'JingleDisconnectedReceived',
|
|
| 59 | - 'JingleErrorReceived',
|
|
| 60 | - 'FileRequestSent']
|
|
| 47 | +ChatListEventT = Union[
|
|
| 48 | + 'MessageReceived',
|
|
| 49 | + 'MamMessageReceived',
|
|
| 50 | + 'GcMessageReceived',
|
|
| 51 | + 'MessageUpdated',
|
|
| 52 | + 'MessageModerated',
|
|
| 53 | + 'PresenceReceived',
|
|
| 54 | + 'MessageSent',
|
|
| 55 | + 'JingleRequestReceived',
|
|
| 56 | + 'FileRequestReceivedEvent'
|
|
| 57 | +]
|
|
| 61 | 58 | |
| 62 | 59 | |
| 63 | 60 | @dataclass
|
| ... | ... | @@ -21,7 +21,6 @@ |
| 21 | 21 | from gi.repository import Gtk
|
| 22 | 22 | |
| 23 | 23 | from gajim.common import app
|
| 24 | -from gajim.common.events import ApplicationEvent
|
|
| 25 | 24 | from gajim.common.helpers import open_uri
|
| 26 | 25 | from gajim.common.i18n import _
|
| 27 | 26 | from gajim.plugins.pluginmanager import PluginManifest
|
| ... | ... | @@ -91,9 +90,6 @@ def remove_app_message(self) -> None: |
| 91 | 90 | self._unread_count -= 1
|
| 92 | 91 | self.emit('unread-count-changed', self._unread_count)
|
| 93 | 92 | |
| 94 | - def process_event(self, event: ApplicationEvent) -> None:
|
|
| 95 | - pass
|
|
| 96 | - |
|
| 97 | 93 | |
| 98 | 94 | class AppMessageListBox(Gtk.ListBox):
|
| 99 | 95 | def __init__(self) -> None:
|
| ... | ... | @@ -366,7 +366,7 @@ def update_time(self) -> None: |
| 366 | 366 | for _key, row in self._chats.items():
|
| 367 | 367 | row.update_time()
|
| 368 | 368 | |
| 369 | - def process_event(self, event: events.ApplicationEvent) -> None:
|
|
| 369 | + def process_event(self, event: events.ChatListEventT) -> None:
|
|
| 370 | 370 | if isinstance(event, (events.MessageReceived,
|
| 371 | 371 | events.MamMessageReceived,
|
| 372 | 372 | events.GcMessageReceived)):
|
| ... | ... | @@ -381,7 +381,7 @@ def process_event(self, event: events.ApplicationEvent) -> None: |
| 381 | 381 | self._on_message_sent(event)
|
| 382 | 382 | elif isinstance(event, events.JingleRequestReceived):
|
| 383 | 383 | self._on_jingle_request_received(event)
|
| 384 | - elif isinstance(event, events.FileRequestReceivedEvent):
|
|
| 384 | + elif isinstance(event, events.FileRequestReceivedEvent): # pyright: ignore [reportUnnecessaryIsInstance] # noqa
|
|
| 385 | 385 | self._on_file_request_received(event)
|
| 386 | 386 | else:
|
| 387 | 387 | log.warning('Unhandled Event: %s', event.name)
|
| ... | ... | @@ -27,6 +27,8 @@ |
| 27 | 27 | |
| 28 | 28 | from gajim.common import app
|
| 29 | 29 | from gajim.common import events
|
| 30 | +from gajim.common import ged
|
|
| 31 | +from gajim.common.ged import EventHelper
|
|
| 30 | 32 | from gajim.common.i18n import _
|
| 31 | 33 | |
| 32 | 34 | from . import structs
|
| ... | ... | @@ -37,20 +39,7 @@ |
| 37 | 39 | from .dialogs import ConfirmationCheckDialog
|
| 38 | 40 | |
| 39 | 41 | |
| 40 | -HANDLED_EVENTS = (
|
|
| 41 | - events.MessageReceived,
|
|
| 42 | - events.MamMessageReceived,
|
|
| 43 | - events.GcMessageReceived,
|
|
| 44 | - events.MessageUpdated,
|
|
| 45 | - events.MessageModerated,
|
|
| 46 | - events.PresenceReceived,
|
|
| 47 | - events.MessageSent,
|
|
| 48 | - events.JingleRequestReceived,
|
|
| 49 | - events.FileRequestReceivedEvent
|
|
| 50 | -)
|
|
| 51 | - |
|
| 52 | - |
|
| 53 | -class ChatListStack(Gtk.Stack):
|
|
| 42 | +class ChatListStack(Gtk.Stack, EventHelper):
|
|
| 54 | 43 | |
| 55 | 44 | __gsignals__ = {
|
| 56 | 45 | 'unread-count-changed': (GObject.SignalFlags.RUN_LAST,
|
| ... | ... | @@ -72,6 +61,7 @@ def __init__(self, |
| 72 | 61 | search_entry: Gtk.SearchEntry
|
| 73 | 62 | ) -> None:
|
| 74 | 63 | Gtk.Stack.__init__(self)
|
| 64 | + EventHelper.__init__(self)
|
|
| 75 | 65 | self.set_hexpand(True)
|
| 76 | 66 | self.set_vexpand(True)
|
| 77 | 67 | self.set_vhomogeneous(False)
|
| ... | ... | @@ -89,6 +79,18 @@ def __init__(self, |
| 89 | 79 | self._add_actions()
|
| 90 | 80 | self.show_all()
|
| 91 | 81 | |
| 82 | + self.register_events([
|
|
| 83 | + ('message-received', ged.GUI2, self._on_event),
|
|
| 84 | + ('mam-message-received', ged.GUI2, self._on_event),
|
|
| 85 | + ('gc-message-received', ged.GUI2, self._on_event),
|
|
| 86 | + ('message-updated', ged.GUI2, self._on_event),
|
|
| 87 | + ('message-moderated', ged.GUI2, self._on_event),
|
|
| 88 | + ('presence-received', ged.GUI2, self._on_event),
|
|
| 89 | + ('message-sent', ged.GUI2, self._on_event),
|
|
| 90 | + ('file-request-received', ged.GUI2, self._on_event),
|
|
| 91 | + ('jingle-request-received', ged.GUI2, self._on_event),
|
|
| 92 | + ])
|
|
| 93 | + |
|
| 92 | 94 | def _add_actions(self) -> None:
|
| 93 | 95 | actions = [
|
| 94 | 96 | ('toggle-chat-pinned', 'a{sv}', self._toggle_chat_pinned),
|
| ... | ... | @@ -332,10 +334,7 @@ def mark_as_read(self, account: str, jid: JID) -> None: |
| 332 | 334 | for chat_list in self._chat_lists.values():
|
| 333 | 335 | chat_list.mark_as_read(account, jid)
|
| 334 | 336 | |
| 335 | - def process_event(self, event: events.ApplicationEvent) -> None:
|
|
| 336 | - if not isinstance(event, HANDLED_EVENTS):
|
|
| 337 | - return
|
|
| 338 | - |
|
| 337 | + def _on_event(self, event: events.ChatListEventT) -> None:
|
|
| 339 | 338 | jid = JID.from_string(event.jid)
|
| 340 | 339 | |
| 341 | 340 | chat_list = self.find_chat(event.account, jid)
|
| ... | ... | @@ -26,7 +26,6 @@ |
| 26 | 26 | from nbxmpp import JID
|
| 27 | 27 | |
| 28 | 28 | from gajim.common import app
|
| 29 | -from gajim.common.events import ApplicationEvent
|
|
| 30 | 29 | |
| 31 | 30 | from .builder import get_builder
|
| 32 | 31 | from .chat_filter import ChatFilter
|
| ... | ... | @@ -182,10 +181,6 @@ def _on_chat_list_changed(self, |
| 182 | 181 | self._ui.workspace_label.set_text(name)
|
| 183 | 182 | self._ui.search_entry.set_text('')
|
| 184 | 183 | |
| 185 | - def process_event(self, event: ApplicationEvent):
|
|
| 186 | - self._chat_stack.process_event(event)
|
|
| 187 | - self._chat_list_stack.process_event(event)
|
|
| 188 | - |
|
| 189 | 184 | def add_chat_list(self, workspace_id: str) -> None:
|
| 190 | 185 | self._chat_list_stack.add_chat_list(workspace_id)
|
| 191 | 186 |
| ... | ... | @@ -14,7 +14,6 @@ |
| 14 | 14 | |
| 15 | 15 | from __future__ import annotations
|
| 16 | 16 | |
| 17 | -from typing import Any
|
|
| 18 | 17 | from typing import Optional
|
| 19 | 18 | |
| 20 | 19 | import sys
|
| ... | ... | @@ -139,6 +138,11 @@ def __init__(self): |
| 139 | 138 | self._connect_actions()
|
| 140 | 139 | self.show_all()
|
| 141 | 140 | |
| 141 | + self.register_events([
|
|
| 142 | + ('message-received', 85, self._on_message_received),
|
|
| 143 | + ('muc-disco-update', 85, self._on_muc_disco_update),
|
|
| 144 | + ])
|
|
| 145 | + |
|
| 142 | 146 | def _get_current_contact(self) -> ChatContactT:
|
| 143 | 147 | assert self._current_contact is not None
|
| 144 | 148 | return self._current_contact
|
| ... | ... | @@ -305,14 +309,13 @@ def _on_user_affiliation_changed(self, |
| 305 | 309 | self._update_group_chat_actions(contact)
|
| 306 | 310 | |
| 307 | 311 | def _on_muc_disco_update(self, event: events.MucDiscoUpdate) -> None:
|
| 308 | - if self._current_contact is None:
|
|
| 312 | + if not isinstance(self._current_contact, GroupchatContact):
|
|
| 309 | 313 | return
|
| 310 | 314 | |
| 311 | 315 | if event.jid != self._current_contact.jid:
|
| 312 | 316 | return
|
| 313 | 317 | |
| 314 | - if isinstance(self._current_contact, GroupchatContact):
|
|
| 315 | - self._update_group_chat_actions(self._current_contact)
|
|
| 318 | + self._update_group_chat_actions(self._current_contact)
|
|
| 316 | 319 | |
| 317 | 320 | def _on_message_received(self, event: events.MessageReceived) -> None:
|
| 318 | 321 | if not event.msgtxt or event.properties.is_sent_carbon:
|
| ... | ... | @@ -725,15 +728,6 @@ def clear(self) -> None: |
| 725 | 728 | self._message_action_box.clear()
|
| 726 | 729 | self._chat_control.clear()
|
| 727 | 730 | |
| 728 | - def process_event(self, event: Any) -> None:
|
|
| 729 | - if isinstance(event, events.MucDiscoUpdate):
|
|
| 730 | - self._on_muc_disco_update(event)
|
|
| 731 | - |
|
| 732 | - if isinstance(event, events.MessageReceived):
|
|
| 733 | - self._on_message_received(event)
|
|
| 734 | - |
|
| 735 | - self._message_action_box.process_event(event)
|
|
| 736 | - |
|
| 737 | 731 | |
| 738 | 732 | class ChatPlaceholderBox(Gtk.Box):
|
| 739 | 733 | def __init__(self):
|
| ... | ... | @@ -109,23 +109,11 @@ def __init__(self) -> None: |
| 109 | 109 | self._ui.connect_signals(self)
|
| 110 | 110 | |
| 111 | 111 | self.register_events([
|
| 112 | - ('presence-received', ged.GUI1, self._on_event),
|
|
| 113 | - ('message-sent', ged.GUI1, self._on_event),
|
|
| 114 | - ('message-received', ged.CORE, self._on_message_received),
|
|
| 115 | - ('mam-message-received', ged.CORE, self._on_event),
|
|
| 116 | - ('gc-message-received', ged.CORE, self._on_event),
|
|
| 117 | - ('message-updated', ged.CORE, self._on_event),
|
|
| 118 | - ('message-moderated', ged.CORE, self._on_event),
|
|
| 119 | - ('receipt-received', ged.GUI1, self._on_event),
|
|
| 120 | - ('displayed-received', ged.GUI1, self._on_event),
|
|
| 112 | + ('message-received', ged.GUI1, self._on_message_received),
|
|
| 121 | 113 | ('read-state-sync', ged.GUI1, self._on_read_state_sync),
|
| 122 | - ('message-error', ged.GUI1, self._on_event),
|
|
| 123 | - ('muc-disco-update', ged.GUI1, self._on_event),
|
|
| 124 | 114 | ('call-started', ged.GUI1, self._on_call_started),
|
| 125 | - ('call-stopped', ged.GUI1, self._on_event),
|
|
| 126 | 115 | ('jingle-request-received', ged.GUI1, self._on_jingle_request),
|
| 127 | 116 | ('file-request-received', ged.GUI1, self._on_file_request),
|
| 128 | - ('file-request-sent', ged.GUI1, self._on_event),
|
|
| 129 | 117 | ('account-enabled', ged.GUI1, self._on_account_enabled),
|
| 130 | 118 | ('account-disabled', ged.GUI1, self._on_account_disabled),
|
| 131 | 119 | ('allow-gajim-update-check', ged.GUI1, self._on_allow_gajim_update),
|
| ... | ... | @@ -907,12 +895,6 @@ def _load_chats(self) -> None: |
| 907 | 895 | |
| 908 | 896 | self._set_startup_finished()
|
| 909 | 897 | |
| 910 | - def _on_event(self, event: events.MainEventT) -> None:
|
|
| 911 | - if not self.chat_exists(event.account, event.jid):
|
|
| 912 | - return
|
|
| 913 | - |
|
| 914 | - self._main_stack.process_event(event)
|
|
| 915 | - |
|
| 916 | 898 | def _on_message_received(self, event: events.MessageReceived) -> None:
|
| 917 | 899 | if not self.chat_exists(event.account, event.jid):
|
| 918 | 900 | if not event.properties.body:
|
| ... | ... | @@ -927,8 +909,6 @@ def _on_message_received(self, event: events.MessageReceived) -> None: |
| 927 | 909 | jid = event.properties.jid.new_as_bare()
|
| 928 | 910 | self.add_chat(event.account, jid, 'contact')
|
| 929 | 911 | |
| 930 | - self._main_stack.process_event(event)
|
|
| 931 | - |
|
| 932 | 912 | def _on_read_state_sync(self, event: events.ReadStateSync) -> None:
|
| 933 | 913 | if event.is_muc_pm:
|
| 934 | 914 | jid = JID.from_string(event.jid.bare)
|
| ... | ... | @@ -960,14 +940,10 @@ def _on_jingle_request(self, event: events.JingleRequestReceived) -> None: |
| 960 | 940 | self.add_chat(event.account, event.jid, 'contact')
|
| 961 | 941 | break
|
| 962 | 942 | |
| 963 | - self._main_stack.process_event(event)
|
|
| 964 | - |
|
| 965 | 943 | def _on_file_request(self, event: events.FileRequestReceivedEvent) -> None:
|
| 966 | 944 | if not self.chat_exists(event.account, event.jid):
|
| 967 | 945 | self.add_chat(event.account, event.jid, 'contact')
|
| 968 | 946 | |
| 969 | - self._main_stack.process_event(event)
|
|
| 970 | - |
|
| 971 | 947 | def quit(self) -> None:
|
| 972 | 948 | save_main_window_position()
|
| 973 | 949 | window_width, window_height = self.get_size()
|
| ... | ... | @@ -15,14 +15,12 @@ |
| 15 | 15 | from __future__ import annotations
|
| 16 | 16 | |
| 17 | 17 | from typing import Union
|
| 18 | -from typing import cast
|
|
| 19 | 18 | |
| 20 | 19 | from nbxmpp.protocol import JID
|
| 21 | 20 | |
| 22 | 21 | from gi.repository import Gtk
|
| 23 | 22 | |
| 24 | 23 | from gajim.common import app
|
| 25 | -from gajim.common.events import ApplicationEvent
|
|
| 26 | 24 | |
| 27 | 25 | from .app_page import AppPage
|
| 28 | 26 | from .chat_list import ChatList
|
| ... | ... | @@ -88,18 +86,6 @@ def get_chat_page(self) -> ChatPage: |
| 88 | 86 | assert isinstance(chat_page, ChatPage)
|
| 89 | 87 | return chat_page
|
| 90 | 88 | |
| 91 | - def process_event(self, event: ApplicationEvent) -> None:
|
|
| 92 | - empty_box = self.get_child_by_name('empty')
|
|
| 93 | - pages = cast(list[PageT], self.get_children())
|
|
| 94 | - for page in pages:
|
|
| 95 | - if page is empty_box:
|
|
| 96 | - continue
|
|
| 97 | - |
|
| 98 | - if isinstance(page, AccountPage):
|
|
| 99 | - continue
|
|
| 100 | - |
|
| 101 | - page.process_event(event)
|
|
| 102 | - |
|
| 103 | 89 | def _on_chat_selected(self,
|
| 104 | 90 | _chat_list: ChatList,
|
| 105 | 91 | _workspace_id: str,
|
| ... | ... | @@ -37,6 +37,7 @@ |
| 37 | 37 | from gajim.common import app
|
| 38 | 38 | from gajim.common import events
|
| 39 | 39 | from gajim.common import i18n
|
| 40 | +from gajim.common import ged
|
|
| 40 | 41 | from gajim.common.i18n import _
|
| 41 | 42 | from gajim.common.client import Client
|
| 42 | 43 | from gajim.common.const import SimpleClientState
|
| ... | ... | @@ -65,9 +66,10 @@ |
| 65 | 66 | log = logging.getLogger('gajim.gui.messageactionsbox')
|
| 66 | 67 | |
| 67 | 68 | |
| 68 | -class MessageActionsBox(Gtk.Grid):
|
|
| 69 | +class MessageActionsBox(Gtk.Grid, ged.EventHelper):
|
|
| 69 | 70 | def __init__(self) -> None:
|
| 70 | 71 | Gtk.Grid.__init__(self)
|
| 72 | + ged.EventHelper.__init__(self)
|
|
| 71 | 73 | |
| 72 | 74 | self._client: Optional[Client] = None
|
| 73 | 75 | self._contact: Optional[ChatContactT] = None
|
| ... | ... | @@ -120,6 +122,10 @@ def __init__(self) -> None: |
| 120 | 122 | |
| 121 | 123 | self._connect_actions()
|
| 122 | 124 | |
| 125 | + self.register_events([
|
|
| 126 | + ('message-sent', ged.GUI2, self._on_message_sent)
|
|
| 127 | + ])
|
|
| 128 | + |
|
| 123 | 129 | def get_current_contact(self) -> ChatContactT:
|
| 124 | 130 | assert self._contact is not None
|
| 125 | 131 | return self._contact
|
| ... | ... | @@ -689,7 +695,3 @@ def _on_message_sent(self, event: events.MessageSent) -> None: |
| 689 | 695 | |
| 690 | 696 | self.msg_textview.get_style_context().remove_class(
|
| 691 | 697 | 'gajim-msg-correcting') |
| 692 | - |
|
| 693 | - def process_event(self, event: events.ApplicationEvent) -> None:
|
|
| 694 | - if isinstance(event, events.MessageSent):
|
|
| 695 | - self._on_message_sent(event) |