feat(ai): generate covers without new titles

This commit is contained in:
chengma
2026-07-13 15:22:15 +08:00
parent e2fbae2ee1
commit d42a9c8084
13 changed files with 334 additions and 36 deletions
+11 -3
View File
@@ -2,7 +2,7 @@
from __future__ import annotations
from .. import diagnostics
from .. import ai, appconfig, diagnostics
from ..collect_skip import skipped_stage_text
from .widgets import *
@@ -190,10 +190,15 @@ class GenerateTaskTableModel(QAbstractTableModel):
self.db_path = db_path
self.status_callback = status_callback
self.last_edit_error = None
self.generate_mode = "title"
self.generate_cover_enabled = False
def set_generate_cover_enabled(self, enabled):
self.generate_cover_enabled = bool(enabled)
self.set_generate_mode("title_cover" if enabled else "title")
def set_generate_mode(self, mode):
self.generate_mode = appconfig.normalize_generate_mode(mode)
self.generate_cover_enabled = appconfig.generate_mode_includes_cover(self.generate_mode)
if not self.tasks:
return
top_left = self.index(0, 4)
@@ -403,7 +408,10 @@ class GenerateTaskTableModel(QAbstractTableModel):
return "失败"
if not self.generate_cover_enabled:
return "未启用"
if self._is_title_failure(task) or not self._has_new_title(task):
if self.generate_mode == "cover":
if not ai.cover_title_context(task):
return "未开始"
elif self._is_title_failure(task) or not self._has_new_title(task):
return "未开始"
if getattr(task, "status", None) == "running":
return "处理中"
+9 -6
View File
@@ -945,7 +945,7 @@ class GenerateTab(QWidget):
self.empty_state_button.clicked.connect(self.open_accounts_callback)
self.task_table = QTableView()
self.model = GenerateTaskTableModel(self.task_table, db_path=self.db_path, status_callback=self._set_status)
self.model.set_generate_cover_enabled(self._current_generate_mode_includes_cover())
self.model.set_generate_mode(self._current_generate_mode())
self.task_table.setModel(self.model)
self.task_table.setSelectionBehavior(QAbstractItemView.SelectRows)
self.task_table.setSelectionMode(QAbstractItemView.ExtendedSelection)
@@ -1159,13 +1159,13 @@ class GenerateTab(QWidget):
previous = appconfig.ai_generate_mode(self.config)
current = self._current_generate_mode()
if self._save_generate_mode_setting(show_status=True):
self.model.set_generate_cover_enabled(appconfig.generate_mode_includes_cover(current))
self.model.set_generate_mode(current)
self.refresh_tasks()
return
self.generate_mode_combo.blockSignals(True)
self._set_combo_by_data(self.generate_mode_combo, previous)
self.generate_mode_combo.blockSignals(False)
self.model.set_generate_cover_enabled(appconfig.generate_mode_includes_cover(previous))
self.model.set_generate_mode(previous)
def _apply_task_table_column_widths(self):
if self.model.columnCount() != len(self.TABLE_COLUMN_WEIGHTS):
@@ -1524,7 +1524,7 @@ class GenerateTab(QWidget):
]
if not tasks:
if generate_mode == "cover":
self._set_status("当前筛选结果没有可生成封面的任务,请先生成标题。")
self._set_status("当前筛选结果没有可生成的封面;请确认商品已完成采集且尚未生成新封面。")
else:
self._set_status("当前筛选结果没有可生成的缺失内容;请先在①导入采集完成采集,或调整生成内容")
return
@@ -2081,9 +2081,12 @@ class GenerateTab(QWidget):
return None
def _prompt_context(self, task):
new_title = task.new_title
if self._current_generate_mode() == "cover":
new_title = ai.cover_title_context(task)
return {
"old_title": task.old_title,
"new_title": task.new_title,
"new_title": new_title,
"item_id": task.item_id,
"account_name": self.model.account_name_for(task),
"alias": task.alias,
@@ -2133,7 +2136,7 @@ class GenerateTab(QWidget):
_set_empty_state(self.empty_state_card, self.empty_state_label, self.empty_state_button)
self._set_status(f"AI 生成任务读取失败:{exc}")
return
self.model.set_generate_cover_enabled(self._current_generate_mode_includes_cover())
self.model.set_generate_mode(self._current_generate_mode())
self.model.set_tasks(filtered_tasks, accounts_rows)
self._apply_task_table_column_widths()
self.summary_label.setText(
+2
View File
@@ -593,6 +593,8 @@ class GenerateWorker(BaseWorker):
if result == "start" and step == "title_submit":
return f"[标题] {self._task_progress_label(task)} 开始生成"
if result == "skipped":
if detail and "旧标题作为封面参考" in detail:
return f"[图片] {self._task_progress_label(task)} {detail}"
return f"[标题] {self._task_progress_label(task)} 已有标题,跳过生文"
if result == "success" and step == "title_done":
return f"[标题] {self._task_progress_label(task)} 成功"