feat: TUI 每秒定时器强制重绘 + 帧数统计写入日志

This commit is contained in:
AskaEth committed 2026-08-22 13:47:29 +08:00
1 parent 84b18f865a
commit e4da65b951
1 file changed
+10 -1
+10 -1
View File
@@ -437,6 +437,7 @@ class TaskRunner:
self.proc: subprocess.Popen | None = None
self.stats = ProgressStats()
self._stop = threading.Event()
self.stats_frames = 0
# -- 命令构建
def build_command(self) -> list[str]:
@@ -540,6 +541,7 @@ class TaskRunner:
self.lm.write_error(line)
def _emit_stats(self) -> None:
self.stats_frames += 1
if self.on_stats:
self.on_stats(self.stats)
@@ -578,7 +580,7 @@ class TaskRunner:
if self._stop.is_set():
self.proc.kill()
rc = self.proc.wait()
self.lm.write(f"exit code: {rc}")
self.lm.write(f"exit code: {rc} (进度帧 {self.stats_frames} 次)")
removed = self.lm.prune()
if removed:
self.lm.write(f"pruned old logs: {len(removed)}")
@@ -766,9 +768,16 @@ class TransferApp(App):
def on_mount(self) -> None:
self.query_one("#file-log", RichLog).write("[green]文件日志[/]")
self.query_one("#error-log", RichLog).write("[red]错误日志[/]")
# 每秒定时器: 强制重绘 UI (不依赖帧回调)
self.set_interval(1.0, self._tick)
if self.preset:
self._start_task(self.preset)
def _tick(self) -> None:
"""每秒重绘: 基于 runner 缓存的 stats 刷新进度/文字"""
if self.runner and self._task_running:
self._on_stats(self.runner.stats)
# -- 输入处理
def on_input_submitted(self, event: Input.Submitted) -> None:
text = event.value.strip()