UNPKG

@fdm-monster/server

Version:

FDM Monster is a bulk OctoPrint, Klipper, PrusaLink and BambuLab manager to set up, configure and monitor 3D printers. Our aim is to provide neat overview over your farm.

65 lines (64 loc) 2.44 kB
import { uploadDoneEvent, uploadFailedEvent, uploadProgressEvent } from "../constants/event.constants.js"; import { generateCorrelationToken } from "../utils/correlation-token.util.js"; //#region src/state/file-upload-tracker.cache.ts var FileUploadTrackerCache = class FileUploadTrackerCache { currentUploads = []; logger; constructor(loggerFactory, eventEmitter2) { this.eventEmitter2 = eventEmitter2; this.logger = loggerFactory(FileUploadTrackerCache.name); this.eventEmitter2.on(uploadProgressEvent("*"), (token, progress) => this.handleUploadProgress(token, progress)); this.eventEmitter2.on(uploadDoneEvent("*"), (token) => this.handleUploadDone(token)); this.eventEmitter2.on(uploadFailedEvent("*"), (token, reason) => this.handleUploadFailed(token, reason)); } getUploads() { return { current: this.currentUploads }; } getUpload(correlationToken) { return this.currentUploads.find((cu) => cu.correlationToken === correlationToken); } addUploadTracker(multerFile, printerId) { const correlationToken = generateCorrelationToken(); this.logger.log(`Starting upload session with token ${correlationToken}`); this.currentUploads.push({ correlationToken, printerId, startedAt: Date.now(), multerFile, progress: 0, completed: false, completedAt: null, success: null, reason: null }); return correlationToken; } handleUploadProgress(token, event) { const upload = this.getUpload(token); if (!upload) return; upload.progress = event.progress ?? null; } handleUploadFailed(token, reason) { this.logger.log(`Upload tracker ${token} completed with failure`); this.markUploadDone(token, false, reason); } handleUploadDone(token) { this.logger.log(`Upload tracker ${token} completed with success`); this.markUploadDone(token, true); } markUploadDone(token, success, reason) { const trackedUploadIndex = this.currentUploads.findIndex((cu) => cu.correlationToken === token); if (trackedUploadIndex === -1) { this.logger.warn(`Could not mark upload tracker with correlation token '${token}' as done as it was not found.`); return; } const trackedUpload = this.currentUploads[trackedUploadIndex]; trackedUpload.completed = true; trackedUpload.success = success; trackedUpload.completedAt = Date.now(); trackedUpload.reason = reason ?? null; } }; //#endregion export { FileUploadTrackerCache }; //# sourceMappingURL=file-upload-tracker.cache.js.map