Preliminary file watch logic added
This commit is contained in:
parent
9d3eb76960
commit
7b498d0602
39
newton/fs.js
39
newton/fs.js
@ -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,
|
||||||
}
|
}
|
||||||
};
|
};
|
@ -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();
|
||||||
|
@ -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)),
|
||||||
});
|
});
|
@ -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);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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>,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user