From 75fd25e5592b40138849ee00d9ea0a9c8a7fb0a3 Mon Sep 17 00:00:00 2001 From: shuki Date: Fri, 6 Mar 2026 04:49:22 +0200 Subject: [PATCH] Show spinner only for backup and restore operations Other OperationLog dialogs (crontab show, remote test, retention) no longer display the spinner since they complete quickly. Co-Authored-By: Claude Opus 4.6 --- tui/screens/remotes.py | 2 +- tui/screens/retention.py | 4 ++-- tui/screens/schedule.py | 2 +- tui/widgets/operation_log.py | 6 ++++-- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/tui/screens/remotes.py b/tui/screens/remotes.py index 2666c0b..4472dcb 100644 --- a/tui/screens/remotes.py +++ b/tui/screens/remotes.py @@ -83,7 +83,7 @@ class RemotesScreen(Screen): @work async def _test_remote(self, name: str) -> None: - log_screen = OperationLog(f"Testing Remote: {name}") + log_screen = OperationLog(f"Testing Remote: {name}", show_spinner=False) self.app.push_screen(log_screen) rc, stdout, stderr = await run_cli("remotes", "test", f"--name={name}") if stdout: diff --git a/tui/screens/retention.py b/tui/screens/retention.py index 25ee310..f45772e 100644 --- a/tui/screens/retention.py +++ b/tui/screens/retention.py @@ -68,7 +68,7 @@ class RetentionScreen(Screen): @work async def _do_cleanup(self, target: str) -> None: - log_screen = OperationLog(f"Retention: {target}") + log_screen = OperationLog(f"Retention: {target}", show_spinner=False) self.app.push_screen(log_screen) rc = await stream_cli(log_screen.write, "retention", f"--target={target}") if rc == 0: @@ -79,7 +79,7 @@ class RetentionScreen(Screen): @work async def _do_cleanup_all(self) -> None: - log_screen = OperationLog("Retention: All Targets") + log_screen = OperationLog("Retention: All Targets", show_spinner=False) self.app.push_screen(log_screen) rc = await stream_cli(log_screen.write, "retention", "--all") if rc == 0: diff --git a/tui/screens/schedule.py b/tui/screens/schedule.py index 71d1fec..766ca3f 100644 --- a/tui/screens/schedule.py +++ b/tui/screens/schedule.py @@ -138,7 +138,7 @@ class ScheduleScreen(Screen): @work async def _show_crontab(self) -> None: - log_screen = OperationLog("Current Crontab") + log_screen = OperationLog("Current Crontab", show_spinner=False) self.app.push_screen(log_screen) rc, stdout, stderr = await run_cli("schedule", "show") if stdout: diff --git a/tui/widgets/operation_log.py b/tui/widgets/operation_log.py index 24aadb5..f54c045 100644 --- a/tui/widgets/operation_log.py +++ b/tui/widgets/operation_log.py @@ -33,9 +33,10 @@ class OperationLog(ModalScreen[None]): BINDINGS = [("escape", "close", "Close")] - def __init__(self, title: str = "Operation Output"): + def __init__(self, title: str = "Operation Output", show_spinner: bool = True): super().__init__() self._title = title + self._show_spinner = show_spinner self._mounted_event = asyncio.Event() self._buffer: list[str] = [] @@ -45,7 +46,8 @@ class OperationLog(ModalScreen[None]): yield RichLog(id="ol-log", wrap=True, highlight=True, markup=True) with Horizontal(id="ol-footer"): yield Button("Close", variant="primary", id="ol-close") - yield SpinnerWidget("arrow3", id="ol-spinner") + if self._show_spinner: + yield SpinnerWidget("arrow3", id="ol-spinner") def on_mount(self) -> None: # Flush any buffered writes