diff options
Diffstat (limited to 'ext')
| -rw-r--r-- | ext/bg/js/backend.js | 45 | ||||
| -rw-r--r-- | ext/bg/js/settings/anki.js | 10 | ||||
| -rw-r--r-- | ext/bg/js/settings/dictionaries.js | 12 | ||||
| -rw-r--r-- | ext/bg/js/util.js | 29 | ||||
| -rw-r--r-- | ext/mixed/js/api.js | 24 | 
5 files changed, 79 insertions, 41 deletions
| diff --git a/ext/bg/js/backend.js b/ext/bg/js/backend.js index be8ea322..bc687a24 100644 --- a/ext/bg/js/backend.js +++ b/ext/bg/js/backend.js @@ -102,7 +102,13 @@ class Backend {              ['getQueryParserTemplatesHtml', {handler: this._onApiGetQueryParserTemplatesHtml.bind(this), async: true}],              ['getZoom', {handler: this._onApiGetZoom.bind(this), async: true}],              ['getMessageToken', {handler: this._onApiGetMessageToken.bind(this), async: false}], -            ['getDefaultAnkiFieldTemplates', {handler: this._onApiGetDefaultAnkiFieldTemplates.bind(this), async: false}] +            ['getDefaultAnkiFieldTemplates', {handler: this._onApiGetDefaultAnkiFieldTemplates.bind(this), async: false}], +            ['getAnkiDeckNames', {handler: this._onApiGetAnkiDeckNames.bind(this), async: true}], +            ['getAnkiModelNames', {handler: this._onApiGetAnkiModelNames.bind(this), async: true}], +            ['getAnkiModelFieldNames', {handler: this._onApiGetAnkiModelFieldNames.bind(this), async: true}], +            ['getDictionaryInfo', {handler: this._onApiGetDictionaryInfo.bind(this), async: true}], +            ['getDictionaryCounts', {handler: this._onApiGetDictionaryCounts.bind(this), async: true}], +            ['purgeDatabase', {handler: this._onApiPurgeDatabase.bind(this), async: true}]          ]);          this._commandHandlers = new Map([ @@ -704,6 +710,36 @@ class Backend {          return this.defaultAnkiFieldTemplates;      } +    async _onApiGetAnkiDeckNames(params, sender) { +        this._validatePrivilegedMessageSender(sender); +        return await this.anki.getDeckNames(); +    } + +    async _onApiGetAnkiModelNames(params, sender) { +        this._validatePrivilegedMessageSender(sender); +        return await this.anki.getModelNames(); +    } + +    async _onApiGetAnkiModelFieldNames({modelName}, sender) { +        this._validatePrivilegedMessageSender(sender); +        return await this.anki.getModelFieldNames(modelName); +    } + +    async _onApiGetDictionaryInfo(params, sender) { +        this._validatePrivilegedMessageSender(sender); +        return await this.translator.database.getDictionaryInfo(); +    } + +    async _onApiGetDictionaryCounts({dictionaryNames, getTotal}, sender) { +        this._validatePrivilegedMessageSender(sender); +        return await this.translator.database.getDictionaryCounts(dictionaryNames, getTotal); +    } + +    async _onApiPurgeDatabase(params, sender) { +        this._validatePrivilegedMessageSender(sender); +        return await this.translator.purgeDatabase(); +    } +      // Command handlers      async _onCommandSearch(params) { @@ -800,6 +836,13 @@ class Backend {      // Utilities +    _validatePrivilegedMessageSender(sender) { +        const url = sender.url; +        if (!(typeof url === 'string' && yomichan.isExtensionUrl(url))) { +            throw new Error('Invalid message sender'); +        } +    } +      async _getAudioUri(definition, source, details) {          let optionsContext = (typeof details === 'object' && details !== null ? details.optionsContext : null);          if (!(typeof optionsContext === 'object' && optionsContext !== null)) { diff --git a/ext/bg/js/settings/anki.js b/ext/bg/js/settings/anki.js index b32a9517..ff1277ed 100644 --- a/ext/bg/js/settings/anki.js +++ b/ext/bg/js/settings/anki.js @@ -16,13 +16,13 @@   */  /* global + * apiGetAnkiDeckNames + * apiGetAnkiModelFieldNames + * apiGetAnkiModelNames   * getOptionsContext   * getOptionsMutable   * onFormOptionsChanged   * settingsSaveOptions - * utilAnkiGetDeckNames - * utilAnkiGetModelFieldNames - * utilAnkiGetModelNames   * utilBackgroundIsolate   */ @@ -107,7 +107,7 @@ async function _ankiDeckAndModelPopulate(options) {      const kanjiModel = {value: options.anki.kanji.model, selector: '#anki-kanji-model'};      try {          _ankiSpinnerShow(true); -        const [deckNames, modelNames] = await Promise.all([utilAnkiGetDeckNames(), utilAnkiGetModelNames()]); +        const [deckNames, modelNames] = await Promise.all([apiGetAnkiDeckNames(), apiGetAnkiModelNames()]);          deckNames.sort();          modelNames.sort();          termsDeck.values = deckNames; @@ -180,7 +180,7 @@ async function _onAnkiModelChanged(e) {      let fieldNames;      try {          const modelName = node.value; -        fieldNames = await utilAnkiGetModelFieldNames(modelName); +        fieldNames = await apiGetAnkiModelFieldNames(modelName);          _ankiSetError(null);      } catch (error) {          _ankiSetError(error); diff --git a/ext/bg/js/settings/dictionaries.js b/ext/bg/js/settings/dictionaries.js index 1a6d452b..7eed4273 100644 --- a/ext/bg/js/settings/dictionaries.js +++ b/ext/bg/js/settings/dictionaries.js @@ -17,8 +17,11 @@  /* global   * PageExitPrevention + * apiGetDictionaryCounts + * apiGetDictionaryInfo   * apiOptionsGet   * apiOptionsGetFull + * apiPurgeDatabase   * getOptionsContext   * getOptionsFullMutable   * getOptionsMutable @@ -27,10 +30,7 @@   * storageUpdateStats   * utilBackgroundIsolate   * utilDatabaseDeleteDictionary - * utilDatabaseGetDictionaryCounts - * utilDatabaseGetDictionaryInfo   * utilDatabaseImport - * utilDatabasePurge   */  let dictionaryUI = null; @@ -431,7 +431,7 @@ async function onDictionaryOptionsChanged() {  async function onDatabaseUpdated() {      try { -        const dictionaries = await utilDatabaseGetDictionaryInfo(); +        const dictionaries = await apiGetDictionaryInfo();          dictionaryUI.setDictionaries(dictionaries);          document.querySelector('#dict-warning').hidden = (dictionaries.length > 0); @@ -439,7 +439,7 @@ async function onDatabaseUpdated() {          updateMainDictionarySelectOptions(dictionaries);          await updateMainDictionarySelectValue(); -        const {counts, total} = await utilDatabaseGetDictionaryCounts(dictionaries.map((v) => v.title), true); +        const {counts, total} = await apiGetDictionaryCounts(dictionaries.map((v) => v.title), true);          dictionaryUI.setCounts(counts, total);      } catch (e) {          dictionaryErrorsShow([e]); @@ -618,7 +618,7 @@ async function onDictionaryPurge(e) {          dictionaryErrorsShow(null);          dictionarySpinnerShow(true); -        await utilDatabasePurge(); +        await apiPurgeDatabase();          for (const {options} of toIterable((await getOptionsFullMutable()).profiles)) {              options.dictionaries = utilBackgroundIsolate({});              options.general.mainDictionary = ''; diff --git a/ext/bg/js/util.js b/ext/bg/js/util.js index 69536f02..106365ac 100644 --- a/ext/bg/js/util.js +++ b/ext/bg/js/util.js @@ -79,35 +79,6 @@ function utilBackend() {      return backend;  } -async function utilAnkiGetModelNames() { -    return utilIsolate(await utilBackend().anki.getModelNames()); -} - -async function utilAnkiGetDeckNames() { -    return utilIsolate(await utilBackend().anki.getDeckNames()); -} - -async function utilDatabaseGetDictionaryInfo() { -    return utilIsolate(await utilBackend().translator.database.getDictionaryInfo()); -} - -async function utilDatabaseGetDictionaryCounts(dictionaryNames, getTotal) { -    return utilIsolate(await utilBackend().translator.database.getDictionaryCounts( -        utilBackgroundIsolate(dictionaryNames), -        utilBackgroundIsolate(getTotal) -    )); -} - -async function utilAnkiGetModelFieldNames(modelName) { -    return utilIsolate(await utilBackend().anki.getModelFieldNames( -        utilBackgroundIsolate(modelName) -    )); -} - -async function utilDatabasePurge() { -    return utilIsolate(await utilBackend().translator.purgeDatabase()); -} -  async function utilDatabaseDeleteDictionary(dictionaryName, onProgress) {      return utilIsolate(await utilBackend().translator.database.deleteDictionary(          utilBackgroundIsolate(dictionaryName), diff --git a/ext/mixed/js/api.js b/ext/mixed/js/api.js index 50b285a5..56e6a715 100644 --- a/ext/mixed/js/api.js +++ b/ext/mixed/js/api.js @@ -120,6 +120,30 @@ function apiGetDefaultAnkiFieldTemplates() {      return _apiInvoke('getDefaultAnkiFieldTemplates');  } +function apiGetAnkiDeckNames() { +    return _apiInvoke('getAnkiDeckNames'); +} + +function apiGetAnkiModelNames() { +    return _apiInvoke('getAnkiModelNames'); +} + +function apiGetAnkiModelFieldNames(modelName) { +    return _apiInvoke('getAnkiModelFieldNames', {modelName}); +} + +function apiGetDictionaryInfo() { +    return _apiInvoke('getDictionaryInfo'); +} + +function apiGetDictionaryCounts(dictionaryNames, getTotal) { +    return _apiInvoke('getDictionaryCounts', {dictionaryNames, getTotal}); +} + +function apiPurgeDatabase() { +    return _apiInvoke('purgeDatabase'); +} +  function _apiInvoke(action, params={}) {      const data = {action, params};      return new Promise((resolve, reject) => { |