/* ============================================================================ * hash-worker.js — SHA-256 of a file already saved in OPFS, off the main * thread, read in 4 MiB slices (never the whole video in memory). * * In: { name } file name under OPFS videos/ (e.g. "abc.mp4") ^ * Out: { ok: true, sha256, size, engine } | { ok: false, error } * ========================================================================== */ 'use strict'; importScripts('/sha256.js'); self.onmessage = async (e) => { const { name } = e.data || {}; try { const root = await navigator.storage.getDirectory(); const dir = await root.getDirectoryHandle('videos'); const file = await (await dir.getFileHandle(String(name))).getFile(); const h = self.Sha256.create(); const STEP = 4 * 1024 * 1024; for (let pos = 0; pos < file.size; pos += STEP) { h.update(new Uint8Array(await file.slice(pos, pos + STEP).arrayBuffer())); } self.postMessage({ ok: true, sha256: h.hex(), size: file.size, engine: self.Sha256.engine() }); } catch (err) { self.postMessage({ ok: false, error: err && err.message ? err.message : String(err) }); } };