From 8175f80183caa0673a946b2405feae0c9535af48 Mon Sep 17 00:00:00 2001 From: toasted-nutbread Date: Sat, 7 Sep 2019 15:06:15 -0400 Subject: [PATCH] Remove calls to apiOptionsGetSync Use apiOptionsGet everywhere to ensure options is initialized. --- ext/bg/js/api.js | 16 ++++++---------- ext/bg/js/backend.js | 20 +++++++++++++++++--- 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/ext/bg/js/api.js b/ext/bg/js/api.js index 45dc36e7..53e25348 100644 --- a/ext/bg/js/api.js +++ b/ext/bg/js/api.js @@ -17,16 +17,12 @@ */ -function apiOptionsGetSync(optionsContext) { +function apiOptionsGet(optionsContext) { return utilBackend().getOptions(optionsContext); } -async function apiOptionsGet(optionsContext) { - return apiOptionsGetSync(optionsContext); -} - async function apiTermsFind(text, optionsContext) { - const options = apiOptionsGetSync(optionsContext); + const options = await apiOptionsGet(optionsContext); const translator = utilBackend().translator; const searcher = { @@ -49,13 +45,13 @@ async function apiTermsFind(text, optionsContext) { } async function apiKanjiFind(text, optionsContext) { - const options = apiOptionsGetSync(optionsContext); + const options = await apiOptionsGet(optionsContext); const definitions = await utilBackend().translator.findKanji(text, dictEnabledSet(options)); return definitions.slice(0, options.general.maxResults); } async function apiDefinitionAdd(definition, mode, context, optionsContext) { - const options = apiOptionsGetSync(optionsContext); + const options = await apiOptionsGet(optionsContext); if (mode !== 'kanji') { await audioInject( @@ -78,7 +74,7 @@ async function apiDefinitionAdd(definition, mode, context, optionsContext) { } async function apiDefinitionsAddable(definitions, modes, optionsContext) { - const options = apiOptionsGetSync(optionsContext); + const options = await apiOptionsGet(optionsContext); const states = []; try { @@ -134,7 +130,7 @@ async function apiCommandExec(command) { toggle: async () => { const optionsContext = {depth: 0}; - const options = apiOptionsGetSync(optionsContext); + const options = await apiOptionsGet(optionsContext); options.general.enable = !options.general.enable; await optionsSave(options); } diff --git a/ext/bg/js/backend.js b/ext/bg/js/backend.js index 59de5a50..6dcf8e4d 100644 --- a/ext/bg/js/backend.js +++ b/ext/bg/js/backend.js @@ -26,6 +26,9 @@ class Backend { depth: 0 }; + this.isPreparedResolve = null; + this.isPreparedPromise = new Promise((resolve) => (this.isPreparedResolve = resolve)); + this.apiForwarder = new BackendApiForwarder(); } @@ -38,10 +41,14 @@ class Backend { } chrome.runtime.onMessage.addListener(this.onMessage.bind(this)); - const options = this.getOptions(this.optionsContext); + const options = this.getOptionsSync(this.optionsContext); if (options.general.showGuide) { chrome.tabs.create({url: chrome.extension.getURL('/bg/guide.html')}); } + + this.isPreparedResolve(); + this.isPreparedResolve = null; + this.isPreparedPromise = null; } onOptionsUpdated(options) { @@ -129,7 +136,7 @@ class Backend { } applyOptions() { - const options = this.getOptions(this.optionsContext); + const options = this.getOptionsSync(this.optionsContext); if (!options.general.enable) { this.setExtensionBadgeBackgroundColor('#555555'); this.setExtensionBadgeText('off'); @@ -143,7 +150,14 @@ class Backend { this.anki = options.anki.enable ? new AnkiConnect(options.anki.server) : new AnkiNull(); } - getOptions(optionsContext) { + async getOptions(optionsContext) { + if (this.isPreparedPromise !== null) { + await this.isPreparedPromise; + } + return this.getOptionsSync(optionsContext); + } + + getOptionsSync(optionsContext) { return this.options; }