diff options
Diffstat (limited to 'ext')
| -rw-r--r-- | ext/bg/js/database.js | 74 | ||||
| -rw-r--r-- | ext/bg/js/translator.js | 4 | 
2 files changed, 39 insertions, 39 deletions
| diff --git a/ext/bg/js/database.js b/ext/bg/js/database.js index 0621f1d6..561da7d8 100644 --- a/ext/bg/js/database.js +++ b/ext/bg/js/database.js @@ -20,7 +20,7 @@  class Database {      constructor() {          this.db = null; -        this.entities = {}; +        this.tagMetaCache = {};      }      prepare() { @@ -32,7 +32,7 @@ class Database {          this.db.version(1).stores({              terms: '++id, dictionary, expression, reading',              kanji: '++, dictionary, character', -            entities: '++, dictionary', +            tagMeta: '++, dictionary',              dictionaries: '++, title, version',          }); @@ -68,10 +68,10 @@ class Database {                  });              }          }).then(() => { -            return this.getEntities(dictionaries); -        }).then(entities => { +            return this.getTagMeta(dictionaries); +        }).then(tagMeta => {              for (const result of results) { -                result.entities = entities; +                result.tagMeta = tagMeta;              }              return results; @@ -95,45 +95,40 @@ class Database {                  });              }          }).then(() => { -            return this.getEntities(dictionaries); -        }).then(entities => { +            return this.getTagMeta(dictionaries); +        }).then(tagMeta => {              for (const result of results) { -                result.entities = entities; +                result.tagMeta = tagMeta;              }              return results;          });      } -    getEntities(dictionaries) { +    getTagMeta(dictionaries) {          if (this.db === null) {              return Promise.reject('database not initialized');          }          const promises = [];          for (const dictionary of dictionaries) { -            if (this.entities[dictionary]) { -                promises.push(Promise.resolve(this.entities[dictionary])); -            } else { -                const entities = this.entities[dictionary] = {}; -                promises.push( -                    this.db.entities.where('dictionary').equals(dictionary).each(row => { -                        entities[row.name] = row.value; -                    }).then(() => entities) -                ); +            if (this.tagMetaCache[dictionary]) { +                continue;              } -        } -        return Promise.all(promises).then(results => { -            const entities = {}; -            for (const result of results) { -                for (const name in result) { -                    entities[name] = result[name]; -                } -            } +            const tagMeta = this.tagMetaCache[dictionary] = {}; +            const promise = this.db.tagMeta.where('dictionary').equals(dictionary).each(row => { +                tagMeta[row.tag] = { +                    category: row.category, +                    notes: row.notes, +                    order: row.order +                }; +            }); -            return entities; -        }); +            promises.push(promise); +        } + +        return Promise.all(promises).then(() => this.tagMetaCache);      }      getDictionaries() { @@ -212,7 +207,7 @@ class Database {                  return Promise.all([termDeleter, kanjiDeleter]);              });          }).then(() => { -            return this.db.entities.where('dictionary').equals(title).delete(); +            return this.db.tagMeta.where('dictionary').equals(title).delete();          }).then(() => {              return this.db.dictionaries.where('title').equals(title).delete();          }); @@ -224,7 +219,7 @@ class Database {          }          let summary = null; -        const indexLoaded = (title, version, entities, hasTerms, hasKanji) => { +        const indexLoaded = (title, version, tagMeta, hasTerms, hasKanji) => {              summary = {title, hasTerms, hasKanji, version};              return this.db.dictionaries.where('title').equals(title).count().then(count => {                  if (count > 0) { @@ -232,25 +227,32 @@ class Database {                  }                  return this.db.dictionaries.add({title, version, hasTerms, hasKanji}).then(() => { -                    this.entities = entities || {}; -                      const rows = []; -                    for (const name in entities || {}) { -                        rows.push({name, value: entities[name], dictionary: title}); +                    for (const tag in tagMeta || {}) { +                        const meta = tagMeta[tag]; +                        rows.push({ +                            tag, +                            category: meta.category, +                            notes: meta.notes, +                            order: meta.order, +                            dictionary: title +                        });                      } -                    return this.db.entities.bulkAdd(rows); +                    return this.db.tagMeta.bulkAdd(rows);                  });              });          };          const termsLoaded = (title, entries, total, current) => {              const rows = []; -            for (const [expression, reading, tags, ...glossary] of entries) { +            for (const [expression, reading, tags, rules, score, ...glossary] of entries) {                  rows.push({                      expression,                      reading,                      tags, +                    rules, +                    score,                      glossary,                      dictionary: title                  }); diff --git a/ext/bg/js/translator.js b/ext/bg/js/translator.js index bff0082b..e7a739b3 100644 --- a/ext/bg/js/translator.js +++ b/ext/bg/js/translator.js @@ -32,13 +32,11 @@ class Translator {          const promises = [              loadJsonInt('bg/data/rules.json'), -            loadJsonInt('bg/data/tags.json'),              this.database.prepare()          ]; -        return Promise.all(promises).then(([rules, tags]) => { +        return Promise.all(promises).then(([rules]) => {              this.deinflector.setRules(rules); -            this.tagMeta = tags;              this.loaded = true;          });      } |