summaryrefslogtreecommitdiff
path: root/ext/bg/js
diff options
context:
space:
mode:
Diffstat (limited to 'ext/bg/js')
-rw-r--r--ext/bg/js/database.js48
-rw-r--r--ext/bg/js/util.js64
2 files changed, 47 insertions, 65 deletions
diff --git a/ext/bg/js/database.js b/ext/bg/js/database.js
index 9eed8ea3..45ba3d08 100644
--- a/ext/bg/js/database.js
+++ b/ext/bg/js/database.js
@@ -224,7 +224,53 @@ class Database {
await this.db.kanji.bulkAdd(rows);
};
- await zipLoadDb(archive, indexLoaded, termsLoaded, kanjiLoaded);
+ await Database.importDictionaryZip(archive, indexLoaded, termsLoaded, kanjiLoaded);
return summary;
}
+
+ static async importDictionaryZip(archive, indexLoaded, termsLoaded, kanjiLoaded) {
+ const files = (await JSZip.loadAsync(archive)).files;
+
+ const indexFile = files['index.json'];
+ if (!indexFile) {
+ throw 'no dictionary index found in archive';
+ }
+
+ const index = JSON.parse(await indexFile.async('string'));
+ if (!index.title || !index.version || !index.revision) {
+ throw 'unrecognized dictionary format';
+ }
+
+ await indexLoaded(
+ index.title,
+ index.version,
+ index.revision,
+ index.tagMeta || {},
+ index.termBanks > 0,
+ index.kanjiBanks > 0
+ );
+
+ const banksTotal = index.termBanks + index.kanjiBanks;
+ let banksLoaded = 0;
+
+ for (let i = 1; i <= index.termBanks; ++i) {
+ const bankFile = files[`term_bank_${i}.json`];
+ if (bankFile) {
+ const bank = JSON.parse(await bankFile.async('string'));
+ await termsLoaded(index.title, bank, banksTotal, banksLoaded++);
+ } else {
+ throw 'missing term bank file';
+ }
+ }
+
+ for (let i = 1; i <= index.kanjiBanks; ++i) {
+ const bankFile = files[`kanji_bank_${i}.json`];
+ if (bankFile) {
+ const bank = JSON.parse(await bankFile.async('string'));
+ await kanjiLoaded(index.title, bank, banksTotal, banksLoaded++);
+ } else {
+ throw 'missing kanji bank file';
+ }
+ }
+ }
}
diff --git a/ext/bg/js/util.js b/ext/bg/js/util.js
index b39b4b2f..1954e83b 100644
--- a/ext/bg/js/util.js
+++ b/ext/bg/js/util.js
@@ -456,70 +456,6 @@ function jsonLoadInt(url) {
}
/*
- * Zip
- */
-
-function zipLoadDb(archive, indexLoaded, termsLoaded, kanjiLoaded) {
- return JSZip.loadAsync(archive).then(files => files.files).then(files => {
- const indexFile = files['index.json'];
- if (!indexFile) {
- return Promise.reject('no dictionary index found in archive');
- }
-
- return indexFile.async('string').then(indexJson => {
- const index = JSON.parse(indexJson);
- if (!index.title || !index.version || !index.revision) {
- return Promise.reject('unrecognized dictionary format');
- }
-
- return indexLoaded(
- index.title,
- index.version,
- index.revision,
- index.tagMeta || {},
- index.termBanks > 0,
- index.kanjiBanks > 0
- ).then(() => index);
- }).then(index => {
- const loaders = [];
- const banksTotal = index.termBanks + index.kanjiBanks;
- let banksLoaded = 0;
-
- for (let i = 1; i <= index.termBanks; ++i) {
- const bankFile = files[`term_bank_${i}.json`];
- if (!bankFile) {
- return Promise.reject('missing term bank file');
- }
-
- loaders.push(() => bankFile.async('string').then(bankJson => {
- const bank = JSON.parse(bankJson);
- return termsLoaded(index.title, bank, banksTotal, banksLoaded++);
- }));
- }
-
- for (let i = 1; i <= index.kanjiBanks; ++i) {
- const bankFile = files[`kanji_bank_${i}.json`];
- if (!bankFile) {
- return Promise.reject('missing kanji bank file');
- }
-
- loaders.push(() => bankFile.async('string').then(bankJson => {
- const bank = JSON.parse(bankJson);
- return kanjiLoaded(index.title, bank, banksTotal, banksLoaded++);
- }));
- }
-
- let chain = Promise.resolve();
- for (const loader of loaders) {
- chain = chain.then(loader);
- }
-
- return chain;
- });
- });
-}
-
-/*
* Helpers
*/