now locking settings if write is occuring

development
Michael Ochmann 1 year ago
parent b8ad7b57da
commit cc51075190
  1. 18
      src/SettingsManager.js

@ -8,17 +8,23 @@ const path = require("path");
class SettingsManager { class SettingsManager {
app; app;
data; data;
locked;
constructor(app) { constructor(app) {
this.app = app; this.app = app;
this.data = null; this.data = null;
this.locked = false;
if (!SettingsManager.CheckFileSystem()) { if (!SettingsManager.CheckFileSystem()) {
if (!fsn.existsSync(SettingsManager.Folder)) if (!fsn.existsSync(SettingsManager.Folder))
fsn.mkdirSync(SettingsManager.Folder); fsn.mkdirSync(SettingsManager.Folder);
fsn.writeFileSync(SettingsManager.File, "{}"); fsn.writeFileSync(SettingsManager.File, "{}");
} }
this.data = JSON.parse(fsn.readFileSync(SettingsManager.File, {encoding : "utf-8"})); try {
this.data = JSON.parse(fsn.readFileSync(SettingsManager.File, {encoding : "utf-8"})) ?? {};
} catch (error) {
this.data = {};
}
ipcMain.handle("SettingsManager::get", (_, key, defaultValue = null) => this.get(key, defaultValue)); ipcMain.handle("SettingsManager::get", (_, key, defaultValue = null) => this.get(key, defaultValue));
ipcMain.handle("SettingsManager::set", (_, key, value) => this.set(key, value)); ipcMain.handle("SettingsManager::set", (_, key, value) => this.set(key, value));
@ -41,9 +47,15 @@ class SettingsManager {
this.app.windowManager.mainWindow?.send("SettingsManager::change", this.data); this.app.windowManager.mainWindow?.send("SettingsManager::change", this.data);
} }
save() { async save() {
fs.writeFile(SettingsManager.File, JSON.stringify(this.data, null, 4)); if (this.locked) {
setTimeout(async () => await this.save(), 200);
return;
}
this.locked = true;
await fs.writeFile(SettingsManager.File, JSON.stringify(this.data, null, 4));
this.change(); this.change();
this.locked = false;
} }
async reset() { async reset() {

Loading…
Cancel
Save