Philipp Hörist pushed to branch master at gajim / gajim
Commits: 9058a28a by lovetox at 2021-11-02T10:06:45+01:00 Bookmarks: Make Dialog read only
- - - - - 21b4f44b by lovetox at 2021-11-02T10:07:23+01:00 Hide Bookmarks dialog behind developer setting
- - - - - aa5c2d9f by lovetox at 2021-11-02T10:08:28+01:00 Bookmarks: Remove unused methods
- - - - -
5 changed files:
- gajim/common/modules/bookmarks.py - gajim/common/setting_values.py - gajim/data/gui/bookmarks.ui - gajim/gtk/bookmarks.py - gajim/gui_menu_builder.py
Changes:
===================================== gajim/common/modules/bookmarks.py ===================================== @@ -223,22 +223,6 @@ def _bookmarks_received(self, task: Any) -> None: app.nec.push_incoming_event( NetworkEvent('bookmarks-received', account=self._account))
- def store_difference(self, bookmarks: List) -> None: - if self.nativ_bookmarks_used: - retract, add_or_modify = self._determine_changed_bookmarks( - bookmarks, self._bookmarks) - - for bookmark in retract: - self.remove(bookmark.jid) - - if add_or_modify: - self.store_bookmarks(add_or_modify) - self._bookmarks = self._convert_to_dict(bookmarks) - - else: - self._bookmarks = self._convert_to_dict(bookmarks) - self.store_bookmarks() - def store_bookmarks(self, bookmarks: list = None) -> None: if not app.account_is_available(self._account): return @@ -311,27 +295,6 @@ def remove(self, jid: JID, publish: bool = True) -> None: else: self.store_bookmarks()
- @staticmethod - def _determine_changed_bookmarks( - new_bookmarks: List[BookmarkData], - old_bookmarks: Dict[str, BookmarkData]) -> Tuple[ - List[BookmarkData], List[BookmarkData]]: - - new_jids = [bookmark.jid for bookmark in new_bookmarks] - new_bookmarks = set(new_bookmarks) - old_bookmarks = set(old_bookmarks.values()) - - retract = [] - add_or_modify = [] - changed_bookmarks = new_bookmarks.symmetric_difference(old_bookmarks) - - for bookmark in changed_bookmarks: - if bookmark.jid not in new_jids: - retract.append(bookmark) - if bookmark in new_bookmarks: - add_or_modify.append(bookmark) - return retract, add_or_modify - def get_name_from_bookmark(self, jid: str) -> str: bookmark = self._bookmarks.get(jid) if bookmark is None:
===================================== gajim/common/setting_values.py ===================================== @@ -175,6 +175,7 @@ class _ACCOUNT_DEFAULT: 'command_system_execute': False, 'groupchat_roster_width': 210, 'dev_force_bookmark_2': False, + 'developer_modus': False, 'show_help_start_chat': True, 'gc_notify_on_all_messages_private_default': True, 'gc_notify_on_all_messages_public_default': False, @@ -461,6 +462,7 @@ class _ACCOUNT_DEFAULT: 'gc_notify_on_all_messages_private_default': '', 'gc_notify_on_all_messages_public_default': '', 'metacontacts_enabled': '', + 'developer_modus': '', }, }
===================================== gajim/data/gui/bookmarks.ui ===================================== @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<!-- Generated with glade 3.36.0 --> +<!-- Generated with glade 3.38.2 --> <interface> <requires lib="gtk+" version="3.22"/> <object class="GtkListStore" id="bookmarks_store"> @@ -16,42 +16,39 @@ <column type="gboolean"/> </columns> </object> + <!-- n-columns=2 n-rows=1 --> <object class="GtkGrid" id="bookmarks_grid"> <property name="visible">True</property> - <property name="can_focus">False</property> + <property name="can-focus">False</property> <child> <object class="GtkScrolledWindow"> <property name="visible">True</property> - <property name="can_focus">True</property> + <property name="can-focus">True</property> <property name="hexpand">True</property> <property name="vexpand">True</property> - <property name="hscrollbar_policy">never</property> - <property name="shadow_type">in</property> + <property name="hscrollbar-policy">never</property> + <property name="shadow-type">in</property> <child> <object class="GtkTreeView" id="bookmarks_view"> <property name="visible">True</property> - <property name="can_focus">True</property> + <property name="can-focus">True</property> <property name="model">bookmarks_store</property> - <property name="search_column">0</property> - <property name="enable_grid_lines">horizontal</property> + <property name="search-column">0</property> + <property name="enable-grid-lines">horizontal</property> <child internal-child="selection"> - <object class="GtkTreeSelection"> - <signal name="changed" handler="_on_selection_changed" swapped="no"/> - </object> + <object class="GtkTreeSelection"/> </child> <child> <object class="GtkTreeViewColumn"> <property name="resizable">True</property> <property name="title" translatable="yes">XMPP Address</property> <property name="expand">True</property> - <property name="sort_indicator">True</property> - <property name="sort_column_id">0</property> + <property name="sort-indicator">True</property> + <property name="sort-column-id">0</property> <child> <object class="GtkCellRendererText" id="jid"> - <property name="editable">True</property> <property name="ellipsize">end</property> - <property name="placeholder_text">chat@conference.example.org</property> - <signal name="edited" handler="_on_address_edited" swapped="no"/> + <property name="placeholder-text">chat@conference.example.org</property> </object> <attributes> <attribute name="text">0</attribute> @@ -62,15 +59,13 @@ <child> <object class="GtkTreeViewColumn"> <property name="resizable">True</property> - <property name="min_width">100</property> + <property name="min-width">100</property> <property name="title" translatable="yes">Name</property> - <property name="sort_indicator">True</property> - <property name="sort_column_id">1</property> + <property name="sort-indicator">True</property> + <property name="sort-column-id">1</property> <child> <object class="GtkCellRendererText" id="name"> - <property name="editable">True</property> <property name="ellipsize">end</property> - <signal name="edited" handler="_on_name_edited" swapped="no"/> </object> <attributes> <attribute name="text">1</attribute> @@ -82,13 +77,11 @@ <object class="GtkTreeViewColumn"> <property name="resizable">True</property> <property name="title" translatable="yes">Nickname</property> - <property name="sort_indicator">True</property> - <property name="sort_column_id">2</property> + <property name="sort-indicator">True</property> + <property name="sort-column-id">2</property> <child> <object class="GtkCellRendererText" id="nick"> - <property name="editable">True</property> <property name="ellipsize">end</property> - <signal name="edited" handler="_on_nick_edited" swapped="no"/> </object> <attributes> <attribute name="text">2</attribute> @@ -100,13 +93,11 @@ <object class="GtkTreeViewColumn"> <property name="resizable">True</property> <property name="title" translatable="yes">Password</property> - <property name="sort_indicator">True</property> - <property name="sort_column_id">3</property> + <property name="sort-indicator">True</property> + <property name="sort-column-id">3</property> <child> <object class="GtkCellRendererText" id="password"> - <property name="editable">True</property> <property name="ellipsize">end</property> - <signal name="edited" handler="_on_password_edited" swapped="no"/> </object> <attributes> <attribute name="text">3</attribute> @@ -118,12 +109,10 @@ <object class="GtkTreeViewColumn"> <property name="sizing">fixed</property> <property name="title" translatable="yes">Autojoin</property> - <property name="sort_indicator">True</property> - <property name="sort_column_id">4</property> + <property name="sort-indicator">True</property> + <property name="sort-column-id">4</property> <child> - <object class="GtkCellRendererToggle" id="autojoin"> - <signal name="toggled" handler="_on_autojoin_toggled" swapped="no"/> - </object> + <object class="GtkCellRendererToggle" id="autojoin"/> <attributes> <attribute name="active">4</attribute> </attributes> @@ -140,73 +129,11 @@ </style> </object> <packing> - <property name="left_attach">0</property> - <property name="top_attach">0</property> + <property name="left-attach">0</property> + <property name="top-attach">0</property> <property name="width">2</property> </packing> </child> - <child> - <object class="GtkToolbar"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="halign">start</property> - <property name="toolbar_style">icons</property> - <property name="show_arrow">False</property> - <property name="icon_size">4</property> - <child> - <object class="GtkToolButton"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="use_underline">True</property> - <property name="icon_name">list-add-symbolic</property> - <signal name="clicked" handler="_on_add_clicked" swapped="no"/> - </object> - <packing> - <property name="expand">False</property> - <property name="homogeneous">True</property> - </packing> - </child> - <child> - <object class="GtkToolButton" id="remove_button"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="use_underline">True</property> - <property name="icon_name">list-remove-symbolic</property> - <signal name="clicked" handler="_on_remove_clicked" swapped="no"/> - </object> - <packing> - <property name="expand">False</property> - <property name="homogeneous">True</property> - </packing> - </child> - <style> - <class name="inline-toolbar"/> - </style> - </object> - <packing> - <property name="left_attach">0</property> - <property name="top_attach">1</property> - </packing> - </child> - <child> - <object class="GtkButton"> - <property name="label" translatable="yes">_Apply</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <property name="halign">end</property> - <property name="valign">end</property> - <property name="use_underline">True</property> - <signal name="clicked" handler="_on_apply_clicked" swapped="no"/> - <style> - <class name="suggested-action"/> - </style> - </object> - <packing> - <property name="left_attach">1</property> - <property name="top_attach">1</property> - </packing> - </child> <style> <class name="padding-18"/> </style>
===================================== gajim/gtk/bookmarks.py ===================================== @@ -13,16 +13,11 @@ # along with Gajim. If not, see http://www.gnu.org/licenses/.
import logging -from enum import IntEnum
from gi.repository import Gtk from gi.repository import Gdk -from nbxmpp.structs import BookmarkData -from nbxmpp.protocol import validate_resourcepart -from nbxmpp.protocol import JID
from gajim.common import app -from gajim.common.helpers import validate_jid from gajim.common.i18n import _
from .util import get_builder @@ -31,14 +26,6 @@ log = logging.getLogger('gajim.gui.bookmarks')
-class Column(IntEnum): - ADDRESS = 0 - NAME = 1 - NICK = 2 - PASSWORD = 3 - AUTOJOIN = 4 - - class Bookmarks(Gtk.ApplicationWindow): def __init__(self, account): Gtk.ApplicationWindow.__init__(self) @@ -72,89 +59,6 @@ def _on_key_press(self, _widget, event): if event.keyval == Gdk.KEY_Escape: self.destroy()
- def _on_selection_changed(self, selection): - _, iter_ = selection.get_selected() - self._ui.remove_button.set_sensitive(iter_ is not None) - - def _on_address_edited(self, _renderer, path, new_value): - iter_ = self._ui.bookmarks_store.get_iter(path) - if not new_value: - return - - try: - jid = validate_jid(new_value) - except ValueError as error: - log.warning('Invalid JID: %s (%s)', error, new_value) - return - - if not jid.is_bare: - log.warning('Invalid JID: only bare JIDs allowed (%s)', jid) - return - - self._ui.bookmarks_store.set_value(iter_, - Column.ADDRESS, - new_value or None) - - def _on_name_edited(self, _renderer, path, new_value): - iter_ = self._ui.bookmarks_store.get_iter(path) - self._ui.bookmarks_store.set_value(iter_, - Column.NAME, - new_value or None) - - def _on_nick_edited(self, _renderer, path, new_value): - iter_ = self._ui.bookmarks_store.get_iter(path) - - if new_value: - try: - validate_resourcepart(new_value) - except ValueError as error: - log.warning('Invalid nickname: %s', error) - return - - self._ui.bookmarks_store.set_value(iter_, - Column.NICK, - new_value or None) - - def _on_password_edited(self, _renderer, path, new_value): - iter_ = self._ui.bookmarks_store.get_iter(path) - self._ui.bookmarks_store.set_value(iter_, - Column.PASSWORD, - new_value or None) - - def _on_autojoin_toggled(self, _renderer, path): - iter_ = self._ui.bookmarks_store.get_iter(path) - new_value = not self._ui.bookmarks_store[iter_][Column.AUTOJOIN] - self._ui.bookmarks_store.set_value(iter_, Column.AUTOJOIN, new_value) - - def _on_add_clicked(self, _button): - iter_ = self._ui.bookmarks_store.append([None, None, None, None, False]) - self._ui.bookmarks_view.get_selection().select_iter(iter_) - path = self._ui.bookmarks_store.get_path(iter_) - self._ui.bookmarks_view.scroll_to_cell(path, None, False) - - def _on_remove_clicked(self, _button): - mod, paths = self._ui.bookmarks_view.get_selection().get_selected_rows() - for path in paths: - iter_ = mod.get_iter(path) - self._ui.bookmarks_store.remove(iter_) - - def _on_apply_clicked(self, _button): - bookmarks = [] - for row in self._ui.bookmarks_store: - if not row[Column.ADDRESS]: - continue - - bookmark = BookmarkData(jid=JID.from_string(row[Column.ADDRESS]), - name=row[Column.NAME], - autojoin=row[Column.AUTOJOIN], - password=row[Column.PASSWORD], - nick=row[Column.NICK]) - bookmarks.append(bookmark) - - con = app.connections[self.account] - con.get_module('Bookmarks').store_difference(bookmarks) - self.destroy() - @staticmethod def _search_func(model, _column, search_text, iter_): return search_text.lower() not in model[iter_][0].lower()
===================================== gajim/gui_menu_builder.py ===================================== @@ -636,7 +636,6 @@ def get_account_menu(account): (_('Advanced'), [ ('-archive', _('Archiving Preferences')), ('-blocking', _('Blocking List')), - ('-bookmarks', _('Bookmarks')), ('-pep-config', _('PEP Configuration')), ('-sync-history', _('Synchronise History…')), ]), @@ -648,6 +647,9 @@ def get_account_menu(account): ]), ]
+ if app.settings.get('developer_modus'): + account_menu[5][1].append(('-bookmarks', _('Bookmarks'))) + def build_menu(preset): menu = Gio.Menu() for item in preset:
View it on GitLab: https://dev.gajim.org/gajim/gajim/-/compare/6a3fda13e5bd0984350dfb488b0c1b3e...