From 275dd2d88230b4ce88e88c43cb00ea9240d9e85e Mon Sep 17 00:00:00 2001 From: WolverinDEV Date: Sat, 9 Nov 2019 13:19:58 +0100 Subject: [PATCH] Better exception handling within the setting loader --- shared/js/settings.ts | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/shared/js/settings.ts b/shared/js/settings.ts index e476fc42..75247c48 100644 --- a/shared/js/settings.ts +++ b/shared/js/settings.ts @@ -348,7 +348,25 @@ class Settings extends StaticSettings { constructor() { super(); - this.cacheGlobal = JSON.parse(localStorage.getItem("settings.global")); + + const json = localStorage.getItem("settings.global"); + try { + this.cacheGlobal = JSON.parse(json); + } catch(error) { + log.error(LogCategory.GENERAL, tr("Failed to load global settings!\nJson: %s\nError: %o"), json, error); + + const show_popup = () => { + createErrorModal(tr("Failed to load global settings"), tr("Failed to load global client settings!\nLookup console for more information.")).open(); + }; + if(!loader.finished()) + loader.register_task(loader.Stage.LOADED, { + priority: 0, + name: "Settings error", + function: async () => show_popup() + }); + else + show_popup(); + } if(!this.cacheGlobal) this.cacheGlobal = {}; this.saveWorker = setInterval(() => { if(this.updated) @@ -445,7 +463,13 @@ class ServerSettings extends SettingsBase { this._server_unique_id = server_unique_id; if(this._server_unique_id) { - this.cacheServer = JSON.parse(localStorage.getItem("settings.server_" + server_unique_id)); + + const json = localStorage.getItem("settings.server_" + server_unique_id); + try { + this.cacheServer = JSON.parse(json); + } catch(error) { + log.error(LogCategory.GENERAL, tr("Failed to load server settings for server %s!\nJson: %s\nError: %o"), server_unique_id, json, error); + } if(!this.cacheServer) this.cacheServer = {}; }