diff options
Diffstat (limited to 'ext')
| -rw-r--r-- | ext/js/dictionary/dictionary-importer.js | 5 | ||||
| -rw-r--r-- | ext/js/pages/settings/dictionary-import-controller.js | 13 | 
2 files changed, 14 insertions, 4 deletions
| diff --git a/ext/js/dictionary/dictionary-importer.js b/ext/js/dictionary/dictionary-importer.js index 16998a8f..310b2ec1 100644 --- a/ext/js/dictionary/dictionary-importer.js +++ b/ext/js/dictionary/dictionary-importer.js @@ -106,7 +106,10 @@ export class DictionaryImporter {          // Verify database is not already imported          if (await dictionaryDatabase.dictionaryExists(dictionaryTitle)) { -            throw new Error('Dictionary is already imported'); +            return { +                errors: [new Error(`Dictionary ${dictionaryTitle} is already imported, skipped it.`)], +                result: null +            };          }          // Load schemas diff --git a/ext/js/pages/settings/dictionary-import-controller.js b/ext/js/pages/settings/dictionary-import-controller.js index 64d94a52..f63eb49e 100644 --- a/ext/js/pages/settings/dictionary-import-controller.js +++ b/ext/js/pages/settings/dictionary-import-controller.js @@ -149,6 +149,8 @@ export class DictionaryImportController {          const prevention = this._preventPageExit(); +        /** @type {Error[]} */ +        let errors = [];          try {              this._setModifying(true);              this._hideErrors(); @@ -196,12 +198,12 @@ export class DictionaryImportController {                      count: 0                  });                  if (statusFooter !== null) { statusFooter.setTaskActive(progressSelector, true); } - -                await this._importDictionary(files[i], importDetails, onProgress); +                errors = [...errors, ...(await this._importDictionary(files[i], importDetails, onProgress) ?? [])];              }          } catch (error) { -            this._showErrors([toError(error)]); +            errors.push(toError(error));          } finally { +            this._showErrors(errors);              prevention.end();              for (const progress of progressContainers) { progress.hidden = true; }              if (statusFooter !== null) { statusFooter.setTaskActive(progressSelector, false); } @@ -231,10 +233,15 @@ export class DictionaryImportController {       * @param {File} file       * @param {import('dictionary-importer').ImportDetails} importDetails       * @param {import('dictionary-worker').ImportProgressCallback} onProgress +     * @returns {Promise<Error[] | undefined>}       */      async _importDictionary(file, importDetails, onProgress) {          const archiveContent = await this._readFile(file);          const {result, errors} = await new DictionaryWorker().importDictionary(archiveContent, importDetails, onProgress); +        if (!result) { +            return errors; +        } +          void this._settingsController.application.api.triggerDatabaseUpdated('dictionary', 'import');          const errors2 = await this._addDictionarySettings(result.sequenced, result.title); |