/* ============================================================================ * 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'; self.onmessage = async (e) => { const { name } = e.data || {}; try { if (!self.Sha256) { self.__ASSET_URLS__=e.data.assetUrls || {}; importScripts(self.__ASSET_URLS__.sha256 || '/sha256.js'); } 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) }); } };