Fix memoir image delivery and Android rendering
This commit is contained in:
@@ -106,7 +106,9 @@ def _merge_chapter_image_assets(
|
||||
merged_item["size"] = merged_item.get("size") or size
|
||||
merged_item["created_at"] = merged_item.get("created_at") or now_iso
|
||||
merged_item["updated_at"] = merged_item.get("updated_at") or now_iso
|
||||
if merged_item.get("status") == "completed" and not merged_item.get("url"):
|
||||
if merged_item.get("status") == "completed" and not (
|
||||
merged_item.get("storage_key") or merged_item.get("url")
|
||||
):
|
||||
merged_item["status"] = "failed"
|
||||
merged_item["error"] = merged_item.get("error") or "missing image url"
|
||||
else:
|
||||
@@ -131,6 +133,7 @@ def initialize_chapter_images(chapter) -> list[dict]:
|
||||
settings = MemoirImageSettings.from_env()
|
||||
if not settings.enabled:
|
||||
chapter.images = []
|
||||
logger.info(f"章节图片初始化跳过: chapter={chapter.id}, enabled=false")
|
||||
return chapter.images
|
||||
|
||||
prompt_service = MemoirImagePromptService(llm=None, settings=settings)
|
||||
@@ -144,6 +147,13 @@ def initialize_chapter_images(chapter) -> list[dict]:
|
||||
size=settings.default_size,
|
||||
now_iso=datetime.now(timezone.utc).isoformat(),
|
||||
)
|
||||
logger.info(
|
||||
"章节图片初始化完成: chapter=%s, placeholders=%d, images=%d, statuses=%s",
|
||||
chapter.id,
|
||||
len(placeholders),
|
||||
len(chapter.images or []),
|
||||
[item.get("status") for item in (chapter.images or [])],
|
||||
)
|
||||
return chapter.images
|
||||
|
||||
|
||||
@@ -479,6 +489,7 @@ def process_memoir_segments(self, user_id: str, segment_ids: List[str]):
|
||||
|
||||
for chapter_id in sorted(chapters_to_enqueue):
|
||||
try:
|
||||
logger.info(f"派发章节补图任务: chapter={chapter_id}")
|
||||
generate_chapter_images.delay(chapter_id)
|
||||
except Exception as exc:
|
||||
logger.warning(f"补图任务派发失败: chapter={chapter_id}, error={exc}")
|
||||
@@ -599,6 +610,7 @@ def generate_chapter_images(self, chapter_id: str):
|
||||
try:
|
||||
chapter = db.get(Chapter, chapter_id)
|
||||
if not chapter or not chapter.images:
|
||||
logger.info(f"章节补图跳过: chapter={chapter_id}, reason=no_images")
|
||||
return {"status": "no_images"}
|
||||
|
||||
settings = MemoirImageSettings.from_env()
|
||||
@@ -606,9 +618,16 @@ def generate_chapter_images(self, chapter_id: str):
|
||||
provider = LiblibImageProvider(template_uuid=settings.liblib_template_uuid)
|
||||
storage = TencentCosStorageService.from_env()
|
||||
images = [dict(item) for item in (chapter.images or [])]
|
||||
pending_count = sum(1 for item in images if item.get("status") in {"pending", "failed"})
|
||||
logger.info(
|
||||
"章节补图开始: chapter=%s, total_images=%d, pending_images=%d",
|
||||
chapter_id,
|
||||
len(images),
|
||||
pending_count,
|
||||
)
|
||||
|
||||
for index, item in enumerate(images):
|
||||
if item.get("status") == "completed" and item.get("url"):
|
||||
if item.get("status") == "completed" and (item.get("storage_key") or item.get("url")):
|
||||
continue
|
||||
if item.get("status") not in {"pending", "failed"}:
|
||||
continue
|
||||
@@ -643,12 +662,19 @@ def generate_chapter_images(self, chapter_id: str):
|
||||
)
|
||||
image_bytes = provider.download_image(job)
|
||||
key = build_cos_key(chapter.user_id, chapter.id, current_item["index"], prompt_data["prompt"])
|
||||
current_item["storage_key"] = key
|
||||
current_item["url"] = storage.upload_bytes(image_bytes, key, "image/png")
|
||||
current_item["prompt"] = prompt_data["prompt"]
|
||||
current_item["style"] = prompt_data["style"]
|
||||
current_item["size"] = prompt_data["size"]
|
||||
current_item["status"] = "completed"
|
||||
current_item["error"] = None
|
||||
logger.info(
|
||||
"章节补图成功: chapter=%s, index=%s, url=%s",
|
||||
chapter_id,
|
||||
current_item.get("index"),
|
||||
current_item["url"],
|
||||
)
|
||||
except Exception as exc:
|
||||
current_item["status"] = "failed"
|
||||
current_item["error"] = str(exc)
|
||||
|
||||
Reference in New Issue
Block a user