move zip import to async
This commit is contained in:
parent
49352c5fa1
commit
f694026827
@ -224,7 +224,53 @@ class Database {
|
|||||||
await this.db.kanji.bulkAdd(rows);
|
await this.db.kanji.bulkAdd(rows);
|
||||||
};
|
};
|
||||||
|
|
||||||
await zipLoadDb(archive, indexLoaded, termsLoaded, kanjiLoaded);
|
await Database.importDictionaryZip(archive, indexLoaded, termsLoaded, kanjiLoaded);
|
||||||
return summary;
|
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';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -455,70 +455,6 @@ function jsonLoadInt(url) {
|
|||||||
return jsonLoad(chrome.extension.getURL(url));
|
return jsonLoad(chrome.extension.getURL(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
|
* Helpers
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user