mirror of
https://github.com/morgan9e/warehouse
synced 2026-04-14 00:04:08 +09:00
Filters now actually filter the list
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user