diff --git a/src/store/ref-resource.ts b/src/store/ref-resource.ts index f1ea97f..d6deb9f 100644 --- a/src/store/ref-resource.ts +++ b/src/store/ref-resource.ts @@ -22,6 +22,18 @@ export default function useRefResource() { store.dataset[resource.resource_url] = resource; } + const normalize_resource_url = (value?: string) => (value || '').split('?')[0].trim(); + + const resolve_resource_by_url = (url: string): RefResource | undefined => { + const direct = store.dataset[url]; + if (direct) return direct; + const normalized = normalize_resource_url(url); + if (!normalized) return undefined; + const keyMatch = Object.keys(store.dataset).find(k => normalize_resource_url(k) === normalized); + if (keyMatch) return store.dataset[keyMatch]; + return Object.values(store.dataset).find(r => normalize_resource_url(r.resource_url) === normalized); + } + const get_task_result = (dbTask: CommonTask) => { try { if (dbTask.payload) { @@ -106,12 +118,24 @@ export default function useRefResource() { }; const recur_check = async (url: string, user_id: string): Promise => { - let resource = store.dataset[url]; + let resource = resolve_resource_by_url(url); if (!resource) return undefined; let tasks = (resource.tasks?.vals || []).filter(t => t.task_type === TaskTypes.WATERMARK); const from_embedded = extract_watermark_url_from_vals(resource.tasks?.vals); if (from_embedded) return from_embedded; + // local cache may lag behind DB (e.g. only TS row with null task_result). refresh once from ws. + if (resource.id) { + const fresh = await request({url: `/api/v1/ws/find_ref_resource_by_id/${resource.id}`}); + if (fresh.r && fresh.d) { + resource = fresh.d; + push(resource); + const refreshed = extract_watermark_url_from_vals(resource.tasks?.vals); + if (refreshed) return refreshed; + tasks = (resource.tasks?.vals || []).filter(t => t.task_type === TaskTypes.WATERMARK); + } + } + let task_submitted = false; if (tasks.length > 0) { let tsTasks = tasks.filter(t => t.task_from === TaskFrom.TaskServer);