feat(ai): generate covers without new titles
This commit is contained in:
@@ -349,6 +349,15 @@ def _has_generated_cover(task):
|
||||
return bool(str(getattr(task, "new_cover_path", "") or "").strip())
|
||||
|
||||
|
||||
def cover_title_context(task):
|
||||
"""Return the title used to describe a cover without changing task results."""
|
||||
|
||||
new_title = str(getattr(task, "new_title", "") or "").strip()
|
||||
if new_title:
|
||||
return new_title
|
||||
return str(getattr(task, "old_title", "") or "").strip()
|
||||
|
||||
|
||||
def generation_needs(task, generate_cover=False, generate_mode=None):
|
||||
"""Return which AI components still need generation for this task."""
|
||||
|
||||
@@ -370,7 +379,7 @@ def generation_needs(task, generate_cover=False, generate_mode=None):
|
||||
needs_cover = False
|
||||
if appconfig.generate_mode_includes_cover(mode) and not _has_generated_cover(task):
|
||||
if mode == "cover":
|
||||
needs_cover = has_title
|
||||
needs_cover = bool(cover_title_context(task))
|
||||
else:
|
||||
needs_cover = has_title or needs_title
|
||||
return {"title": needs_title, "cover": needs_cover}
|
||||
@@ -587,9 +596,29 @@ def generate_batch(tasks, prompts, ai_cfg=None, on_progress=None, should_stop=No
|
||||
|
||||
for task in eligible:
|
||||
task_id = getattr(task, "id", None)
|
||||
if task_id not in title_results and _has_generated_title(task):
|
||||
title_results[task_id] = str(getattr(task, "new_title") or "")
|
||||
_emit_generation_event(on_event, task, "title", "title_submit", "skipped", detail="已有标题")
|
||||
if task_id in title_results:
|
||||
continue
|
||||
if generate_mode == "cover":
|
||||
title_context = cover_title_context(task)
|
||||
elif _has_generated_title(task):
|
||||
title_context = str(getattr(task, "new_title") or "")
|
||||
else:
|
||||
title_context = ""
|
||||
if not title_context:
|
||||
continue
|
||||
title_results[task_id] = title_context
|
||||
if _has_generated_title(task):
|
||||
detail = "已有标题"
|
||||
else:
|
||||
detail = "没有新标题,本轮使用旧标题作为封面参考"
|
||||
_emit_generation_event(
|
||||
on_event,
|
||||
task,
|
||||
"title",
|
||||
"title_submit",
|
||||
"skipped",
|
||||
detail=detail,
|
||||
)
|
||||
|
||||
cover_tasks = [
|
||||
task for task in cover_candidates
|
||||
@@ -627,19 +656,21 @@ def generate_batch(tasks, prompts, ai_cfg=None, on_progress=None, should_stop=No
|
||||
level="warning",
|
||||
)
|
||||
|
||||
def persist_cover_success(task, new_title, new_cover_path):
|
||||
def persist_cover_success(task, title_context, new_cover_path):
|
||||
set_step(task, "db_write")
|
||||
_emit_generation_event(on_event, task, "cover", "db_write", "start")
|
||||
db.set_generated(task.id, new_title, new_cover_path, path=db_path)
|
||||
db.set_generated_cover(task.id, new_cover_path, path=db_path)
|
||||
summary["cover_done"] += 1
|
||||
summary["generated_done"] += 1
|
||||
needs_title = needs_by_task.get(getattr(task, "id", None), {}).get("title")
|
||||
persisted_title = title_context if needs_title else getattr(task, "new_title", None)
|
||||
if on_task_update is not None:
|
||||
on_task_update(
|
||||
task.id,
|
||||
{
|
||||
"stage": "generated",
|
||||
"status": "success",
|
||||
"new_title": new_title,
|
||||
"new_title": persisted_title,
|
||||
"new_cover_path": new_cover_path,
|
||||
},
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user