diff options
-rw-r--r-- | ext/bg/js/dictionary.js | 20 | ||||
-rw-r--r-- | ext/bg/js/translator.js | 47 |
2 files changed, 38 insertions, 29 deletions
diff --git a/ext/bg/js/dictionary.js b/ext/bg/js/dictionary.js index a6438523..082d1479 100644 --- a/ext/bg/js/dictionary.js +++ b/ext/bg/js/dictionary.js @@ -21,20 +21,32 @@ class Dictionary { constructor() { this.termDicts = {}; this.kanjiDicts = {}; + this.db = new Dexie('dict'); + this.dbVer = 1; } - addTermDict(name, dict) { + loadDb() { + return this.db.open().then((db) => { + if (db.verno !== this.dbVer) { + Promise.reject('db version mismatch'); + } + + return db.verno; + }); + } + + importTermDict(name, dict) { this.termDicts[name] = dict; } - addKanjiDict(name, dict) { + importKanjiDict(name, dict) { this.kanjiDicts[name] = dict; } findTerm(term) { let results = []; - for (let name in this.termDicts) { + for (const name in this.termDicts) { const dict = this.termDicts[name]; if (!(term in dict.i)) { continue; @@ -62,7 +74,7 @@ class Dictionary { findKanji(kanji) { const results = []; - for (let name in this.kanjiDicts) { + for (const name in this.kanjiDicts) { const def = this.kanjiDicts[name].c[kanji]; if (def) { const [k, o, t, ...g] = def; diff --git a/ext/bg/js/translator.js b/ext/bg/js/translator.js index fd414847..f373fe83 100644 --- a/ext/bg/js/translator.js +++ b/ext/bg/js/translator.js @@ -31,31 +31,28 @@ class Translator { return; } - Translator.loadData('bg/data/rules.json') - .then((response) => { - this.deinflector.setRules(JSON.parse(response)); - return Translator.loadData('bg/data/tags.json'); - }) - .then((response) => { - this.tagMeta = JSON.parse(response); - return Translator.loadData('bg/data/edict.json'); - }) - .then((response) => { - this.dictionary.addTermDict('edict', JSON.parse(response)); - return Translator.loadData('bg/data/kanjidic.json'); - }) - .then((response) => { - this.dictionary.addKanjiDict('kanjidic', JSON.parse(response)); - return loadEnamDict ? Translator.loadData('bg/data/enamdict.json') : Promise.resolve(null); - }) - .then((response) => { - if (response !== null) { - this.dictionary.addTermDict('enamdict', JSON.parse(response)); - } - - this.loaded = true; - callback(); - }); + Translator.loadData('bg/data/rules.json').then((response) => { + this.deinflector.setRules(JSON.parse(response)); + return Translator.loadData('bg/data/tags.json'); + }).then((response) => { + this.tagMeta = JSON.parse(response); + return this.dictionary.loadDb(); + }).then(() => { + this.loaded = true; + callback(); + }).catch(() => { + return Translator.loadData('bg/data/edict.json'); + }).then((response) => { + this.dictionary.importTermDict('edict', JSON.parse(response)); + return Translator.loadData('bg/data/enamdict.json'); + }).then((response) => { + this.dictionary.importTermDict('enamdict', JSON.parse(response)); + return Translator.loadData('bg/data/kanjidic.json'); + }).then((response) => { + this.dictionary.importKanjiDict('kanjidic', JSON.parse(response)); + this.loaded = true; + callback(); + }); } findTerm(text) { |