Add support for importing multiple dictionaries at once

This commit is contained in:
toasted-nutbread 2019-11-02 16:58:21 -04:00
parent e091c7ebe2
commit e5dcb41824
2 changed files with 32 additions and 18 deletions

View File

@ -511,6 +511,7 @@ async function onDictionaryImport(e) {
const dictFile = $('#dict-file'); const dictFile = $('#dict-file');
const dictControls = $('#dict-importer').hide(); const dictControls = $('#dict-importer').hide();
const dictProgress = $('#dict-import-progress').show(); const dictProgress = $('#dict-import-progress').show();
const dictImportInfo = document.querySelector('#dict-import-info');
try { try {
dictionaryErrorsShow(null); dictionaryErrorsShow(null);
@ -523,10 +524,18 @@ async function onDictionaryImport(e) {
storageUpdateStats(); storageUpdateStats();
} }
}; };
setProgress(0.0);
const exceptions = []; const exceptions = [];
const summary = await utilDatabaseImport(e.target.files[0], updateProgress, exceptions); 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})`;
}
const summary = await utilDatabaseImport(files[i], updateProgress, exceptions);
for (const options of toIterable(await getOptionsArray())) { for (const options of toIterable(await getOptionsArray())) {
const dictionaryOptions = SettingsDictionaryListUI.createDictionaryOptions(); const dictionaryOptions = SettingsDictionaryListUI.createDictionaryOptions();
dictionaryOptions.enabled = true; dictionaryOptions.enabled = true;
@ -535,6 +544,7 @@ async function onDictionaryImport(e) {
options.general.mainDictionary = summary.title; options.general.mainDictionary = summary.title;
} }
} }
await settingsSaveOptions(); await settingsSaveOptions();
if (exceptions.length > 0) { if (exceptions.length > 0) {
@ -545,11 +555,14 @@ async function onDictionaryImport(e) {
const optionsContext = getOptionsContext(); const optionsContext = getOptionsContext();
const options = await apiOptionsGet(optionsContext); const options = await apiOptionsGet(optionsContext);
onDatabaseUpdated(options); onDatabaseUpdated(options);
}
} catch (err) { } catch (err) {
dictionaryErrorsShow([err]); dictionaryErrorsShow([err]);
} finally { } finally {
dictionarySpinnerShow(false); dictionarySpinnerShow(false);
dictImportInfo.hidden = false;
dictImportInfo.textContent = '';
dictFile.val(''); dictFile.val('');
dictControls.show(); dictControls.show();
dictProgress.hide(); dictProgress.hide();

View File

@ -434,6 +434,7 @@
<div id="dict-import-progress"> <div id="dict-import-progress">
Dictionary data is being imported, please be patient... Dictionary data is being imported, please be patient...
<span id="dict-import-info" hidden></span>
<div class="progress"> <div class="progress">
<div class="progress-bar progress-bar-striped" style="width: 0%"></div> <div class="progress-bar progress-bar-striped" style="width: 0%"></div>
</div> </div>
@ -449,7 +450,7 @@
<button class="btn btn-primary" id="dict-file-button">Import Dictionary</button> <button class="btn btn-primary" id="dict-file-button">Import Dictionary</button>
<button class="btn btn-danger" id="dict-purge-button">Purge Database</button> <button class="btn btn-danger" id="dict-purge-button">Purge Database</button>
</div> </div>
<div hidden><input type="file" id="dict-file"></div> <div hidden><input type="file" id="dict-file" multiple></div>
</div> </div>
<div class="modal fade" tabindex="-1" role="dialog" id="dict-purge-modal"> <div class="modal fade" tabindex="-1" role="dialog" id="dict-purge-modal">