diff options
Diffstat (limited to 'ext/bg/js')
| -rw-r--r-- | ext/bg/js/api.js | 16 | ||||
| -rw-r--r-- | 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;      } |