diff options
| author | Alex Yatskov <alex@foosoft.net> | 2016-09-13 15:59:18 -0700 | 
|---|---|---|
| committer | Alex Yatskov <alex@foosoft.net> | 2016-09-13 15:59:18 -0700 | 
| commit | 0e89d0e7e68d58407480e0e40e80c2f00f3c2f66 (patch) | |
| tree | ce43416ec948bb83328eba0dde738f86f0df780f /ext | |
| parent | cd4f16c096746d13502dc7b258dfe16c97344ba1 (diff) | |
Database stuff
Diffstat (limited to 'ext')
| -rw-r--r-- | ext/bg/js/dictionary.js | 41 | ||||
| -rw-r--r-- | ext/bg/js/translator.js | 5 | 
2 files changed, 36 insertions, 10 deletions
| diff --git a/ext/bg/js/dictionary.js b/ext/bg/js/dictionary.js index 20a94f8f..936dc3c1 100644 --- a/ext/bg/js/dictionary.js +++ b/ext/bg/js/dictionary.js @@ -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) { diff --git a/ext/bg/js/translator.js b/ext/bg/js/translator.js index b8cad6de..2cc97e1c 100644 --- a/ext/bg/js/translator.js +++ b/ext/bg/js/translator.js @@ -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; |