@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
JavaScript
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