diff options
author | wurstsalat <mailtrash@posteo.de> | 2022-10-08 13:16:39 +0300 |
---|---|---|
committer | wurstsalat <mailtrash@posteo.de> | 2022-10-08 13:16:43 +0300 |
commit | 77e3de78f414d686dadffd3896e823366a95af5f (patch) | |
tree | 227e1a9ece1fc18178ad6cc777f15d2bb98797b8 | |
parent | fb09f28fa1b8e8f04e1dc62fa0df615a5009c697 (diff) |
imprv: XMLConsole: Apply account filter to all visible stanzas
Before this change, setting an account filter would only filter new stanzas
Fixes #11193
-rw-r--r-- | gajim/gtk/xml_console.py | 73 |
1 files changed, 54 insertions, 19 deletions
diff --git a/gajim/gtk/xml_console.py b/gajim/gtk/xml_console.py index 576555302..cc9210c3a 100644 --- a/gajim/gtk/xml_console.py +++ b/gajim/gtk/xml_console.py @@ -26,6 +26,8 @@ from gi.repository import GtkSource from gajim.common import app from gajim.common import ged +from gajim.common.events import AccountDisabled +from gajim.common.events import AccountEnabled from gajim.common.events import StanzaReceived from gajim.common.events import StanzaSent from gajim.common.const import Direction @@ -55,7 +57,7 @@ class XMLConsoleWindow(Gtk.ApplicationWindow, EventHelper): self.set_show_menubar(False) self.set_name('XMLConsoleWindow') - self.selected_account = 'AllAccounts' + self._selected_account = 'AllAccounts' self._selected_send_account: Optional[str] = None self.presence = True self.message = True @@ -105,9 +107,11 @@ class XMLConsoleWindow(Gtk.ApplicationWindow, EventHelper): self._ui.connect_signals(self) self.register_events([ - ('stanza-received', ged.GUI1, self._nec_stanza_received), - ('stanza-sent', ged.GUI1, self._nec_stanza_sent), - ('style-changed', ged.GUI1, self._on_style_changed) + ('stanza-received', ged.GUI1, self._on_stanza_received), + ('stanza-sent', ged.GUI1, self._on_stanza_sent), + ('style-changed', ged.GUI1, self._on_style_changed), + ('account-enabled', ged.GUI1, self._on_account_changed), + ('account-disabled', ged.GUI1, self._on_account_changed) ]) def _on_destroy(self, *args: Any) -> None: @@ -124,14 +128,25 @@ class XMLConsoleWindow(Gtk.ApplicationWindow, EventHelper): self._selected_send_account = combo.get_active_id() def _set_titlebar(self) -> None: - if self.selected_account == 'AllAccounts': + if self._selected_account == 'AllAccounts': title = _('All Accounts') - elif self.selected_account == 'AccountWizard': + elif self._selected_account == 'AccountWizard': title = _('Account Wizard') else: - title = app.get_jid_from_account(self.selected_account) + title = app.get_jid_from_account(self._selected_account) self._ui.headerbar.set_subtitle(title) + def _on_account_changed(self, + event: Union[AccountEnabled, AccountDisabled] + ) -> None: + buf = self._ui.sourceview.get_buffer() + + if isinstance(event, AccountEnabled): + buf.create_tag(event.account) + else: + start, end = buf.get_bounds() + buf.remove_tag_by_name(event.account, start, end) + def _create_tags(self) -> None: tags = [ 'incoming', @@ -141,6 +156,12 @@ class XMLConsoleWindow(Gtk.ApplicationWindow, EventHelper): 'stream', 'iq' ] + + for account in app.settings.get_active_accounts(): + tags.append(account) + + tags.append('AccountWizard') + for tag_name in tags: self._ui.sourceview.get_buffer().create_tag(tag_name) @@ -328,7 +349,7 @@ class XMLConsoleWindow(Gtk.ApplicationWindow, EventHelper): settings = [ Setting(SettingKind.COMBO, _('Account'), - SettingType.VALUE, self.selected_account, + SettingType.VALUE, self._selected_account, callback=self._set_account, props={'combo_items': combo_accounts}), @@ -359,7 +380,7 @@ class XMLConsoleWindow(Gtk.ApplicationWindow, EventHelper): _('Filter'), Gtk.DialogFlags.DESTROY_WITH_PARENT, settings, - self.selected_account or 'AllAccounts') + self._selected_account or 'AllAccounts') self.filter_dialog.connect('destroy', self._on_filter_destroyed) def _on_filter_destroyed(self, _widget: Gtk.Widget) -> None: @@ -369,9 +390,26 @@ class XMLConsoleWindow(Gtk.ApplicationWindow, EventHelper): self._ui.sourceview.get_buffer().set_text('') def _set_account(self, value: str, _data: Any) -> None: - self.selected_account = value + self._selected_account = value self._set_titlebar() + active_accounts = app.settings.get_active_accounts() + active_accounts.append('AccountWizard') + + table = self._ui.sourceview.get_buffer().get_tag_table() + + if value == 'AllAccounts': + for account in active_accounts: + tag = table.lookup(account) + if tag is not None: + tag.set_property('invisible', False) + return + + for account in active_accounts: + tag = table.lookup(account) + if tag is not None: + tag.set_property('invisible', account != value) + def _on_setting(self, value: bool, data: str) -> None: setattr(self, data, value) value = not value @@ -379,23 +417,19 @@ class XMLConsoleWindow(Gtk.ApplicationWindow, EventHelper): tag = table.lookup(data) if tag is None: return + if data in ('incoming', 'outgoing'): if value: tag.set_priority(table.get_size() - 1) else: tag.set_priority(0) + tag.set_property('invisible', value) - def _nec_stanza_received(self, event: StanzaReceived): - if self.selected_account != 'AllAccounts': - if event.account != self.selected_account: - return + def _on_stanza_received(self, event: StanzaReceived): self._print_stanza(event, 'incoming') - def _nec_stanza_sent(self, event: StanzaSent): - if self.selected_account != 'AllAccounts': - if event.account != self.selected_account: - return + def _on_stanza_sent(self, event: StanzaSent): self._print_stanza(event, 'outgoing') def _print_stanza(self, @@ -435,7 +469,8 @@ class XMLConsoleWindow(Gtk.ApplicationWindow, EventHelper): time=time.strftime('%c'), account=account_label, stanza=stanza) - buffer_.insert_with_tags_by_name(end_iter, stanza, type_, kind) + buffer_.insert_with_tags_by_name( + end_iter, stanza, type_, kind, event.account) if is_at_the_end: GLib.idle_add(scroll_to_end, self._ui.scrolled) |