Preliminary file watch logic added

This commit is contained in:
itdominator 2025-06-12 22:56:03 -05:00
parent 9d3eb76960
commit 7b498d0602
5 changed files with 45 additions and 7 deletions

View File

@ -5,13 +5,13 @@ const os = require('os')
const chokidar = require('chokidar'); const chokidar = require('chokidar');
const HOME_DIR = os.homedir(); const HOME_DIR = os.homedir();
const BASE_PATH = '../build/app'; const BASE_PATH = '../build/app';
const CONFIG_PATH = path.join(HOME_DIR, "/.config/newton/"); const CONFIG_PATH = path.join(HOME_DIR, "/.config/newton/");
const SETTINGS_CONFIG_PATH = path.join(CONFIG_PATH, "/settings.json"); const SETTINGS_CONFIG_PATH = path.join(CONFIG_PATH, "/settings.json");
const LSP_CONFIG_PATH = path.join(BASE_PATH, "/resources/lsp-servers-config.json") const LSP_CONFIG_PATH = path.join(BASE_PATH, "/resources/lsp-servers-config.json")
let window = null; let window = null;
let watcher = null;
const getIconPath = () => { const getIconPath = () => {
@ -34,7 +34,9 @@ const getFileContents = (_path, useRelativePath = false) => {
if (!useRelativePath) { if (!useRelativePath) {
return fs.readFileSync(_path, 'utf8'); return fs.readFileSync(_path, 'utf8');
} else { } else {
return fs.readFileSync(path.join(__dirname, _path), 'utf8'); let fpath = path.join(__dirname, _path);
watcher.add(fpath);
return fs.readFileSync(fpath, 'utf8');
} }
} catch(err) { } catch(err) {
return `{"message": {"type": "error", "text": "Error: Could not read ${_path}"}}`; return `{"message": {"type": "error", "text": "Error: Could not read ${_path}"}}`;
@ -56,6 +58,7 @@ const saveFileAs = (content) => {
} }
saveFile(response.filePath, content); saveFile(response.filePath, content);
watcher.add(response.filePath);
}); });
} }
@ -87,13 +90,40 @@ const openFiles = (startPath) => {
} }
window.webContents.send('load-files', response.filePaths); window.webContents.send('load-files', response.filePaths);
watcher.add(response.filePaths);
}); });
} }
const setWindow = (win) => { const setWindow = (win) => {
window = win; window = win;
} }
const loadFilesWatcher = () => {
watcher = chokidar.watch([], {});
watcher.on('change', (fpath) => {
console.log("File (changed) : ", fpath);
}).on('unlink', (fpath) => {
console.log("File (unlinked) : ", fpath);
});
/*
watcher = chokidar.watch([], {
ignored: (path, stats) => stats?.isFile() && !path.endsWith('.js'), // only watch js files
persistent: true,
});
*/
}
const unwatchFile = async (fpath) => {
console.log("File (unwatch) : ", fpath);
await watcher.unwatch(fpath);
}
const closeFile = (fpath) => {
unwatchFile(fpath);
}
module.exports = { module.exports = {
@ -101,10 +131,13 @@ module.exports = {
openFiles: openFiles, openFiles: openFiles,
saveFile: saveFile, saveFile: saveFile,
saveFileAs: saveFileAs, saveFileAs: saveFileAs,
closeFile: closeFile,
getIconPath: getIconPath, getIconPath: getIconPath,
getFileContents: getFileContents, getFileContents: getFileContents,
getLspConfigData: getLspConfigData, getLspConfigData: getLspConfigData,
getSettingsConfigData: getSettingsConfigData, getSettingsConfigData: getSettingsConfigData,
setWindow: setWindow setWindow: setWindow,
loadFilesWatcher: loadFilesWatcher,
unwatchFile: unwatchFile,
} }
}; };

View File

@ -11,15 +11,17 @@ const { newton } = require('./app');
const loadHandlers = () => { const loadHandlers = () => {
ipcMain.handle('getLspConfigData', (eve) => newton.fs.getLspConfigData()); ipcMain.handle('getLspConfigData', (eve) => newton.fs.getLspConfigData());
ipcMain.handle('getFileContents', (eve, file) => newton.fs.getFileContents(file)); ipcMain.handle('getFileContents', (eve, path) => newton.fs.getFileContents(path));
ipcMain.handle('openFiles', (eve, startPath) => newton.fs.openFiles(startPath)); ipcMain.handle('openFiles', (eve, startPath) => newton.fs.openFiles(startPath));
ipcMain.handle('saveFile', (eve, path, content) => newton.fs.saveFile(path, content)); ipcMain.handle('saveFile', (eve, path, content) => newton.fs.saveFile(path, content));
ipcMain.handle('closeFile', (eve, path) => newton.fs.closeFile(path));
ipcMain.handle('saveFileAs', (eve, content) => newton.fs.saveFileAs(content)); ipcMain.handle('saveFileAs', (eve, content) => newton.fs.saveFileAs(content));
} }
app.whenReady().then(() => { app.whenReady().then(() => {
newton.args.loadArgs(); newton.args.loadArgs();
newton.fs.loadFilesWatcher();
loadHandlers(); loadHandlers();
newton.settings.loadsettings(); newton.settings.loadsettings();

View File

@ -13,10 +13,11 @@ contextBridge.exposeInMainWorld('main', {
contextBridge.exposeInMainWorld('fs', { contextBridge.exposeInMainWorld('fs', {
getLspConfigData: () => ipcRenderer.invoke("getLspConfigData"), getLspConfigData: () => ipcRenderer.invoke("getLspConfigData"),
getFileContents: (file) => ipcRenderer.invoke("getFileContents", file), getFileContents: (path) => ipcRenderer.invoke("getFileContents", path),
openFiles: (startPath) => ipcRenderer.invoke("openFiles", startPath), openFiles: (startPath) => ipcRenderer.invoke("openFiles", startPath),
saveFile: (path, content) => ipcRenderer.invoke("saveFile", path, content), saveFile: (path, content) => ipcRenderer.invoke("saveFile", path, content),
saveFileAs: (content) => ipcRenderer.invoke("saveFileAs", content), saveFileAs: (content) => ipcRenderer.invoke("saveFileAs", content),
closeFile: (path) => ipcRenderer.invoke("closeFile", path),
getPathForFile: (file) => webUtils.getPathForFile(file), getPathForFile: (file) => webUtils.getPathForFile(file),
onLoadFiles: (callback) => ipcRenderer.on('load-files', (_event, files) => callback(files)), onLoadFiles: (callback) => ipcRenderer.on('load-files', (_event, paths) => callback(paths)),
}); });

View File

@ -94,6 +94,7 @@ export class EditorsComponent {
file.session.destroy(); file.session.destroy();
this.files.delete(path); this.files.delete(path);
window.fs.closeFile(path);
}); });
} }

View File

@ -27,8 +27,9 @@ declare global {
openFiles: (arg0) => Promise<string>, openFiles: (arg0) => Promise<string>,
saveFile: (arg0: any, arg1: any) => Promise<string>, saveFile: (arg0: any, arg1: any) => Promise<string>,
saveFileAs: (arg0: any) => Promise<string>, saveFileAs: (arg0: any) => Promise<string>,
closeFile: (arg0: any) => Promise<string>,
getPathForFile: any, getPathForFile: any,
onLoadFiles: (arg0: any) => Promise<string>, onLoadFiles: (arg0: any) => Promise<string>,
} }
} }
} }