Database stuff

This commit is contained in:
Alex Yatskov 2016-09-13 15:59:18 -07:00
parent cd4f16c096
commit 0e89d0e7e6
2 changed files with 36 additions and 10 deletions

View File

@ -20,26 +20,53 @@
class Dictionary {
constructor() {
this.db = null;
this.dbVer = 1;
this.entities = null;
}
initDb() {
if (this.db !== null) {
return Promise.reject('database already initialized');
}
this.db = new Dexie('dict');
this.db.version(1).stores({
terms: '++id,expression,reading',
entities: '++,name',
kanji: '++,character'
kanji: '++,character',
meta: 'name,value',
});
this.entities = null;
}
deleteDb() {
return this.db === null ? Promise.resolve() : this.db.delete();
prepareDb() {
this.initDb();
return this.db.meta.get('version').then(row => {
return row ? row.value : 0;
}).catch(() => {
return 0;
}).then(version => {
if (this.dbVer === version) {
return true;
}
const db = this.db;
this.db.close();
this.db = null;
return db.delete().then(() => {
this.initDb();
return false;
});
});
}
existsDb() {
return Dexie.exists('dict');
sealDb() {
if (this.db === null) {
return Promise.reject('database not initialized');
}
return this.db.meta.put({name: 'version', value: this.dbVer});
}
findTerm(term) {

View File

@ -35,15 +35,14 @@ class Translator {
return loadJson('bg/data/tags.json');
}).then(tagMeta => {
this.tagMeta = tagMeta;
return this.dictionary.existsDb();
return this.dictionary.prepareDb();
}).then(exists => {
this.dictionary.initDb();
if (!exists) {
return Promise.all([
this.dictionary.importKanjiDict('bg/data/kanjidic/index.json'),
this.dictionary.importTermDict('bg/data/edict/index.json'),
this.dictionary.importTermDict('bg/data/enamdict/index.json')
]);
]).then(() => this.dictionary.sealDb());
}
}).then(() => {
this.loaded = true;