From 06bff7da09a029215ef92fc15ed0b688210632e8 Mon Sep 17 00:00:00 2001 From: mauro-balades Date: Sun, 22 Sep 2024 22:13:15 +0200 Subject: [PATCH] Refactor ZenKeyboardShortcuts to use async/await for initialization and handle potential error when retrieving active workspace from cache --- src/ZenKeyboardShortcuts.mjs | 45 +++++++++++++++++++++++++----------- 1 file changed, 31 insertions(+), 14 deletions(-) diff --git a/src/ZenKeyboardShortcuts.mjs b/src/ZenKeyboardShortcuts.mjs index bcc6e47..c775c07 100644 --- a/src/ZenKeyboardShortcuts.mjs +++ b/src/ZenKeyboardShortcuts.mjs @@ -168,7 +168,6 @@ const KEYCODE_MAP = { BACKSPACE: 'VK_BACK', }; -const SHORTCUTS_STORAGE_KEY = 'zen.keyboard.shortcuts'; const ZEN_SHORTCUTS_GROUP = 'zen'; const FIREFOX_SHORTCUTS_GROUP = 'firefox'; const VALID_SHORTCUT_GROUPS = [ZEN_SHORTCUTS_GROUP, FIREFOX_SHORTCUTS_GROUP]; @@ -451,26 +450,44 @@ class KeyShortcut { } } +var gZenKeyboardShortcutsStorage = new class { + init() {} + + get shortcutsFile() { + return PathUtils.join(PathUtils.profileDir, 'zen-keyboard-shortcuts.json'); + } + + async save(data) { + await IOUtils.writeJSON(this.shortcutsFile, {shortcuts: data}); + } + + async load() { + try { + return (await IOUtils.readJSON(this.shortcutsFile)).shortcuts; + } catch (e) { + console.error('Error loading shortcuts file', e); + return null; + } + } +} + var gZenKeyboardShortcutsManager = { - init() { + async init() { if (window.location.href == 'chrome://browser/content/browser.xhtml') { console.info('Zen CKS: Initializing shortcuts'); - this._currentShortcutList = []; - this._saveShortcuts([]); // TODO Remove on release + this._currentShortcutList = await this._loadSaved(); - this._currentShortcutList = this._loadSaved(); + // TODO: add some sort of observer to listen for changes in the shortcuts file - Services.prefs.addObserver(SHORTCUTS_STORAGE_KEY, this._applyShortcuts.bind(this)); - - this._saveShortcuts(); + await this._saveShortcuts(); console.info('Zen CKS: Initialized'); } }, - _loadSaved() { - let data = JSON.parse(Services.prefs.getStringPref(SHORTCUTS_STORAGE_KEY)); + async _loadSaved() { + let data = await gZenKeyboardShortcutsStorage.load(); if (!data || data.length == 0) { return this._loadDefaults(); } @@ -523,16 +540,16 @@ var gZenKeyboardShortcutsManager = { console.debug('Shortcuts applied...'); }, - _saveShortcuts() { + async _saveShortcuts() { let json = []; for (shortcut of this._currentShortcutList) { json.push(shortcut.toJSONForm()); } - Services.prefs.setStringPref(SHORTCUTS_STORAGE_KEY, JSON.stringify(json)); + await gZenKeyboardShortcutsStorage.save(json); }, - setShortcut(action, shortcut, modifiers) { + async setShortcut(action, shortcut, modifiers) { if (!action) { throw new Error('Action cannot be null'); } @@ -554,7 +571,7 @@ var gZenKeyboardShortcutsManager = { console.debug(this._currentShortcutList); - this._saveShortcuts(); + await this._saveShortcuts(); }, getModifiableShortcuts() {