1
0
mirror of https://github.com/bpatrik/pigallery2.git synced 2025-03-29 21:56:58 +02:00
2023-09-11 18:57:51 +02:00

72 lines
1.9 KiB
TypeScript

import {DirectoryScanSettings, DiskMangerWorker} from './DiskMangerWorker';
import {Logger} from '../../Logger';
import {MediaRendererInput, PhotoWorker} from './PhotoWorker';
import {Utils} from '../../../common/Utils';
import {MediaDTO} from '../../../common/entities/MediaDTO';
import {ParentDirectoryDTO} from '../../../common/entities/DirectoryDTO';
declare const process: NodeJS.Process;
const LOG_TAG = '[Worker]';
export class Worker {
public static process<O extends void | ParentDirectoryDTO<MediaDTO>>(): void {
Logger.debug(LOG_TAG, 'Worker is waiting for tasks');
process.on('message', async (task: WorkerTask) => {
try {
let result = null;
switch (task.type) {
case WorkerTaskTypes.diskManager:
result = await DiskMangerWorker.scanDirectory(
(task as DiskManagerTask).relativeDirectoryName,
(task as DiskManagerTask).settings
);
if (global.gc) {
global.gc();
}
break;
case WorkerTaskTypes.thumbnail:
result = await PhotoWorker.render((task as ThumbnailTask).input);
break;
default:
throw new Error('Unknown worker task type');
}
process.send({
error: null,
result,
} as WorkerMessage<O>);
} catch (err) {
process.send({error: err, result: null});
}
});
}
}
export enum WorkerTaskTypes {
thumbnail = 1,
diskManager = 2,
}
export interface WorkerTask {
type: WorkerTaskTypes;
}
export interface DiskManagerTask extends WorkerTask {
relativeDirectoryName: string;
settings: DirectoryScanSettings;
}
export interface ThumbnailTask extends WorkerTask {
input: MediaRendererInput;
}
export const WorkerTask = {
equals: (t1: WorkerTask, t2: WorkerTask): boolean => {
return Utils.equalsFilter(t1, t2);
},
};
export interface WorkerMessage<O> {
error: Error;
result: O;
}