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

View File

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