mirror of
https://github.com/morgan9e/warehouse
synced 2026-04-14 00:04:08 +09:00
Add loading status and make it like work and whatnot
This commit is contained in:
@@ -28,6 +28,26 @@ template $LoadingStatus : ScrolledWindow {
|
||||
justify: center;
|
||||
styles ["description", "body"]
|
||||
}
|
||||
Adw.Clamp progress_clamp {
|
||||
margin-start: 24;
|
||||
margin-end: 24;
|
||||
margin-top: 12;
|
||||
margin-bottom: 12;
|
||||
maximum-size: 400;
|
||||
Box {
|
||||
halign: fill;
|
||||
hexpand: true;
|
||||
spacing: 12;
|
||||
ProgressBar progress_bar {
|
||||
halign: fill;
|
||||
hexpand: true;
|
||||
valign: center;
|
||||
}
|
||||
Label progress_label {
|
||||
valign: center;
|
||||
}
|
||||
}
|
||||
}
|
||||
Button button {
|
||||
label: "No Label Set";
|
||||
styles ["pill"]
|
||||
|
||||
@@ -8,14 +8,24 @@ class LoadingStatus(Gtk.ScrolledWindow):
|
||||
|
||||
title_label = gtc()
|
||||
description_label = gtc()
|
||||
progress_clamp = gtc()
|
||||
progress_bar = gtc()
|
||||
progress_label = gtc()
|
||||
button = gtc()
|
||||
|
||||
def set_progress_label(self, *args):
|
||||
text = self.progress_bar.get_fraction() * 100
|
||||
self.progress_label.set_label(f"{text:.0f}%")
|
||||
|
||||
def __init__(self, title, description, on_cancel=None, **kwargs):
|
||||
def __init__(self, title, description, show_progress=False, on_cancel=None, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
|
||||
self.title_label.set_label(GLib.markup_escape_text(title))
|
||||
self.description_label.set_label(GLib.markup_escape_text(description))
|
||||
self.progress_clamp.set_visible(show_progress)
|
||||
if on_cancel is None:
|
||||
self.button.set_visible(False)
|
||||
else:
|
||||
self.button.connect("clicked", on_cancel)
|
||||
self.button.connect("clicked", lambda *_: on_cancel)
|
||||
|
||||
# self.progress_bar.connect("notify::fraction", self.set_progress_label)
|
||||
|
||||
@@ -37,8 +37,12 @@ class NewSnapshotDialog(Adw.Dialog):
|
||||
|
||||
def generate_list(self, *args):
|
||||
for package in HostInfo.flatpaks:
|
||||
if "io.github.flattool.Warehouse" in package.info["id"]:
|
||||
continue
|
||||
|
||||
if package.is_runtime or not os.path.exists(package.data_path):
|
||||
continue
|
||||
|
||||
row = AppRow(package, self.row_gesture_handler)
|
||||
row.check_button.set_visible(True)
|
||||
row.check_button.connect("toggled", lambda *_, row=row: self.row_select_handler(row))
|
||||
@@ -58,7 +62,7 @@ class NewSnapshotDialog(Adw.Dialog):
|
||||
def on_close(self, *args):
|
||||
self.search_button.set_active(False)
|
||||
for row in self.selected_rows.copy():
|
||||
row.check_button.set_active(False)
|
||||
GLib.idle_add(lambda *_, row=row: row.check_button.set_active(False))
|
||||
|
||||
def valid_checker(self):
|
||||
valid = len(self.selected_rows) > 0 and len(self.name_entry.get_text().strip()) > 0
|
||||
@@ -71,17 +75,28 @@ class NewSnapshotDialog(Adw.Dialog):
|
||||
total += worker.fraction
|
||||
if worker.stop:
|
||||
stopped_workers_amount += 1
|
||||
|
||||
|
||||
if stopped_workers_amount == len(self.workers):
|
||||
self.loading_status.progress_bar.set_fraction(1)
|
||||
self.loading_status.progress_label.set_label(f"{len(self.workers)} / {len(self.workers)}")
|
||||
print("1.00")
|
||||
if self.on_done:
|
||||
self.on_done()
|
||||
|
||||
return False
|
||||
|
||||
self.loading_status.progress_label.set_label(f"{stopped_workers_amount} / {len(self.workers)}")
|
||||
|
||||
print(f"{total / len(self.workers):.2f}")
|
||||
print(total / len(self.workers))
|
||||
self.loading_status.progress_bar.set_fraction(total / len(self.workers))
|
||||
return True
|
||||
|
||||
def on_create(self, button):
|
||||
self.workers.clear()
|
||||
for row in self.selected_rows:
|
||||
if "io.github.flattool.Warehouse" in row.package.info["id"]:
|
||||
continue
|
||||
|
||||
package = row.package
|
||||
worker = TarWorker(
|
||||
existing_path=package.data_path,
|
||||
@@ -91,7 +106,9 @@ class NewSnapshotDialog(Adw.Dialog):
|
||||
)
|
||||
self.workers.append(worker)
|
||||
worker.compress()
|
||||
|
||||
GLib.timeout_add(10, self.get_total_fraction)
|
||||
self.close()
|
||||
|
||||
def on_invalidate(self, search_entry):
|
||||
self.listbox.invalidate_filter()
|
||||
@@ -112,10 +129,12 @@ class NewSnapshotDialog(Adw.Dialog):
|
||||
super().present(*args, **kwargs)
|
||||
self.name_entry.grab_focus()
|
||||
|
||||
def __init__(self, parent_page, package=None, **kwargs):
|
||||
def __init__(self, parent_page, loading_status, on_done=None, package=None, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
|
||||
# Extra Object Creations
|
||||
self.loading_status = loading_status
|
||||
self.on_done = on_done
|
||||
self.rows = []
|
||||
self.selected_rows = []
|
||||
self.workers = []
|
||||
|
||||
@@ -165,6 +165,13 @@ template $SnapshotPage : Adw.BreakpointBin {
|
||||
$SidebarButton {}
|
||||
}
|
||||
}
|
||||
Adw.ToolbarView snapshotting_view {
|
||||
[top]
|
||||
Adw.HeaderBar {
|
||||
[start]
|
||||
$SidebarButton {}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -50,6 +50,7 @@ class SnapshotPage(Adw.BreakpointBin):
|
||||
new_button = gtc()
|
||||
status_stack = gtc()
|
||||
loading_view = gtc()
|
||||
snapshotting_view = gtc()
|
||||
|
||||
# Referred to in the main window
|
||||
# It is used to determine if a new page should be made or not
|
||||
@@ -141,15 +142,16 @@ class SnapshotPage(Adw.BreakpointBin):
|
||||
self.leftover_select_handler(None, row, False, True)
|
||||
|
||||
def start_loading(self):
|
||||
self.status_stack.set_visible_child(self.loading_view)
|
||||
self.active_box.set_visible(True)
|
||||
self.active_listbox.remove_all()
|
||||
self.leftover_box.set_visible(True)
|
||||
self.leftover_listbox.remove_all()
|
||||
self.status_stack.set_visible_child(self.loading_view)
|
||||
|
||||
def end_loading(self):
|
||||
def callback(*args):
|
||||
self.new_snapshot_dialog = NewSnapshotDialog(self)
|
||||
self.new_snapshot_dialog = NewSnapshotDialog(self, self.snapshotting_status, self.refresh)
|
||||
self.new_snapshot_dialog.create_button.connect("clicked", lambda *_: self.status_stack.set_visible_child(self.snapshotting_view))
|
||||
self.generate_active_list()
|
||||
self.generate_leftover_list()
|
||||
if (not self.active_box.get_visible()) and (not self.leftover_box.get_visible()):
|
||||
@@ -158,7 +160,7 @@ class SnapshotPage(Adw.BreakpointBin):
|
||||
self.select_first_row()
|
||||
GLib.idle_add(lambda *_: self.stack.set_visible_child(self.scrolled_window))
|
||||
GLib.idle_add(lambda *_: self.status_stack.set_visible_child(self.split_view))
|
||||
|
||||
|
||||
Gio.Task.new(None, None, callback).run_in_thread(self.sort_snapshots)
|
||||
|
||||
def open_snapshots_folder(self, button, overlay):
|
||||
@@ -167,10 +169,20 @@ class SnapshotPage(Adw.BreakpointBin):
|
||||
overlay.add_toast(Adw.Toast.new(_("Opened snapshots folder")))
|
||||
except Exception as e:
|
||||
overlay.add_toast(ErrorToast(_("Could not open folder"), str(e)).toast)
|
||||
|
||||
|
||||
def on_cancel(self):
|
||||
pass
|
||||
|
||||
def on_new(self, *args):
|
||||
self.new_snapshot_dialog.present(HostInfo.main_window)
|
||||
|
||||
def refresh(self):
|
||||
self.start_loading()
|
||||
self.end_loading()
|
||||
|
||||
def __init__(self, main_window, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
|
||||
|
||||
# Extra Object Creation
|
||||
self.__class__.instance = self
|
||||
self.main_window = main_window
|
||||
@@ -179,15 +191,17 @@ class SnapshotPage(Adw.BreakpointBin):
|
||||
self.leftover_snapshots = []
|
||||
# self.leftover_rows = []
|
||||
self.list_page = SnapshotsListPage(self)
|
||||
self.snapshotting_status = LoadingStatus(_("Creating Snapshots"), _("This might take a while"), True, self.on_cancel)
|
||||
|
||||
# Connections
|
||||
self.active_listbox.connect("row-activated", self.active_select_handler)
|
||||
self.leftover_listbox.connect("row-activated", self.leftover_select_handler)
|
||||
self.open_button.connect("clicked", self.open_snapshots_folder, self.toast_overlay)
|
||||
self.status_open_button.connect("clicked", self.open_snapshots_folder, self.no_snapshots_toast)
|
||||
self.status_new_button.connect("clicked", lambda *_: self.new_snapshot_dialog.present(HostInfo.main_window))
|
||||
self.new_button.connect("clicked", lambda *_: self.new_snapshot_dialog.present(HostInfo.main_window))
|
||||
self.status_new_button.connect("clicked", self.on_new)
|
||||
self.new_button.connect("clicked", self.on_new)
|
||||
|
||||
# Apply
|
||||
self.loading_view.set_content(LoadingStatus(_("Loading Snapshots"), _("This should only take a moment")))
|
||||
self.snapshotting_view.set_content(self.snapshotting_status)
|
||||
self.split_view.set_content(self.list_page)
|
||||
|
||||
Reference in New Issue
Block a user