More work on install page

This commit is contained in:
Heliguy
2024-08-24 14:45:37 -04:00
parent 087b0452e5
commit 76fdbde9e7
5 changed files with 53 additions and 25 deletions

View File

@@ -9,8 +9,9 @@ class InstallPage(Adw.BreakpointBin):
gtc = Gtk.Template.Child
break_point = gtc()
select_page = gtc()
split_view = gtc()
select_page = gtc()
pending_page = gtc()
# Referred to in the main window
# It is used to determine if a new page should be made or not
@@ -45,3 +46,4 @@ class InstallPage(Adw.BreakpointBin):
# Apply
# ======== self.split_view.set_sidebar(self.select_page)
# ======== self.split_view.set_content(self.pending_page)
self.select_page.results_page.pending_page = self.pending_page

View File

@@ -14,14 +14,6 @@ template $PendingPage : Adw.NavigationPage {
description: _("Packages queued to install will show up here");
}
Adw.PreferencesPage preferences_page {
Adw.PreferencesGroup {
title: "Flathub";
description: "Installation: system";
Adw.ActionRow {
title: "Firefox";
subtitle: "org.mozilla.Firefox";
}
}
}
}
[bottom]

View File

@@ -34,27 +34,49 @@ class PendingPage(Adw.NavigationPage):
none_pending = gtc()
preferences_page = gtc()
def add_package(self, row):
def add_package_row(self, row):
self.added_packages.append(row.package)
row.set_state(ResultRow.PackageState.SELECTED)
key = f"{row.package.remote}<>{row.package.installation}"
row = ResultRow(row.package, ResultRow.PackageState.ADDED)
row.connect("activated", self.remove_package, group)
added_row = ResultRow(row.package, ResultRow.PackageState.ADDED, row.origin_list_box)
group = None
try:
group = self.groups[key]
group.add_row(row)
group.add_row(added_row)
except KeyError:
group = AddedGroup(row.package.remote, row.package.installation)
group.add_row(row)
group = AddedGroup(added_row.package.remote, added_row.package.installation)
group.add_row(added_row)
self.groups[key] = group
self.preferences_page.append(group)
self.preferences_page.add(group)
def remove_package(self, row, group):
pass
added_row.connect("activated", self.remove_package_row, group)
self.stack.set_visible_child(self.preferences_page)
def remove_package_row(self, row, group):
# row.origin_row.set_state(ResultRow.PackageState.NEW)
for item in row.origin_list_box:
if item.state == ResultRow.PackageState.SELECTED and item.package.is_similar(row.package):
item.set_state(ResultRow.PackageState.NEW)
break
group.rem_row(row)
if row.package in self.added_packages:
self.added_packages.remove(row.package)
if len(group.rows) == 0:
key = f"{row.package.remote}<>{row.package.installation}"
self.groups.pop(key, None)
self.preferences_page.remove(group)
if len(self.added_packages) == 0:
self.stack.set_visible_child(self.none_pending)
def __init__(self, **kwargs):
super().__init__(**kwargs)
# Extra Object Creation
self.groups = {} # remote<>installation: adw.preference_group
self.added_packages = []
# Connections

View File

@@ -30,7 +30,7 @@ class ResultRow(Adw.ActionRow):
self.version_label.set_visible(len(self.version_label.get_label()) != 0)
self.branch_label.set_visible(len(self.branch_label.get_label()) != 0)
def update_state_handler(self, state):
def set_state(self, state):
if state == self.state:
return
@@ -57,15 +57,17 @@ class ResultRow(Adw.ActionRow):
self.set_tooltip_text(_("This Package is Already Installed"))
self.installed_image.set_visible(True)
def __init__(self, package, package_state, parent_row=None, **kwargs):
def __init__(self, package, package_state, origin_list_box, **kwargs):
super().__init__(**kwargs)
# Extra Object Creation
self.state = None
self.package = package
self.origin_list_box = origin_list_box
# Connections
# Apply
GLib.idle_add(self.idle_stuff)
self.update_state_handler(package_state)
self.set_state(package_state)

View File

@@ -56,8 +56,8 @@ class ResultsPage(Adw.NavigationPage):
if nav_view:
nav_view.push(self)
def add_package(self, row):
print(row)
def add_package_row(self, row):
self.pending_page.add_package_row(row)
def on_search(self, *args):
self.packages.clear()
@@ -96,8 +96,17 @@ class ResultsPage(Adw.NavigationPage):
continue
package = AddedPackage(info[0], info[2], info[4], info[3], self.remote, self.installation)
row = ResultRow(package, ResultRow.PackageState.NEW)
row.connect("activated", self.add_package)
row = ResultRow(package, ResultRow.PackageState.NEW, self.results_list)
for item in self.pending_page.added_packages:
if package.is_similar(item):
row.set_state(ResultRow.PackageState.SELECTED)
if package.app_id in HostInfo.id_to_flatpak:
installed_package = HostInfo.id_to_flatpak[package.app_id]
if installed_package.info["id"] == package.app_id and installed_package.info["branch"] == package.branch:
row.set_state(ResultRow.PackageState.INSTALLED)
row.connect("activated", self.add_package_row)
self.packages.append(package)
GLib.idle_add(lambda *_, _row=row: self.results_list.append(_row))
@@ -126,6 +135,7 @@ class ResultsPage(Adw.NavigationPage):
self.remote = None
self.installation = None
self.packages = []
self.pending_page = None
# Connections
self.search_entry.connect("activate", self.on_search)