Allow batch creation of new snapshots for already snapshotted apps

This commit is contained in:
Heliguy
2024-09-28 19:57:48 -04:00
parent 93df6e9bc1
commit c0b74de74c
3 changed files with 27 additions and 13 deletions

View File

@@ -143,17 +143,18 @@ class NewSnapshotDialog(Adw.Dialog):
i += 1
row.check_button.set_active(True)
def set_single(self, package):
row = AppRow(package)
row.set_activatable(False)
self.selected_rows.append(row)
self.listbox.append(row)
def set_packages(self, packages):
for package in packages:
row = AppRow(package)
row.set_activatable(False)
self.selected_rows.append(row)
self.listbox.append(row)
def enter_handler(self, *args):
if self.create_button.get_sensitive():
self.create_button.activate()
def __init__(self, snapshot_page, loading_status, on_done=None, package=None, **kwargs):
def __init__(self, snapshot_page, loading_status, on_done=None, packages=None, **kwargs):
super().__init__(**kwargs)
# Extra Object Creations
@@ -177,13 +178,15 @@ class NewSnapshotDialog(Adw.Dialog):
# Apply
self.listbox.set_sort_func(self.sort_func)
self.listbox.set_filter_func(self.filter_func)
if not package is None:
self.name_entry.set_title(_("Name these Snapshots"))
if not packages is None:
self.search_entry.set_editable(False)
self.search_button.set_visible(False)
self.nav_page.set_title(_("New Snapshot"))
self.name_entry.set_title(_("Name this Snapshot"))
self.set_single(package)
if len(packages) == 1:
self.name_entry.set_title(_("Name this Snapshot"))
self.set_packages(packages)
self.no_results.set_visible(False)
else:
self.nav_page.set_title(_("New Snapshots"))
self.name_entry.set_title(_("Name these Snapshots"))
self.generate_list()

View File

@@ -6,6 +6,7 @@ from .snapshots_list_page import SnapshotsListPage
from .sidebar_button import SidebarButton
from .loading_status import LoadingStatus
from .new_snapshot_dialog import NewSnapshotDialog
from .tar_worker import TarWorker
import os, subprocess
class LeftoverSnapshotRow(Adw.ActionRow):
@@ -183,7 +184,7 @@ class SnapshotPage(Adw.BreakpointBin):
self.toast_overlay.add_toast(Adw.Toast(title=_("Showing snapshots for {}").format(package.info['name'])))
break
else:
dialog = NewSnapshotDialog(self, self.snapshotting_status, self.refresh, package)
dialog = NewSnapshotDialog(self, self.snapshotting_status, self.refresh, [package])
toast = Adw.Toast(title=_("No snapshots for {}").format(package.info['name']), button_label=_("New"))
toast.connect("button-clicked", lambda *_: dialog.present(HostInfo.main_window))
self.toast_overlay.add_toast(toast)
@@ -347,17 +348,27 @@ class SnapshotPage(Adw.BreakpointBin):
except subprocess.CalledProcessError as cpe:
self.toast_overlay.add_toast(ErrorToast(_("Could not trash snapshots"), cpe.stderr).toast)
dialog = Adw.AlertDialog(heading=_("Trash Snapshots?"), body=_("These snapshots will be sent to the trash"))
dialog = Adw.AlertDialog(heading=_("Trash Snapshots?"), body=_("These apps' snapshots will be sent to the trash"))
dialog.add_response("cancel", _("Cancel"))
dialog.add_response("continue", _("Trash"))
dialog.set_response_appearance("continue", Adw.ResponseAppearance.DESTRUCTIVE)
dialog.connect("response", on_response)
dialog.present(HostInfo.main_window)
def select_new_handler(self):
packages = []
for row in self.selected_active_rows:
if os.path.exists(row.package.data_path):
packages.append(row.package)
NewSnapshotDialog(self, self.snapshotting_status, self.refresh, packages).present(HostInfo.main_window)
def more_menu_handler(self, listbox, row):
self.more_popover.popdown()
row = row.get_child()
match row:
case self.new_snapshots:
self.select_new_handler()
case self.trash_snapshots:
self.select_trash_handler()

View File

@@ -71,7 +71,7 @@ class SnapshotsListPage(Adw.NavigationPage):
self.set_snapshots(self.package_or_folder, refresh=True)
def on_new(self, button):
dialog = NewSnapshotDialog(self.parent_page, self.parent_page.snapshotting_status, self.on_done, self.package_or_folder)
dialog = NewSnapshotDialog(self.parent_page, self.parent_page.snapshotting_status, self.on_done, [self.package_or_folder])
dialog.present(HostInfo.main_window)
def sort_func(self, row1, row2):