import FetchWorker from "$lib/task-manager/workers/fetch?worker"; import { killWorker } from "$lib/task-manager/run-worker"; import { updateWorkerProgress } from "$lib/state/task-manager/current-tasks"; import { pipelineTaskDone, itemError, queue } from "$lib/state/task-manager/queue"; import type { CobaltQueue, UUID } from "$lib/types/queue"; export const runFetchWorker = async (workerId: UUID, parentId: UUID, url: string) => { const worker = new FetchWorker(); const unsubscribe = queue.subscribe((queue: CobaltQueue) => { if (!queue[parentId]) { killWorker(worker, unsubscribe); } }); worker.postMessage({ cobaltFetchWorker: { url } }); worker.onmessage = (event) => { const eventData = event.data.cobaltFetchWorker; if (!eventData) return; if (eventData.progress) { updateWorkerProgress(workerId, { percentage: eventData.progress, size: eventData.size, }) } if (eventData.result) { killWorker(worker, unsubscribe); return pipelineTaskDone( parentId, workerId, eventData.result, ); } if (eventData.error) { killWorker(worker, unsubscribe); return itemError(parentId, workerId, eventData.error); } } }