Work on DB integration

This commit is contained in:
Alex Yatskov 2016-08-21 19:51:12 -07:00
parent 67f906ab24
commit a062b25178
2 changed files with 59 additions and 49 deletions

View File

@ -19,10 +19,9 @@
class Dictionary {
constructor() {
this.termDicts = {};
this.kanjiDicts = {};
this.db = new Dexie('dict');
this.dbVer = 1;
this.entities = null;
}
loadDb() {
@ -35,59 +34,69 @@ class Dictionary {
});
}
importTermDict(name, dict) {
this.termDicts[name] = dict;
initDb() {
this.entities = {};
return this.db.version(this.dbVer).stores({
terms: 'expression, reading',
entities: 'name',
kanji: 'character',
});
}
importKanjiDict(name, dict) {
this.kanjiDicts[name] = dict;
importTermDict(dict) {
this.entities = {};
return this.db.terms.bulkAdd(dict.d, 'expression, reading, tags, glossary').then(() => {
for (const [key, value] of dict.e) {
this.entities[key] = value;
}
findTerm(term) {
let results = [];
for (const name in this.termDicts) {
const dict = this.termDicts[name];
if (!(term in dict.i)) {
continue;
return this.db.entities.bulkAdd(dict.e, 'name, value');
});
}
const indices = dict.i[term].split(' ').map(Number);
results = results.concat(
indices.map(index => {
const [e, r, t, ...g] = dict.d[index];
return {
expression: e,
reading: r,
tags: t.split(' '),
glossary: g,
entities: dict.e,
id: index
};
})
);
importKanjiDict(dict) {
return this.db.kanji.bulkAdd(dict.d, 'character, onyomi, kunyomi, tags, glossary');
}
return results;
fetchEntities() {
if (this.entities !== null) {
return Promise.resolve(this.entities);
}
this.entities = {};
return this.db.entities.each((row) => {
this.entities[row.name] = row.value;
}).then(() => {
return Promise.resolve(this.entities);
});
}
findterm(term) {
const results = [];
return this.db.terms.where('expression').equals(term).or('reading').equals(term).each((row) => {
results.push({
expression: row.expression,
reading: row.reading,
tags: row.tags.split(' '),
glossary: row.glossary,
entities: this.entities,
id: results.length
});
}).then(() => {
Promise.resolve(results);
});
}
findKanji(kanji) {
const results = [];
for (const name in this.kanjiDicts) {
const def = this.kanjiDicts[name].c[kanji];
if (def) {
const [k, o, t, ...g] = def;
return this.db.kanji.where('character').equals(kanji).each((row) => {
results.push({
character: kanji,
kunyomi: k.split(' '),
onyomi: o.split(' '),
tags: t.split(' '),
glossary: g
character: row.character,
onyomi: row.onyomi.split(' '),
kunyomi: row.kunyomi.split(' '),
tags: row.tags.split(' '),
glossary: row.glossary
});
});
}
}
return results;
}
}

View File

@ -41,15 +41,16 @@ class Translator {
this.loaded = true;
callback();
}).catch(() => {
this.dictionary.initDb();
return Translator.loadData('bg/data/edict.json');
}).then((response) => {
this.dictionary.importTermDict('edict', JSON.parse(response));
this.dictionary.importTermDict(JSON.parse(response));
return Translator.loadData('bg/data/enamdict.json');
}).then((response) => {
this.dictionary.importTermDict('enamdict', JSON.parse(response));
this.dictionary.importTermDict(JSON.parse(response));
return Translator.loadData('bg/data/kanjidic.json');
}).then((response) => {
this.dictionary.importKanjiDict('kanjidic', JSON.parse(response));
this.dictionary.importKanjiDict(JSON.parse(response));
this.loaded = true;
callback();
});