feat: TUI 每秒定时器强制重绘 + 帧数统计写入日志
This commit is contained in:
1 parent
84b18f865a
commit
e4da65b951
1 file changed
+10
-1
+10
-1
@@ -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()
|
||||
|
||||
Reference in new issue
Block a user