fix: trace job imported wordcloud stickers

This commit is contained in:
2026-09-13 01:01:18 +08:00
parent 7e275798e7
commit 7f4ac45639
3 changed files with 13 additions and 2 deletions
+2 -1
View File
@@ -34,7 +34,8 @@ def find_visible_wordcloud_sources(
asset_id = str(element.get("assetId") or "") asset_id = str(element.get("assetId") or "")
meta = load_asset_meta(asset_id) meta = load_asset_meta(asset_id)
job_id = str(meta.get("job_id") or "") job_id = str(meta.get("job_id") or "")
if meta.get("type") == "wordcloud" and job_id and job_id not in seen: asset_type = str(meta.get("type") or "")
if asset_type in {"wordcloud", "sticker"} and job_id and job_id not in seen:
seen.add(job_id) seen.add(job_id)
result.append(WordcloudSource(asset_id, job_id)) result.append(WordcloudSource(asset_id, job_id))
return result return result
+9
View File
@@ -145,6 +145,15 @@ def test_scanner_skips_wordcloud_without_job_id():
assert find_visible_wordcloud_sources(document, assets.__getitem__) == [] assert find_visible_wordcloud_sources(document, assets.__getitem__) == []
def test_scanner_accepts_job_imported_wordcloud_stickers():
document = {"elements": [{"type": "sticker", "assetId": "wc-a"}]}
assets = {"wc-a": {"type": "sticker", "job_id": "a" * 32}}
assert find_visible_wordcloud_sources(document, assets.__getitem__) == [
WordcloudSource("wc-a", "a" * 32)
]
def test_snapshot_rejects_non_sqlite_file_without_creating_destination(tmp_path): def test_snapshot_rejects_non_sqlite_file_without_creating_destination(tmp_path):
source = tmp_path / "not-a-database.sqlite" source = tmp_path / "not-a-database.sqlite"
destination = tmp_path / "archive" / "word_locations.sqlite" destination = tmp_path / "archive" / "word_locations.sqlite"
+2 -1
View File
@@ -154,7 +154,7 @@ export async function addStickerAssetFromJob(
): Promise<StickerAsset> { ): Promise<StickerAsset> {
const form = new FormData(); const form = new FormData();
form.append('name', name || `词云 ${new Date().toLocaleString('zh-CN')}`); form.append('name', name || `词云 ${new Date().toLocaleString('zh-CN')}`);
form.append('type', 'sticker'); form.append('type', 'wordcloud');
const res = await ensureOk( const res = await ensureOk(
await fetch(apiUrl(`/api/assets/from-job/${jobId}`), { method: 'POST', body: form }), await fetch(apiUrl(`/api/assets/from-job/${jobId}`), { method: 'POST', body: form }),
'从任务导入贴纸失败', '从任务导入贴纸失败',
@@ -166,6 +166,7 @@ export async function addStickerAssetFromJob(
type: asset.mime_type === 'image/svg+xml' ? 'svg' : 'image', type: asset.mime_type === 'image/svg+xml' ? 'svg' : 'image',
source: asset.file_url, source: asset.file_url,
createdAt: asset.created_at, createdAt: asset.created_at,
jobId: asset.job_id || undefined,
mimeType: asset.mime_type, mimeType: asset.mime_type,
}; };
window.dispatchEvent(new CustomEvent(STICKER_LIBRARY_EVENT)); window.dispatchEvent(new CustomEvent(STICKER_LIBRARY_EVENT));