mirror of
https://github.com/morgan9e/warehouse
synced 2026-04-14 00:04:08 +09:00
More work on install page
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user