From cc510751904768766a015f4587a16618ff8f1d0c Mon Sep 17 00:00:00 2001 From: Michael Ochmann Date: Mon, 5 Feb 2024 16:18:06 +0100 Subject: [PATCH] now locking settings if write is occuring --- src/SettingsManager.js | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/SettingsManager.js b/src/SettingsManager.js index b844811..9dde349 100644 --- a/src/SettingsManager.js +++ b/src/SettingsManager.js @@ -8,17 +8,23 @@ const path = require("path"); class SettingsManager { app; data; + locked; constructor(app) { - this.app = app; - this.data = null; + this.app = app; + this.data = null; + this.locked = false; if (!SettingsManager.CheckFileSystem()) { if (!fsn.existsSync(SettingsManager.Folder)) fsn.mkdirSync(SettingsManager.Folder); 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::set", (_, key, value) => this.set(key, value)); @@ -41,9 +47,15 @@ class SettingsManager { this.app.windowManager.mainWindow?.send("SettingsManager::change", this.data); } - save() { - fs.writeFile(SettingsManager.File, JSON.stringify(this.data, null, 4)); + async save() { + 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.locked = false; } async reset() {