Files
WeFlow/electron/imageDecryptWorker.ts
2026-09-28 21:16:43 +08:00

34 lines
1.2 KiB
TypeScript

import { parentPort, workerData } from 'worker_threads'
import { decryptDatViaNative, nativeAddonLocation, setAddonPathOverride } from './services/nativeImageDecrypt'
// worker_threads 中 electron-store 可能不可用,第三方插件路径由主线程通过 workerData 显式传入
setAddonPathOverride(workerData?.imageNativeAddonPath || null)
type DecryptRequest = {
id: number
datPath: string
xorKey: number
aesKey?: string
}
parentPort?.on('message', (req: DecryptRequest) => {
const { id, datPath, xorKey, aesKey } = req
try {
const result = decryptDatViaNative(datPath, xorKey, aesKey)
if (!result) {
// addonMissing 让主线程直接放弃 worker 路径,避免每次解密都白跑一次线程往返
parentPort?.postMessage({ id, ok: false, addonMissing: !nativeAddonLocation() })
return
}
// 拷贝出独立 ArrayBuffer 后转移所有权,避免结构化克隆再复制一次
const data = new ArrayBuffer(result.data.byteLength)
new Uint8Array(data).set(result.data)
parentPort?.postMessage(
{ id, ok: true, data, ext: result.ext, isWxgf: result.isWxgf, meta: result.meta },
[data]
)
} catch (error) {
parentPort?.postMessage({ id, ok: false, error: String(error) })
}
})