Filters now actually filter the list

This commit is contained in:
heliguy
2024-07-12 18:28:49 -04:00
parent 0659f4ed01
commit 57cfd48061
3 changed files with 64 additions and 36 deletions

View File

@@ -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 {

View File

@@ -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)

View File

@@ -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)