mirror of
https://github.com/hicccc77/WeFlow.git
synced 2026-04-26 07:26:46 +00:00
99 lines
2.6 KiB
TypeScript
99 lines
2.6 KiB
TypeScript
import { parentPort, workerData } from 'worker_threads'
|
|
import type { ExportOptions } from './services/exportService'
|
|
|
|
interface ExportWorkerConfig {
|
|
sessionIds: string[]
|
|
outputDir: string
|
|
options: ExportOptions
|
|
taskId?: string
|
|
dbPath?: string
|
|
decryptKey?: string
|
|
myWxid?: string
|
|
resourcesPath?: string
|
|
userDataPath?: string
|
|
logEnabled?: boolean
|
|
}
|
|
|
|
const config = workerData as ExportWorkerConfig
|
|
const controlState = {
|
|
pauseRequested: false,
|
|
stopRequested: false
|
|
}
|
|
|
|
parentPort?.on('message', (message: any) => {
|
|
if (!message || typeof message.type !== 'string') return
|
|
if (message.type === 'export:pause') {
|
|
controlState.pauseRequested = true
|
|
return
|
|
}
|
|
if (message.type === 'export:resume') {
|
|
controlState.pauseRequested = false
|
|
return
|
|
}
|
|
if (message.type === 'export:cancel') {
|
|
controlState.stopRequested = true
|
|
controlState.pauseRequested = false
|
|
}
|
|
})
|
|
|
|
process.env.WEFLOW_WORKER = '1'
|
|
if (config.resourcesPath) {
|
|
process.env.WCDB_RESOURCES_PATH = config.resourcesPath
|
|
}
|
|
if (config.userDataPath) {
|
|
process.env.WEFLOW_USER_DATA_PATH = config.userDataPath
|
|
process.env.WEFLOW_CONFIG_CWD = config.userDataPath
|
|
}
|
|
process.env.WEFLOW_PROJECT_NAME = process.env.WEFLOW_PROJECT_NAME || 'WeFlow'
|
|
|
|
async function run() {
|
|
const [{ wcdbService }, { exportService }] = await Promise.all([
|
|
import('./services/wcdbService'),
|
|
import('./services/exportService')
|
|
])
|
|
|
|
wcdbService.setPaths(config.resourcesPath || '', config.userDataPath || '')
|
|
wcdbService.setLogEnabled(config.logEnabled === true)
|
|
exportService.setRuntimeConfig({
|
|
dbPath: config.dbPath,
|
|
decryptKey: config.decryptKey,
|
|
myWxid: config.myWxid
|
|
})
|
|
|
|
const result = await exportService.exportSessions(
|
|
Array.isArray(config.sessionIds) ? config.sessionIds : [],
|
|
String(config.outputDir || ''),
|
|
config.options || { format: 'json' },
|
|
(progress) => {
|
|
parentPort?.postMessage({
|
|
type: 'export:progress',
|
|
data: progress
|
|
})
|
|
},
|
|
config.taskId
|
|
? {
|
|
shouldPause: () => controlState.pauseRequested,
|
|
shouldStop: () => controlState.stopRequested,
|
|
recordCreatedFile: (filePath: string) => {
|
|
parentPort?.postMessage({ type: 'export:createdFile', filePath })
|
|
},
|
|
recordCreatedDir: (dirPath: string) => {
|
|
parentPort?.postMessage({ type: 'export:createdDir', dirPath })
|
|
}
|
|
}
|
|
: undefined
|
|
)
|
|
|
|
parentPort?.postMessage({
|
|
type: 'export:result',
|
|
data: result
|
|
})
|
|
}
|
|
|
|
run().catch((error) => {
|
|
parentPort?.postMessage({
|
|
type: 'export:error',
|
|
error: String(error)
|
|
})
|
|
})
|