aboutsummaryrefslogtreecommitdiff
path: root/ext/bg/js/dictionary.js
diff options
context:
space:
mode:
Diffstat (limited to 'ext/bg/js/dictionary.js')
-rw-r--r--ext/bg/js/dictionary.js41
1 files changed, 34 insertions, 7 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) {