From 8c2a3b3819ee022f4ef116d02c53fcf81566bc7c Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Fri, 16 Aug 2024 09:35:42 +0200 Subject: [PATCH] Replace & with & in ActionRow title and description --- melon/browse/__init__.py | 4 ++-- melon/browse/channel.py | 4 ++-- melon/browse/playlist.py | 8 +++++--- melon/browse/search.py | 2 +- melon/browse/server.py | 4 ++-- melon/import_providers/utils.py | 2 +- melon/importer.py | 8 ++++---- melon/player/__init__.py | 2 +- melon/player/playlist.py | 6 ++++-- melon/playlist/__init__.py | 6 +++--- melon/settings/__init__.py | 4 ++-- melon/widgets/feeditem.py | 2 +- melon/widgets/preferencerow.py | 28 ++++++++++++++-------------- 13 files changed, 42 insertions(+), 38 deletions(-) diff --git a/melon/browse/__init__.py b/melon/browse/__init__.py index 1910309..79dbf6d 100644 --- a/melon/browse/__init__.py +++ b/melon/browse/__init__.py @@ -32,8 +32,8 @@ class BrowseScreen(Adw.NavigationPage): ) for server in servers: row = Adw.ActionRow() - row.set_title(server["name"]) - row.set_subtitle(server["description"]) + row.set_title(server["name"].replace("&", "&")) + row.set_subtitle(server["description"].replace("&", "&")) icon = Adw.Avatar() icon.set_custom_image( Gdk.Texture.new_from_filename(server["logo_path"]) diff --git a/melon/browse/channel.py b/melon/browse/channel.py index 9d8e850..776eee9 100644 --- a/melon/browse/channel.py +++ b/melon/browse/channel.py @@ -49,7 +49,7 @@ class BrowseChannelScreen(Adw.NavigationPage): if feed.id == feed_id: feed_name = feed.name break - self.results.set_title(feed_name) + self.results.set_title(feed_name.replace("&", "&")) spinner = Gtk.Spinner() spinner.set_size_request(20, 20) spinner.start() @@ -79,7 +79,7 @@ class BrowseChannelScreen(Adw.NavigationPage): self.scrollview.set_child(self.box) # update meta - self.set_title(unidecode(self.channel.name)) + self.set_title(unidecode(self.channel.name).replace("&", "&")) self.about.set_title(unidecode(self.channel.name).replace("&", "&")) self.about.set_description(unidecode(self.channel.bio).replace("&", "&")) diff --git a/melon/browse/playlist.py b/melon/browse/playlist.py index 2fe9113..1ac1e33 100644 --- a/melon/browse/playlist.py +++ b/melon/browse/playlist.py @@ -50,9 +50,11 @@ class BrowsePlaylistScreen(Adw.NavigationPage): # base layout self.box = Adw.PreferencesPage() self.about = Adw.PreferencesGroup() - self.about.set_title(unidecode(self.playlist.title)) - self.about.set_description(unidecode(self.playlist.description)) - self.set_title(self.playlist.title) + self.about.set_title(unidecode(self.playlist.title).replace("&", "&")) + self.about.set_description( + unidecode(self.playlist.description).replace("&", "&") + ) + self.set_title(self.playlist.title.replace("&", "&")) self.results = None self.scrollview.set_child(self.box) diff --git a/melon/browse/search.py b/melon/browse/search.py index 436688a..6349829 100644 --- a/melon/browse/search.py +++ b/melon/browse/search.py @@ -41,7 +41,7 @@ class GlobalSearchScreen(Adw.NavigationPage): instance = get_server_instance(server) results = instance.search(self.text, self.search_mode) box = Adw.ExpanderRow() - box.set_title(instance.name) + box.set_title(instance.name.replace("&", "&")) box.set_subtitle(_("No results")) count = len(results) box.set_subtitle( diff --git a/melon/browse/server.py b/melon/browse/server.py index 0f638a8..b1198cd 100644 --- a/melon/browse/server.py +++ b/melon/browse/server.py @@ -112,7 +112,7 @@ class Search(ViewStackPage): if self.query != "": desc = _("Try using a different query") self.query = "" - self.results.set_description(desc) + self.results.set_description(desc.replace("&", "&")) self.results.set_icon_name("weather-few-clouds-night-symbolic") self.inner.append(self.results) @@ -188,7 +188,7 @@ class BrowseServerScreen(Adw.NavigationPage): def __init__(self, id, window=None, *args, **kwargs): super().__init__(*args, **kwargs) server = get_servers_list()[id] - self.set_title(server["name"]) + self.set_title(server["name"].replace("&", "&")) self.instance = get_server_instance(server) # main stack view diff --git a/melon/import_providers/utils.py b/melon/import_providers/utils.py index a8673dd..462f771 100644 --- a/melon/import_providers/utils.py +++ b/melon/import_providers/utils.py @@ -7,7 +7,7 @@ class ImportPicker(Gtk.FileDialog): def __init__(self, provider: ImportProvider, *args, **kwargs): super().__init__(*args, **kwargs) - self.set_title(provider.picker_title) + self.set_title(provider.picker_title.replace("&", "&")) self.set_modal(True) self.provider = provider diff --git a/melon/importer.py b/melon/importer.py index 1a440e3..a99b974 100644 --- a/melon/importer.py +++ b/melon/importer.py @@ -40,13 +40,13 @@ class ImporterScreen(Adw.NavigationPage): if len(providers) == 0: continue group = Adw.PreferencesGroup() - group.set_title(server["name"]) - group.set_description(server["description"]) + group.set_title(server["name"].replace("&", "&")) + group.set_description(server["description"].replace("&", "&")) for provider in providers: count += 1 row = Adw.ActionRow() - row.set_title(provider.title) - row.set_subtitle(provider.description) + row.set_title(provider.title.replace("&", "&")) + row.set_subtitle(provider.description.replace("&", "&")) row.add_suffix(Gtk.Image.new_from_icon_name("go-next-symbolic")) row.set_activatable(True) row.connect("activated", pass_me(self.do_import, provider)) diff --git a/melon/player/__init__.py b/melon/player/__init__.py index 89f142d..9c6c53d 100644 --- a/melon/player/__init__.py +++ b/melon/player/__init__.py @@ -21,7 +21,7 @@ class PlayerScreen(Adw.NavigationPage): Gtk.UriLauncher.new(uri=self.video.url).launch() def display_info(self): - self.set_title(self.video.title) + self.set_title(self.video.title.replace("&", "&")) self.scrollview.set_child(self.box) # video details self.about = Adw.PreferencesGroup() diff --git a/melon/player/playlist.py b/melon/player/playlist.py index 1e0e68f..95c38e6 100644 --- a/melon/player/playlist.py +++ b/melon/player/playlist.py @@ -200,8 +200,10 @@ class PlaylistPlayerScreen(PlayerScreen): def display_control(self): self.ctr_group = Adw.PreferencesGroup() - self.ctr_group.set_title(self.playlist.inner.title) - self.ctr_group.set_description(self.playlist.inner.description) + self.ctr_group.set_title(self.playlist.inner.title.replace("&", "&")) + self.ctr_group.set_description( + self.playlist.inner.description.replace("&", "&") + ) # if the video isn't the first # show a previous button diff --git a/melon/playlist/__init__.py b/melon/playlist/__init__.py index d5bfc9e..d78c691 100644 --- a/melon/playlist/__init__.py +++ b/melon/playlist/__init__.py @@ -43,7 +43,7 @@ class LocalPlaylistScreen(Adw.NavigationPage): def update(self): playlist = self.playlist - self.set_title(playlist.title) + self.set_title(playlist.title.replace("&", "&")) self.header_bar = Adw.HeaderBar() @@ -85,8 +85,8 @@ class LocalPlaylistScreen(Adw.NavigationPage): self.box = Adw.PreferencesPage() # create data group group = Adw.PreferencesGroup() - group.set_title(unidecode(playlist.title)) - group.set_description(unidecode(playlist.description)) + group.set_title(unidecode(playlist.title).replace("&", "&")) + group.set_description(unidecode(playlist.description).replace("&", "&")) group.set_header_suffix(edit_button) app_conf = get_app_settings() self.box.add(group) diff --git a/melon/settings/__init__.py b/melon/settings/__init__.py index 746be17..fb15a3b 100644 --- a/melon/settings/__init__.py +++ b/melon/settings/__init__.py @@ -112,8 +112,8 @@ class SettingsScreen(Adw.NavigationPage): # generate preferencesgroups for every server for server_id, server in get_servers_list().items(): group = Adw.PreferencesGroup() - group.set_title(server["name"]) - group.set_description(server["description"]) + group.set_title(server["name"].replace("&", "&")) + group.set_description(server["description"].replace("&", "&")) instance = get_server_instance(server) epref = Preference( "server-enabled", diff --git a/melon/widgets/feeditem.py b/melon/widgets/feeditem.py index aab2b0f..4b03b89 100644 --- a/melon/widgets/feeditem.py +++ b/melon/widgets/feeditem.py @@ -167,7 +167,7 @@ class AdaptiveFeedItem(Adw.ActionRow): # add predefined list before custom menu entries and add them for dt in predefined + self.menuitems: row = Adw.ActionRow() - row.set_title(dt[0]) + row.set_title(dt[0].replace("&", "&")) row.set_activatable(True) # run callback & close dialog on click row.connect( diff --git a/melon/widgets/preferencerow.py b/melon/widgets/preferencerow.py index 4ccde26..41116b5 100644 --- a/melon/widgets/preferencerow.py +++ b/melon/widgets/preferencerow.py @@ -18,8 +18,8 @@ class PreferenceRow: if pref.type is PreferenceType.TOGGLE: # implemented as Switch Row self.widget = Adw.SwitchRow() - self.widget.set_title(pref.name) - self.widget.set_subtitle(pref.description) + self.widget.set_title(pref.name.replace("&", "&")) + self.widget.set_subtitle(pref.description.replace("&", "&")) self.widget.set_active(pref.value) self.widget.connect( "notify::active", @@ -28,8 +28,8 @@ class PreferenceRow: elif pref.type is PreferenceType.DROPDOWN: # implemented as Combo Row self.widget = Adw.ComboRow() - self.widget.set_title(pref.name) - self.widget.set_subtitle(pref.description) + self.widget.set_title(pref.name.replace("&", "&")) + self.widget.set_subtitle(pref.description.replace("&", "&")) opts = pref.default model = Gtk.StringList.new(opts) self.widget.set_model(model) @@ -45,7 +45,7 @@ class PreferenceRow: self.widget = Adw.EntryRow() else: self.widget = Adw.PasswordEntryRow() - self.widget.set_title(pref.name) + self.widget.set_title(pref.name.replace("&", "&")) self.widget.set_tooltip_text(pref.description) self.widget.set_text(pref.value) self.widget.connect( @@ -55,8 +55,8 @@ class PreferenceRow: # implemented as Spin Row # BUG: wont accept any input self.widget = Adw.SpinRow() - self.widget.set_title(pref.name) - self.widget.set_subtitle(pref.description) + self.widget.set_title(pref.name.replace("&", "&")) + self.widget.set_subtitle(pref.description.replace("&", "&")) self.current_value = float(pref.value) self.widget.set_value(self.current_value) self.widget.connect( @@ -67,8 +67,8 @@ class PreferenceRow: self.widget.connect(lambda v: self.pass_to_callback(v)) elif pref.type is PreferenceType.HIDDEN: self.widget = Adw.ActionRow() - self.widget.set_title(pref.name) - self.widget.set_subtitle(pref.description) + self.widget.set_title(pref.name.replace("&", "&")) + self.widget.set_subtitle(pref.description.replace("&", "&")) reset_btn = IconButton( "", "object-rotate-left-symbolic", tooltip=_("Reset value") ) @@ -78,8 +78,8 @@ class PreferenceRow: else: # shouldn't be reachable self.widget = Adw.ActionRow() - self.widget.set_title(pref.name) - self.widget.set_subtitle(pref.description) + self.widget.set_title(pref.name.replace("&", "&")) + self.widget.set_subtitle(pref.description.replace("&", "&")) def pass_to_callback(self, value): if value == self.current_value: @@ -124,15 +124,15 @@ class MultiRow(Adw.PreferencesRow): self.inner.set_margin_start(padding) self.inner.set_margin_end(padding) self.set_child(self.inner) - self.inner.set_title(self.pref.name) - self.inner.set_description(self.pref.description) + self.inner.set_title(self.pref.name.replace("&", "&")) + self.inner.set_description(self.pref.description.replace("&", "&")) self.adder = IconButton(_("Add"), "list-add-symbolic") self.adder.connect("clicked", lambda x: self.open_add()) self.inner.set_header_suffix(self.adder) # create items list for index, item in enumerate(self.values): row = Adw.ActionRow() - row.set_title(item) + row.set_title(item.replace("&", "&")) drag_source = Gtk.DragSource() drag_source.set_content( Gdk.ContentProvider.new_union( -- 2.38.5