Skip to content

Translation queue: batch + per-job status, independent of dialogs - #31

Merged
TN019 merged 1 commit into
mainfrom
translation-queue
Aug 5, 2026
Merged

Translation queue: batch + per-job status, independent of dialogs#31
TN019 merged 1 commit into
mainfrom
translation-queue

Conversation

@TN019

@TN019 TN019 commented Aug 5, 2026

Copy link
Copy Markdown
Owner

背景

历史详情里的"翻译成X"此前是阻塞在对话框里的一次性动作:关掉对话框就看不到进度,也无法排队多个翻译。

改动与实现

  • viewmodel 翻译队列:queue_translation() 入队(按 源+目标 去重、目标已存在拒绝),单工作线程顺序消费(Ollama 本就串行);TranslationJob 记录 queued/running/done/failed、块级进度(接通了原本丢弃的 stage progress 回调)、错误信息;translation_snapshot() 供 UI 读取。队列非空时模型不卸载,靠 keep_alive 在真正清空后回收
  • 历史页:顶部进度条 + 状态条("正在翻译 X → 中文 40% · 队列中 N 个"),每张卡片带状态徽标(翻译中 %/排队中);复用已有的勾选框,新增**"翻译选中(N)"**按钮(语言菜单)批量入队;任务完成/失败逐个 toast 并自动刷新列表——这一切由主窗口 4Hz ticker 驱动,与任何对话框无关
  • 查看对话框的翻译按钮改为入队即返回("已加入翻译队列"),关闭对话框任务照跑

验证

  • uv run pytest -q:173 passed / 5 skipped。新增:队列时序(事件门控)——入队/去重/双任务顺序完成/进度到达任务/历史记录落盘/已存在目标拒绝;GUI 状态条与徽标渲染、完成 toast 恰好一次
  • 离屏渲染验证(见 PR 截图场景):进行中 40% + 排队中徽标 + 批量翻译按钮同屏

…y translations, watch progress from the history page (strip + per-card badges), get toasts on completion — closing the viewer dialog no longer loses the job.
@TN019
TN019 merged commit 201ebe7 into main Aug 5, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant