diff --git a/src/filters_page/filters_page.blp b/src/filters_page/filters_page.blp index 6126cf7..6f32502 100644 --- a/src/filters_page/filters_page.blp +++ b/src/filters_page/filters_page.blp @@ -5,12 +5,7 @@ template $FiltersPage : Adw.NavigationPage { title: _("Filter Packages"); Adw.ToolbarView { [top] - Adw.HeaderBar { - [start] - Button test_button { - label: "Test"; - } - } + Adw.HeaderBar {} ScrolledWindow { Adw.Clamp { Box { diff --git a/src/filters_page/filters_page.py b/src/filters_page/filters_page.py index 6dd330b..2481896 100644 --- a/src/filters_page/filters_page.py +++ b/src/filters_page/filters_page.py @@ -16,7 +16,6 @@ class FilterRow(Adw.ActionRow): class FiltersPage(Adw.NavigationPage): __gtype_name__ = 'FiltersPage' gtc = Gtk.Template.Child - test_button = gtc() app_check = gtc() @@ -33,11 +32,11 @@ class FiltersPage(Adw.NavigationPage): if not self.is_settings_settable: return self.settings.set_boolean("show-apps", self.show_apps) - self.settings.set_boolean("show-runtimes", self.show_runtimes) self.settings.set_string("remotes-list", self.remotes_string) + self.settings.set_boolean("show-runtimes", self.show_runtimes) self.settings.set_string("runtimes-list", self.runtimes_string) - self.total_sets += 1 - self.test() + self.packages_page.apply_filters() + print("set gsettings") def remote_row_check_handler(self, row): if row.check_button.get_active(): @@ -48,26 +47,22 @@ class FiltersPage(Adw.NavigationPage): def runtime_row_check_handler(self, row): if row.check_button.get_active(): - self.runtimes_string += f"{row.item}," + self.runtimes_string += f"{row.item};" else: - self.runtimes_string = self.runtimes_string.replace(f"{row.item},", "") + self.runtimes_string = self.runtimes_string.replace(f"{row.item};", "") self.update_gsettings() - def generate_list(self): - self.is_settings_settable = False - + def generate_remote_filters(self): for row in self.remote_rows: self.remotes_group.remove(row) - - for row in self.runtime_rows: - self.runtimes_group.remove(row) - self.remote_rows.clear() - self.runtime_rows.clear() - - self.app_check.set_active(self.show_apps) - self.runtime_check.set_active(self.show_runtimes) - + if len(HostInfo.remotes) < 2 and len(list(HostInfo.remotes.items())[0][1]) < 2: + self.remotes_group.set_visible(False) + if self.remotes_string != "all": + self.remotes_string = "all" + self.settings.set_string("remotes-list", self.remotes_string) + self.packages_page.apply_filters() + return for i, installation in enumerate(HostInfo.installations): try: for remote in HostInfo.remotes[installation]: @@ -83,6 +78,17 @@ class FiltersPage(Adw.NavigationPage): pass self.all_remotes_button.set_active("all" != self.remotes_string) + def generate_runtime_filters(self): + for row in self.runtime_rows: + self.runtimes_group.remove(row) + self.runtime_rows.clear() + if len(HostInfo.dependant_runtime_refs) < 2: + self.runtimes_group.set_visible(False) + if self.runtimes_string != "all": + self.runtimes_string = "all" + self.settings.set_string("runtimes-list", self.runtimes_string) + self.packages_page.apply_filters() + return for j, ref in enumerate(HostInfo.dependant_runtime_refs): row = FilterRow(ref) row.set_title(ref) @@ -92,6 +98,16 @@ class FiltersPage(Adw.NavigationPage): self.runtime_rows.append(row) self.runtimes_group.add(row) self.all_runtimes_button.set_active("all" != self.runtimes_string) + + def generate_list(self): + self.is_settings_settable = False + + self.app_check.set_active(self.show_apps) + self.runtime_check.set_active(self.show_runtimes) + + self.generate_remote_filters() + self.generate_runtime_filters() + self.is_settings_settable = True def all_remotes_handler(self, switch, state): @@ -116,20 +132,12 @@ class FiltersPage(Adw.NavigationPage): for row in self.runtime_rows: row.set_visible(state) if state and row.check_button.get_active(): - self.runtimes_string += row.item + self.runtimes_string += f"{row.item};" elif state: - self.runtimes_string.replace + self.runtimes_string.replace(f"{row.item};", "") self.update_gsettings() - def test(self, *args): - print('\n-------------------------------------') - print(self.settings.get_boolean("show-apps")) - print(self.settings.get_boolean("show-runtimes")) - print(self.settings.get_string("remotes-list")) - print(self.settings.get_string("runtimes-list")) - print("total sets:", self.total_sets) - def app_check_handler(self, *args): self.show_apps = self.app_check.get_active() self.update_gsettings() @@ -142,15 +150,19 @@ class FiltersPage(Adw.NavigationPage): super().__init__(**kwargs) # Extra Objects Creation + self.packages_page = packages_page self.settings = Gio.Settings.new("io.github.flattool.Warehouse.filter") self.is_settings_settable = False self.show_apps = self.settings.get_boolean("show-apps") self.show_runtimes = self.settings.get_boolean("show-runtimes") self.remotes_string = self.settings.get_string("remotes-list") self.runtimes_string = self.settings.get_string("runtimes-list") - self.total_sets = 0 # Apply + if "," in self.runtimes_string: + # Convert Warehouse 1.X runtimes filter string from , to ; for item seperationg + self.runtimes_string = self.runtimes_string.replace(",", ";") + self.settings.set_string("runtimes-list", self.runtimes_string) # Connections self.test_button.connect("clicked", self.test) diff --git a/src/packages_page/packages_page.py b/src/packages_page/packages_page.py index 36902f2..5be4585 100644 --- a/src/packages_page/packages_page.py +++ b/src/packages_page/packages_page.py @@ -1,4 +1,4 @@ -from gi.repository import Adw, Gtk, GLib#, Gio, Pango +from gi.repository import Adw, Gtk, GLib, Gio from .host_info import HostInfo from .app_row import AppRow from .error_toast import ErrorToast @@ -31,6 +31,25 @@ class PackagesPage(Adw.BreakpointBin): # This must be set to the created object from within the class's __init__ method instance = None + def apply_filters(self): + i = 0 + show_apps = self.filter_settings.get_boolean("show-apps") + show_runtimes = self.filter_settings.get_boolean("show-runtimes") + remotes_list = self.filter_settings.get_string("remotes-list") + runtimes_list = self.filter_settings.get_string("runtimes-list") + while row := self.packages_list_box.get_row_at_index(i): + i += 1 + visible = True + if row.package.is_runtime and not show_runtimes: + visible = False + if (not row.package.is_runtime) and (not show_apps): + visible = False + if remotes_list != "all" and not f"{row.package.info['origin']}<>{row.package.info['installation']}" in remotes_list: + visible = False + if runtimes_list != "all" and (row.package.is_runtime or row.package.dependant_runtime and not row.package.dependant_runtime.info["ref"] in runtimes_list): + visible = False + GLib.idle_add(row.set_visible, visible) + def generate_list(self, *args): self.packages_list_box.remove_all() GLib.idle_add(lambda *_: self.filters_page.generate_list()) @@ -57,6 +76,7 @@ class PackagesPage(Adw.BreakpointBin): self.packages_list_box.select_row(first_row) self.properties_page.set_properties(first_row.package) self.scrolled_window.set_vadjustment(Gtk.Adjustment.new(0,0,0,0,0,0)) # Scroll list to top + self.apply_filters() def row_select_handler(self, list_box, row): self.properties_page.set_properties(row.package) @@ -112,6 +132,7 @@ class PackagesPage(Adw.BreakpointBin): self.filters_page = FiltersPage(main_window, self) self.loading_status = StatusBox(_("Fetching Packages"), _("This should only take a moment")) self.uninstall_status = StatusBox(_("Uninstalling…"), _("This should only take a moment")) + self.filter_settings = Gio.Settings.new("io.github.flattool.Warehouse.filter") # Apply self.set_status(self.loading_status)