mirror of
https://github.com/morgan9e/warehouse
synced 2026-04-14 00:04:08 +09:00
Allow batch creation of new snapshots for already snapshotted apps
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user