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 <noreply@anthropic.com>
This commit is contained in:
shuki
2026-03-06 04:49:22 +02:00
parent fa891bbf7b
commit 75fd25e559
4 changed files with 8 additions and 6 deletions

View File

@@ -83,7 +83,7 @@ class RemotesScreen(Screen):
@work @work
async def _test_remote(self, name: str) -> None: 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) self.app.push_screen(log_screen)
rc, stdout, stderr = await run_cli("remotes", "test", f"--name={name}") rc, stdout, stderr = await run_cli("remotes", "test", f"--name={name}")
if stdout: if stdout:

View File

@@ -68,7 +68,7 @@ class RetentionScreen(Screen):
@work @work
async def _do_cleanup(self, target: str) -> None: 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) self.app.push_screen(log_screen)
rc = await stream_cli(log_screen.write, "retention", f"--target={target}") rc = await stream_cli(log_screen.write, "retention", f"--target={target}")
if rc == 0: if rc == 0:
@@ -79,7 +79,7 @@ class RetentionScreen(Screen):
@work @work
async def _do_cleanup_all(self) -> None: 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) self.app.push_screen(log_screen)
rc = await stream_cli(log_screen.write, "retention", "--all") rc = await stream_cli(log_screen.write, "retention", "--all")
if rc == 0: if rc == 0:

View File

@@ -138,7 +138,7 @@ class ScheduleScreen(Screen):
@work @work
async def _show_crontab(self) -> None: 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) self.app.push_screen(log_screen)
rc, stdout, stderr = await run_cli("schedule", "show") rc, stdout, stderr = await run_cli("schedule", "show")
if stdout: if stdout:

View File

@@ -33,9 +33,10 @@ class OperationLog(ModalScreen[None]):
BINDINGS = [("escape", "close", "Close")] BINDINGS = [("escape", "close", "Close")]
def __init__(self, title: str = "Operation Output"): def __init__(self, title: str = "Operation Output", show_spinner: bool = True):
super().__init__() super().__init__()
self._title = title self._title = title
self._show_spinner = show_spinner
self._mounted_event = asyncio.Event() self._mounted_event = asyncio.Event()
self._buffer: list[str] = [] self._buffer: list[str] = []
@@ -45,7 +46,8 @@ class OperationLog(ModalScreen[None]):
yield RichLog(id="ol-log", wrap=True, highlight=True, markup=True) yield RichLog(id="ol-log", wrap=True, highlight=True, markup=True)
with Horizontal(id="ol-footer"): with Horizontal(id="ol-footer"):
yield Button("Close", variant="primary", id="ol-close") 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: def on_mount(self) -> None:
# Flush any buffered writes # Flush any buffered writes