tweb-i2p/src/lib/webp/webp.worker.ts

64 lines
1.2 KiB
TypeScript
Raw Normal View History

2020-08-22 23:48:00 +03:00
import { webp2png } from './webp';
import type { WebpConvertTask } from './webpWorkerController';
const ctx = self as any as DedicatedWorkerGlobalScope;
const tasks: WebpConvertTask[] = [];
//let isProcessing = false;
2020-08-22 23:48:00 +03:00
function finishTask() {
//isProcessing = false;
2020-08-22 23:48:00 +03:00
processTasks();
}
function processTasks() {
//if(isProcessing) return;
2020-08-22 23:48:00 +03:00
const task = tasks.shift();
if(!task) return;
//isProcessing = true;
2020-08-22 23:48:00 +03:00
switch(task.type) {
case 'convertWebp': {
const {fileName, bytes} = task.payload;
let convertedBytes: Uint8Array;
try {
convertedBytes = webp2png(bytes).bytes;
} catch(err) {
console.error('Convert webp2png error:', err, 'payload:', task.payload);
}
2020-08-22 23:48:00 +03:00
ctx.postMessage({
type: 'convertWebp',
payload: {
fileName,
bytes: convertedBytes
2020-08-22 23:48:00 +03:00
}
});
finishTask();
break;
}
default:
finishTask();
}
}
function scheduleTask(task: WebpConvertTask) {
tasks.push(task);
/* if(task.payload.fileName.indexOf('main-') === 0) {
tasks.push(task);
} else {
tasks.unshift(task);
} */
2020-08-22 23:48:00 +03:00
processTasks();
}
ctx.addEventListener('message', (event) => {
scheduleTask(event.data);
});