122 lines
3.6 KiB
JavaScript
122 lines
3.6 KiB
JavaScript
const chokidar = require("chokidar");
|
|
const ipcTypes = require("../../src/ipc.types.commonjs");
|
|
const path = require("path");
|
|
const { ImportJob } = require("../decoder/decoder");
|
|
const { BrowserWindow } = require("electron");
|
|
const { store } = require("../electron-store");
|
|
const {
|
|
NewNotification,
|
|
} = require("../notification-wrapper/notification-wrapper");
|
|
const log = require("electron-log");
|
|
//const Nucleus = require("nucleus-nodejs");
|
|
var watcher;
|
|
|
|
async function StartWatcher() {
|
|
const filePaths = store.get("filePaths") || [];
|
|
log.info("Use polling? ", store.get("polling").enabled);
|
|
if (filePaths.length === 0) {
|
|
NewNotification({
|
|
title: "RPS Watcher cannot start",
|
|
body: "Please set the appropriate file paths and try again.",
|
|
});
|
|
log.warn("Cannot start watcher. No file paths set.");
|
|
return [];
|
|
}
|
|
|
|
if (watcher) {
|
|
try {
|
|
log.info("Trying to close watcher - it already existed.");
|
|
await watcher.close();
|
|
|
|
log.info("Watcher closed successfully!");
|
|
} catch (error) {
|
|
log.error("Error trying to close Watcher.", error);
|
|
}
|
|
}
|
|
|
|
watcher = chokidar.watch(filePaths, {
|
|
ignored: (fp, stats) => {
|
|
const p = path.parse(fp);
|
|
return p.ext !== "" && p.ext.toUpperCase() !== ".ENV";
|
|
},
|
|
usePolling: store.get("polling").enabled || false,
|
|
interval: store.get("polling").pollingInterval || 1000,
|
|
persistent: true,
|
|
ignoreInitial: true,
|
|
awaitWriteFinish: {
|
|
pollInterval: 500,
|
|
stabilityThreshold: 2000,
|
|
},
|
|
});
|
|
|
|
watcher
|
|
.on("add", async function (path) {
|
|
console.log("File", path, "has been added");
|
|
HandleNewFile(path);
|
|
})
|
|
// .on("addDir", function (path) {
|
|
// console.log("Directory", path, "has been added");
|
|
// })
|
|
.on("change", async function (path) {
|
|
console.log("File", path, "has been changed");
|
|
HandleNewFile(path);
|
|
})
|
|
// .on("unlink", function (path) {
|
|
// console.log("File", path, "has been removed");
|
|
// })
|
|
// .on("unlinkDir", function (path) {
|
|
// console.log("Directory", path, "has been removed");
|
|
// })
|
|
.on("error", function (error) {
|
|
log.error("Error in Watcher", error);
|
|
const b = BrowserWindow.getFocusedWindow();
|
|
if (b) {
|
|
b.webContents.send(
|
|
ipcTypes.default.fileWatcher.toRenderer.error,
|
|
error
|
|
);
|
|
}
|
|
// Nucleus.track("WATCHER_ERROR", error);
|
|
})
|
|
.on("ready", onWatcherReady)
|
|
.on("raw", function (event, path, details) {
|
|
// This event should be triggered everytime something happens.
|
|
// console.log("Raw event info:", event, path, details);
|
|
});
|
|
|
|
return filePaths;
|
|
}
|
|
|
|
function onWatcherReady() {
|
|
log.info("Watcher ready!");
|
|
const b = BrowserWindow.getAllWindows()[0];
|
|
b.webContents.send(ipcTypes.default.fileWatcher.toRenderer.startSuccess);
|
|
NewNotification({
|
|
title: "RPS Watcher Started",
|
|
body: "Newly exported estimates will be automatically uploaded.",
|
|
});
|
|
log.info("Confirmed watched paths:", watcher.getWatched());
|
|
}
|
|
|
|
async function StopWatcher() {
|
|
if (watcher) {
|
|
await watcher.close();
|
|
log.info("Watcher stopped.");
|
|
const b = BrowserWindow.getAllWindows()[0];
|
|
b.webContents.send(ipcTypes.default.fileWatcher.toRenderer.stopSuccess);
|
|
NewNotification({
|
|
title: "RPS Watcher Stopped",
|
|
body: "Estimates will not be automatically uploaded.",
|
|
});
|
|
}
|
|
}
|
|
|
|
exports.StartWatcher = StartWatcher;
|
|
exports.StopWatcher = StopWatcher;
|
|
exports.watcher = watcher;
|
|
|
|
async function HandleNewFile(path) {
|
|
// Nucleus.track("IMPORT_JOB_FROM_WATCHER");
|
|
await ImportJob(path);
|
|
}
|