feat: complete T-533 incremental generation

This commit is contained in:
chengma
2026-07-06 17:57:39 +08:00
parent be182b91cf
commit 46995b301d
8 changed files with 434 additions and 72 deletions
+19 -10
View File
@@ -270,6 +270,7 @@ class GenerateTab(QWidget):
def _on_generate_cover_toggled(self, checked):
previous = bool(appconfig.ai_config(self.config).get("generate_cover", False))
if self._save_generate_cover_setting(show_status=True):
self.refresh_tasks()
return
self.generate_cover_checkbox.blockSignals(True)
self.generate_cover_checkbox.setChecked(previous)
@@ -470,11 +471,17 @@ class GenerateTab(QWidget):
generate_cover = bool(self.generate_cover_checkbox.isChecked())
tasks = [
task for task in self.model.tasks
if ai.is_generatable_task(task)
if ai.is_generatable_task(task, generate_cover=generate_cover)
]
if not tasks:
self._set_status("当前筛选结果没有待生成或生成失败可重试任务;请先在①导入采集完成旧数据采集")
self._set_status(
"当前筛选结果没有可生成的缺失内容;请先在①导入采集完成采集,或勾选“生成封面图片(成本较高)”补封面"
)
return
component_totals = ai.generation_component_totals(
tasks,
generate_cover=generate_cover,
)
prompt_values = {
"title": self.title_prompt_edit.toPlainText(),
"cover": self.cover_prompt_edit.toPlainText(),
@@ -502,9 +509,10 @@ class GenerateTab(QWidget):
self._update_generate_progress(
{
"total": len(tasks),
"title_total": component_totals["title_total"],
"title_done": 0,
"cover_done": 0,
"cover_total": len(tasks) if generate_cover else 0,
"cover_total": component_totals["cover_total"] if generate_cover else 0,
"generated_done": 0,
"failed": 0,
"generate_cover": generate_cover,
@@ -681,15 +689,16 @@ class GenerateTab(QWidget):
def _update_generate_progress(self, payload):
total = max(0, int(payload.get("total", 0) or 0))
title_total = max(0, int(payload.get("title_total", total) or 0))
title_done = max(0, int(payload.get("title_done", 0) or 0))
cover_done = max(0, int(payload.get("cover_done", 0) or 0))
cover_total = self._cover_total_for_progress(payload, total)
failed = max(0, int(payload.get("failed", 0) or 0))
self.progress_label.setText("进度:" + self._generate_progress_text(payload))
self.title_progress_label.setText(f"标题 {title_done}/{total}")
self.title_progress_label.setText(f"标题 {title_done}/{title_total}")
self.cover_progress_label.setText(f"图片 {cover_done}/{cover_total}")
self.failed_progress_label.setText(f"失败 {failed}")
self._set_progress_bar(self.title_progress_bar, title_done, total)
self._set_progress_bar(self.title_progress_bar, title_done, title_total)
self._set_progress_bar(self.cover_progress_bar, cover_done, cover_total)
def _reset_cmhub_balance_label(self):
@@ -736,12 +745,13 @@ class GenerateTab(QWidget):
def _generate_progress_text(self, payload):
total = max(0, int(payload.get("total", 0) or 0))
title_total = max(0, int(payload.get("title_total", total) or 0))
cover_total = self._cover_total_for_progress(payload, total)
return "标题{title}/{total} · 图片{cover}/{cover_total} · 失败{failed}".format(
return "标题{title}/{title_total} · 图片{cover}/{cover_total} · 失败{failed}".format(
title=payload.get("title_done", 0),
cover=payload.get("cover_done", 0),
cover_total=cover_total,
total=payload.get("total", 0),
title_total=title_total,
failed=payload.get("failed", 0),
)
@@ -896,7 +906,8 @@ class GenerateTab(QWidget):
if selected_status in (None, "all"):
return True
if selected_status == "to_generate":
return ai.is_generatable_task(task) and task.status != "failed"
generate_cover = bool(self.generate_cover_checkbox.isChecked())
return ai.is_generatable_task(task, generate_cover=generate_cover) and task.status != "failed"
if selected_status == "generated":
return task.stage == "generated"
if selected_status == "applied":
@@ -906,5 +917,3 @@ class GenerateTab(QWidget):
if selected_status == "skipped":
return task.status == "skipped"
return True