diff --git a/src/install_page/install_page.py b/src/install_page/install_page.py index 18f12c8..6073271 100644 --- a/src/install_page/install_page.py +++ b/src/install_page/install_page.py @@ -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 diff --git a/src/install_page/pending_page.blp b/src/install_page/pending_page.blp index 1bce7d2..ef98bb4 100644 --- a/src/install_page/pending_page.blp +++ b/src/install_page/pending_page.blp @@ -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] diff --git a/src/install_page/pending_page.py b/src/install_page/pending_page.py index c49b871..8d93ecb 100644 --- a/src/install_page/pending_page.py +++ b/src/install_page/pending_page.py @@ -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 diff --git a/src/install_page/result_row.py b/src/install_page/result_row.py index 88911f3..78a0cca 100644 --- a/src/install_page/result_row.py +++ b/src/install_page/result_row.py @@ -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) + diff --git a/src/install_page/results_page.py b/src/install_page/results_page.py index 39e55b5..f2ba938 100644 --- a/src/install_page/results_page.py +++ b/src/install_page/results_page.py @@ -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)