diff options
| -rw-r--r-- | ext/bg/js/settings-dictionaries.js | 47 | ||||
| -rw-r--r-- | ext/bg/settings.html | 3 | 
2 files changed, 32 insertions, 18 deletions
| diff --git a/ext/bg/js/settings-dictionaries.js b/ext/bg/js/settings-dictionaries.js index bf1b232f..c40648e0 100644 --- a/ext/bg/js/settings-dictionaries.js +++ b/ext/bg/js/settings-dictionaries.js @@ -511,6 +511,7 @@ async function onDictionaryImport(e) {      const dictFile = $('#dict-file');      const dictControls = $('#dict-importer').hide();      const dictProgress = $('#dict-import-progress').show(); +    const dictImportInfo = document.querySelector('#dict-import-info');      try {          dictionaryErrorsShow(null); @@ -523,33 +524,45 @@ async function onDictionaryImport(e) {                  storageUpdateStats();              }          }; -        setProgress(0.0);          const exceptions = []; -        const summary = await utilDatabaseImport(e.target.files[0], updateProgress, exceptions); -        for (const options of toIterable(await getOptionsArray())) { -            const dictionaryOptions = SettingsDictionaryListUI.createDictionaryOptions(); -            dictionaryOptions.enabled = true; -            options.dictionaries[summary.title] = dictionaryOptions; -            if (summary.sequenced && options.general.mainDictionary === '') { -                options.general.mainDictionary = summary.title; +        const files = [...e.target.files]; + +        for (let i = 0, ii = files.length; i < ii; ++i) { +            setProgress(0.0); +            if (ii > 1) { +                dictImportInfo.hidden = false; +                dictImportInfo.textContent = `(${i + 1} of ${ii})`;              } -        } -        await settingsSaveOptions(); -        if (exceptions.length > 0) { -            exceptions.push(`Dictionary may not have been imported properly: ${exceptions.length} error${exceptions.length === 1 ? '' : 's'} reported.`); -            dictionaryErrorsShow(exceptions); -        } +            const summary = await utilDatabaseImport(files[i], updateProgress, exceptions); +            for (const options of toIterable(await getOptionsArray())) { +                const dictionaryOptions = SettingsDictionaryListUI.createDictionaryOptions(); +                dictionaryOptions.enabled = true; +                options.dictionaries[summary.title] = dictionaryOptions; +                if (summary.sequenced && options.general.mainDictionary === '') { +                    options.general.mainDictionary = summary.title; +                } +            } -        const optionsContext = getOptionsContext(); -        const options = await apiOptionsGet(optionsContext); -        onDatabaseUpdated(options); +            await settingsSaveOptions(); + +            if (exceptions.length > 0) { +                exceptions.push(`Dictionary may not have been imported properly: ${exceptions.length} error${exceptions.length === 1 ? '' : 's'} reported.`); +                dictionaryErrorsShow(exceptions); +            } + +            const optionsContext = getOptionsContext(); +            const options = await apiOptionsGet(optionsContext); +            onDatabaseUpdated(options); +        }      } catch (err) {          dictionaryErrorsShow([err]);      } finally {          dictionarySpinnerShow(false); +        dictImportInfo.hidden = false; +        dictImportInfo.textContent = '';          dictFile.val('');          dictControls.show();          dictProgress.hide(); diff --git a/ext/bg/settings.html b/ext/bg/settings.html index 5842e97a..d3465e61 100644 --- a/ext/bg/settings.html +++ b/ext/bg/settings.html @@ -434,6 +434,7 @@                  <div id="dict-import-progress">                      Dictionary data is being imported, please be patient... +                    <span id="dict-import-info" hidden></span>                      <div class="progress">                          <div class="progress-bar progress-bar-striped" style="width: 0%"></div>                      </div> @@ -449,7 +450,7 @@                          <button class="btn btn-primary" id="dict-file-button">Import Dictionary</button>                          <button class="btn btn-danger" id="dict-purge-button">Purge Database</button>                      </div> -                    <div hidden><input type="file" id="dict-file"></div> +                    <div hidden><input type="file" id="dict-file" multiple></div>                  </div>                  <div class="modal fade" tabindex="-1" role="dialog" id="dict-purge-modal"> |