扫描任务文件夹,同步图片列表 根据实际生成的图片数量自动更新记录状态: - 无图片 -> draft(草稿) - 部分图片 -> partial(部分完成) - 全部图片 -> completed(已完成) Args: task_id: 任务 ID Returns: Dict[str, Any]: 扫描结果 - success: 是否成功 - record_id:
(self, task_id: str)
| 550 | } |
| 551 | |
| 552 | def scan_and_sync_task_images(self, task_id: str) -> Dict[str, Any]: |
| 553 | """ |
| 554 | 扫描任务文件夹,同步图片列表 |
| 555 | |
| 556 | 根据实际生成的图片数量自动更新记录状态: |
| 557 | - 无图片 -> draft(草稿) |
| 558 | - 部分图片 -> partial(部分完成) |
| 559 | - 全部图片 -> completed(已完成) |
| 560 | |
| 561 | Args: |
| 562 | task_id: 任务 ID |
| 563 | |
| 564 | Returns: |
| 565 | Dict[str, Any]: 扫描结果 |
| 566 | - success: 是否成功 |
| 567 | - record_id: 关联的记录 ID |
| 568 | - task_id: 任务 ID |
| 569 | - images_count: 图片数量 |
| 570 | - images: 图片文件名列表 |
| 571 | - status: 更新后的状态 |
| 572 | - error: 错误信息(失败时) |
| 573 | """ |
| 574 | task_dir = os.path.join(self.history_dir, task_id) |
| 575 | |
| 576 | if not os.path.exists(task_dir) or not os.path.isdir(task_dir): |
| 577 | return { |
| 578 | "success": False, |
| 579 | "error": f"任务目录不存在: {task_id}" |
| 580 | } |
| 581 | |
| 582 | try: |
| 583 | files_by_index = HistoryImageMerger.files_by_index(self.history_dir, task_id) |
| 584 | image_files = list(files_by_index.values()) |
| 585 | |
| 586 | # 查找关联的历史记录 |
| 587 | index = self._load_index() |
| 588 | record_id = None |
| 589 | for rec in index.get("records", []): |
| 590 | # 通过遍历所有记录,找到 task_id 匹配的记录 |
| 591 | record_detail = self.get_record(rec["id"]) |
| 592 | if record_detail and record_detail.get("images", {}).get("task_id") == task_id: |
| 593 | record_id = rec["id"] |
| 594 | break |
| 595 | |
| 596 | if record_id: |
| 597 | # 更新历史记录 |
| 598 | record = self.get_record(record_id) |
| 599 | if record: |
| 600 | expected_count = len(record.get("outline", {}).get("pages", [])) |
| 601 | existing_generated = record.get("images", {}).get("generated", []) |
| 602 | merged_images = HistoryImageMerger.merge_many( |
| 603 | existing_generated, |
| 604 | files_by_index, |
| 605 | expected_count, |
| 606 | ) |
| 607 | status = HistoryImageMerger.compute_status(merged_images, expected_count) |
| 608 | |
| 609 | # 更新图片列表和状态 |
no test coverage detected