From 77ffca3bd71e55111b9877745bad7c8734eca6e4 Mon Sep 17 00:00:00 2001 From: heliguy Date: Sat, 9 Dec 2023 05:55:58 -0500 Subject: [PATCH] Merge manage remotes and popular remotes window --- data/ui/popular_remotes.blp | 59 ----------------- data/ui/remotes.blp | 7 +- src/meson.build | 2 - src/popular_remotes_window.py | 80 ----------------------- src/remotes_window.py | 116 ++++++++++++++++++++++------------ src/warehouse.gresource.xml | 1 - 6 files changed, 76 insertions(+), 189 deletions(-) delete mode 100644 data/ui/popular_remotes.blp delete mode 100644 src/popular_remotes_window.py diff --git a/data/ui/popular_remotes.blp b/data/ui/popular_remotes.blp deleted file mode 100644 index d0d11e9..0000000 --- a/data/ui/popular_remotes.blp +++ /dev/null @@ -1,59 +0,0 @@ -using Gtk 4.0; -using Adw 1; - -template PopularRemotesWindow: Adw.Window { - default-width: 450; - default-height: 530; - title: ""; - - Adw.ToolbarView main_toolbar_view { - [top] - HeaderBar header_bar {} - - content: Adw.ToastOverlay toast_overlay { - vexpand: true; - - Adw.StatusPage { - valign: start; - title: _("Add Remote"); - description: _("Choose from a list of popular remotes or add a new one."); - - Adw.Clamp { - Box { - orientation: vertical; - - ListBox list_of_remotes { - hexpand: true; - valign: start; - selection-mode: none; - - styles [ - "boxed-list" - ] - } - - ListBox custom_list { - hexpand: true; - valign: start; - selection-mode: none; - - styles [ - "boxed-list" - ] - - Adw.ActionRow add_from_file { - title: _("Add a Repo File"); - activatable: true; - } - - Adw.ActionRow custom_remote { - title: _("Add a Custom Remote"); - activatable: true; - } - } - } - } - } - }; - } -} diff --git a/data/ui/remotes.blp b/data/ui/remotes.blp index 3945d61..be8a056 100644 --- a/data/ui/remotes.blp +++ b/data/ui/remotes.blp @@ -9,12 +9,6 @@ template RemotesWindow: Adw.Window { Adw.ToolbarView main_toolbar_view { [top] HeaderBar header_bar { - Button add_button { - Adw.ButtonContent { - label: _("Add Remote"); - icon-name: "plus-large-symbolic"; - } - } } content: Adw.ToastOverlay toast_overlay { @@ -33,6 +27,7 @@ template RemotesWindow: Adw.Window { } Adw.PreferencesGroup popular_remotes_list { title: _("Add a Popular Remote"); + visible: false; } Adw.PreferencesGroup manual_remotes_list { title: _("Add Other Remotes"); diff --git a/src/meson.build b/src/meson.build index ec066d3..8039d31 100644 --- a/src/meson.build +++ b/src/meson.build @@ -8,7 +8,6 @@ blueprints = custom_target('blueprints', '../data/ui/window.blp', '../data/ui/orphans.blp', '../data/ui/filter.blp', - '../data/ui/popular_remotes.blp', '../data/ui/remotes.blp', '../data/ui/downgrade.blp', '../data/ui/search_install.blp', @@ -57,7 +56,6 @@ warehouse_sources = [ 'main.py', 'common.py', 'window.py', - 'popular_remotes_window.py', 'app_row_widget.py', '../data/style.css', diff --git a/src/popular_remotes_window.py b/src/popular_remotes_window.py deleted file mode 100644 index 3429f06..0000000 --- a/src/popular_remotes_window.py +++ /dev/null @@ -1,80 +0,0 @@ -from gi.repository import Gtk, Adw, GLib, Gdk, Gio -from .common import myUtils -import subprocess -import os -import pathlib -import re - -@Gtk.Template(resource_path="/io/github/flattool/Warehouse/../data/ui/popular_remotes.ui") -class PopularRemotesWindow(Adw.Window): - __gtype_name__ = "PopularRemotesWindow" - - list_of_remotes = Gtk.Template.Child() - custom_list = Gtk.Template.Child() - toast_overlay = Gtk.Template.Child() - add_from_file = Gtk.Template.Child() - custom_remote = Gtk.Template.Child() - - def key_handler(self, _a, event, _c, _d): - if event == Gdk.KEY_Escape: - self.close() - - def file_callback(self, object, result): - try: - file = object.open_finish(result) - self.parent_window.addRemoteFromFile(file.get_path()) - self.close() - except GLib.GError: - pass - - def addFromFileHandler(self, widet): - filter = Gtk.FileFilter(name=_("Flatpak Repos")) - filter.add_suffix("flatpakrepo") - filters = Gio.ListStore.new(Gtk.FileFilter) - filters.append(filter) - file_chooser = Gtk.FileDialog() - file_chooser.set_filters(filters) - file_chooser.set_default_filter(filter) - file_chooser.open(self, None, self.file_callback) - - def generate_list(self): - self.host_remotes = self.my_utils.getHostRemotes() - self.list_of_remotes.remove_all() - host_remotes_names = [] - - for i in range(len(self.remotes)): - remote_row = Adw.ActionRow(activatable=True) - remote_row.set_title(self.remotes[i][0]) - remote_row.set_subtitle(self.remotes[i][3]) - remote_row.add_suffix(Gtk.Image.new_from_icon_name("right-large-symbolic")) - remote_row.connect("activated", self.parent_window.add_handler, self.remotes[i][1], self.remotes[i][2]) - remote_row.connect("activated", lambda *_: self.close()) - self.list_of_remotes.append(remote_row) - - self.add_from_file.add_suffix(Gtk.Image.new_from_icon_name("right-large-symbolic")) - self.add_from_file.connect("activated", self.addFromFileHandler) - #self.add_from_file.connect("activated", lambda *_: self.close()) - - self.custom_remote.add_suffix(Gtk.Image.new_from_icon_name("right-large-symbolic")) - self.custom_remote.connect("activated", self.parent_window.add_handler) - self.custom_remote.connect("activated", lambda *_: self.close()) - - if not self.list_of_remotes.get_row_at_index(0): - self.list_of_remotes.set_visible(False) - - def __init__(self, parent_window, remotes, **kwargs): - super().__init__(**kwargs) - self.my_utils = myUtils(self) - self.parent_window = parent_window - self.set_size_request(260, 230) - event_controller = Gtk.EventControllerKey() - event_controller.connect("key-pressed", self.key_handler) - self.add_controller(event_controller) - self.remotes = remotes - - self.new_env = dict( os.environ ) - self.new_env['LC_ALL'] = 'C' - - self.set_modal(True) - self.set_transient_for(parent_window) - self.generate_list() diff --git a/src/remotes_window.py b/src/remotes_window.py index ad73276..c7ab3f5 100644 --- a/src/remotes_window.py +++ b/src/remotes_window.py @@ -1,6 +1,5 @@ from gi.repository import Gtk, Adw, GLib, Gdk, Gio from .common import myUtils -from .popular_remotes_window import PopularRemotesWindow import subprocess import os import re @@ -9,7 +8,6 @@ import re class RemotesWindow(Adw.Window): __gtype_name__ = "RemotesWindow" - add_button = Gtk.Template.Child() remotes_list = Gtk.Template.Child() stack = Gtk.Template.Child() main_group = Gtk.Template.Child() @@ -18,8 +16,12 @@ class RemotesWindow(Adw.Window): popular_remotes_list = Gtk.Template.Child() add_from_file = Gtk.Template.Child() custom_remote = Gtk.Template.Child() + refresh = Gtk.Template.Child() # progress_bar = Gtk.Template.Child() + rows_in_list = [] + rows_in_popular_list = [] + def key_handler(self, _a, event, _c, _d): if event == Gdk.KEY_Escape: self.close() @@ -68,6 +70,10 @@ class RemotesWindow(Adw.Window): def generate_list(self): self.host_remotes = self.my_utils.getHostRemotes() self.host_flatpaks = self.get_host_flatpaks() + for i in range(len(self.rows_in_list)): + self.remotes_list.remove(self.rows_in_list[i]) + + self.rows_in_list = [] def rowCopyHandler(widget, to_copy): self.app_window.clipboard.set(to_copy) @@ -100,11 +106,50 @@ class RemotesWindow(Adw.Window): remove_button.connect("clicked", self.remove_handler, i) remote_row.add_suffix(copy_button) remote_row.add_suffix(remove_button) + self.rows_in_list.append(remote_row) except Exception as e: print("Could not get remote. Error:", e) + # Popular remotes + for i in range(len(self.rows_in_popular_list)): + self.popular_remotes_list.remove(self.rows_in_popular_list[i]) + + self.rows_in_popular_list = [] + + remotes = [ + # [Name to show in GUI, Name of remote for system, Link to repo to add, Description of remote] + ["AppCenter", "appcenter", "https://flatpak.elementary.io/repo.flatpakrepo", _("The open source, pay-what-you-want app store from elementary")], + ["Flathub", "flathub", "https://dl.flathub.org/repo/flathub.flatpakrepo", _("Central repository of Flatpak applications")], + ["Flathub beta", "flathub-beta", "https://flathub.org/beta-repo/flathub-beta.flatpakrepo", _("Beta builds of Flatpak applications")], + ["Fedora", "fedora", "oci+https://registry.fedoraproject.org", _("Flatpaks packaged by Fedora Linux")], + ["GNOME Nightly", "gnome-nightly", "https://nightly.gnome.org/gnome-nightly.flatpakrepo", _("The latest beta GNOME Apps and Runtimes")], + ["KDE Testing Applications", "kdeapps", "https://distribute.kde.org/kdeapps.flatpakrepo", _("Beta KDE Apps and Runtimes")], + ["WebKit Developer SDK", "webkit-sdk", "https://software.igalia.com/flatpak-refs/webkit-sdk.flatpakrepo", _("Central repository of the WebKit Developer and Runtime SDK")], + ] + + host_remotes = self.my_utils.getHostRemotes() + host_remotes_names = [] + + total_added = 0 + + for i in range(len(self.host_remotes)): + host_remotes_names.append(self.host_remotes[i][0]) + + for i in range(len(remotes)): + if remotes[i][1] in host_remotes_names: + continue + + total_added += 1 + row = Adw.ActionRow(title=remotes[i][0], subtitle=(remotes[i][2]), activatable=True) + row.connect("activated", self.add_handler, remotes[i][1], remotes[i][2]) + row.add_suffix(Gtk.Image.new_from_icon_name("right-large-symbolic")) + self.rows_in_popular_list.append(row) + self.popular_remotes_list.add(row) + + self.popular_remotes_list.set_visible(total_added > 0) + def addRemoteCallback(self, _a, _b): - pass + self.generate_list() def addRemoteThread(self, command): try: @@ -113,7 +158,7 @@ class RemotesWindow(Adw.Window): self.toast_overlay.add_toast(Adw.Toast.new(_("Could not add {}").format(self.name_to_add))) print(e) - def on_add_response(self, _dialog, response_id, _function): + def on_add_response(self, _dialog, response_id, _function, row): if response_id == "cancel": self.should_pulse = False return @@ -129,7 +174,7 @@ class RemotesWindow(Adw.Window): task = Gio.Task.new(None, None, self.addRemoteCallback) task.run_in_thread(lambda _task, _obj, _data, _cancellable: self.addRemoteThread(command)) - def add_handler(self, _widget, name="", link=""): + def add_handler(self, row, name="", link=""): dialog = Adw.MessageDialog.new(self, _("Add Flatpak Remote")) dialog.set_close_response("cancel") dialog.add_response("cancel", _("Cancel")) @@ -221,7 +266,7 @@ class RemotesWindow(Adw.Window): info_box.append(install_type_list) dialog.set_extra_child(info_box) - dialog.connect("response", self.on_add_response, dialog.choose_finish) + dialog.connect("response", self.on_add_response, dialog.choose_finish, row) Gtk.Window.present(dialog) if name != "": @@ -243,7 +288,6 @@ class RemotesWindow(Adw.Window): self.should_pulse = False return - self.progress_bar.set_visible(True) user_or_system = "user" if system_check.get_active(): user_or_system = "system" @@ -269,7 +313,6 @@ class RemotesWindow(Adw.Window): dialog.set_response_enabled("continue", is_enabled) self.should_pulse = True - self.mainPulser() name = filepath.split('/') name = name[len(name) - 1] @@ -308,38 +351,24 @@ class RemotesWindow(Adw.Window): user_check.set_active(True) options_list.add_css_class("boxed-list") Gtk.Window.present(dialog) - - def show_new_remote_options(self): - - remotes = [ - # [Name to show in GUI, Name of remote for system, Link to repo to add, Description of remote] - ["AppCenter", "appcenter", "https://flatpak.elementary.io/repo.flatpakrepo", _("The open source, pay-what-you-want app store from elementary")], - ["Flathub", "flathub", "https://dl.flathub.org/repo/flathub.flatpakrepo", _("Central repository of Flatpak applications")], - ["Flathub beta", "flathub-beta", "https://flathub.org/beta-repo/flathub-beta.flatpakrepo", _("Beta builds of Flatpak applications")], - ["Fedora", "fedora", "oci+https://registry.fedoraproject.org", _("Flatpaks packaged by Fedora Linux")], - ["GNOME Nightly", "gnome-nightly", "https://nightly.gnome.org/gnome-nightly.flatpakrepo", _("The latest beta GNOME Apps and Runtimes")], - ["KDE Testing Applications", "kdeapps", "https://distribute.kde.org/kdeapps.flatpakrepo", _("Beta KDE Apps and Runtimes")], - ["WebKit Developer SDK", "webkit-sdk", "https://software.igalia.com/flatpak-refs/webkit-sdk.flatpakrepo", _("Central repository of the WebKit Developer and Runtime SDK")], - ] - - host_remotes = self.my_utils.getHostRemotes() - host_remotes_names = [] - - for i in range(len(self.host_remotes)): - host_remotes_names.append(self.host_remotes[i][0]) - - for i in range(len(remotes)): - if remotes[i][1] in host_remotes_names: - continue - - row = Adw.ActionRow(title=remotes[i][0], subtitle=(remotes[i][2]), activatable=True) - row.connect("activated", self.add_handler, remotes[i][1], remotes[i][2]) - row.add_suffix(Gtk.Image.new_from_icon_name("right-large-symbolic")) - self.popular_remotes_list.add(row) - - self.add_from_file.add_suffix(Gtk.Image.new_from_icon_name("right-large-symbolic")) - self.custom_remote.add_suffix(Gtk.Image.new_from_icon_name("right-large-symbolic")) + def file_callback(self, object, result): + try: + file = object.open_finish(result) + self.addRemoteFromFile(file.get_path()) + except GLib.GError: + pass + + def addFromFileHandler(self, widet): + filter = Gtk.FileFilter(name=_("Flatpak Repos")) + filter.add_suffix("flatpakrepo") + filters = Gio.ListStore.new(Gtk.FileFilter) + filters.append(filter) + file_chooser = Gtk.FileDialog() + file_chooser.set_filters(filters) + file_chooser.set_default_filter(filter) + file_chooser.open(self, None, self.file_callback) + def __init__(self, main_window, **kwargs): super().__init__(**kwargs) @@ -360,9 +389,14 @@ class RemotesWindow(Adw.Window): event_controller = Gtk.EventControllerKey() event_controller.connect("key-pressed", self.key_handler) self.add_controller(event_controller) - + self.refresh.connect("clicked", lambda *_: self.generate_list()) self.set_transient_for(main_window) + self.add_from_file.add_suffix(Gtk.Image.new_from_icon_name("right-large-symbolic")) + self.add_from_file.connect("activated", self.addFromFileHandler) + self.custom_remote.add_suffix(Gtk.Image.new_from_icon_name("right-large-symbolic")) + self.custom_remote.connect("activated", self.add_handler) + # Calls self.generate_list() - self.show_new_remote_options() \ No newline at end of file + # self.show_new_remote_options() \ No newline at end of file diff --git a/src/warehouse.gresource.xml b/src/warehouse.gresource.xml index 844eb65..36c36ed 100644 --- a/src/warehouse.gresource.xml +++ b/src/warehouse.gresource.xml @@ -4,7 +4,6 @@ ../data/ui/window.ui ../data/ui/orphans.ui ../data/ui/filter.ui - ../data/ui/popular_remotes.ui ../data/ui/remotes.ui ../data/ui/downgrade.ui ../data/ui/search_install.ui