tag caching
This commit is contained in:
parent
13961e6a10
commit
4d4b819d6c
@ -20,6 +20,7 @@
|
||||
class Database {
|
||||
constructor() {
|
||||
this.db = null;
|
||||
this.tagCache = {};
|
||||
}
|
||||
|
||||
async prepare() {
|
||||
@ -51,6 +52,7 @@ class Database {
|
||||
this.db.close();
|
||||
await this.db.delete();
|
||||
this.db = null;
|
||||
this.tagCache = {};
|
||||
|
||||
await this.prepare();
|
||||
}
|
||||
@ -131,17 +133,23 @@ class Database {
|
||||
return results;
|
||||
}
|
||||
|
||||
async findTag(name, titles) {
|
||||
async findTag(name, title) {
|
||||
if (!this.db) {
|
||||
throw 'database not initialized';
|
||||
}
|
||||
|
||||
let result = null;
|
||||
await this.db.tagMeta.where('name').equals(name).each(row => {
|
||||
if (titles.includes(row.dictionary)) {
|
||||
result = row;
|
||||
}
|
||||
});
|
||||
this.tagCache[title] = this.tagCache[title] || {};
|
||||
|
||||
let result = this.tagCache[title][name];
|
||||
if (!result) {
|
||||
await this.db.tagMeta.where('name').equals(name).each(row => {
|
||||
if (title === row.dictionary) {
|
||||
result = row;
|
||||
}
|
||||
});
|
||||
|
||||
this.tagCache[title][name] = result;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
@ -148,16 +148,6 @@ function dictTagBuildSource(name) {
|
||||
return dictTagSanitize({name, category: 'dictionary', order: 100});
|
||||
}
|
||||
|
||||
function dictTagBuild(name, meta) {
|
||||
const tag = {name};
|
||||
const symbol = name.split(':')[0];
|
||||
for (const prop in meta[symbol] || {}) {
|
||||
tag[prop] = meta[symbol][prop];
|
||||
}
|
||||
|
||||
return dictTagSanitize(tag);
|
||||
}
|
||||
|
||||
function dictTagSanitize(tag) {
|
||||
tag.name = tag.name || 'untitled';
|
||||
tag.category = tag.category || 'default';
|
||||
|
@ -60,7 +60,7 @@ class Translator {
|
||||
let definitions = [];
|
||||
for (const deinflection of deinflections) {
|
||||
for (const definition of deinflection.definitions) {
|
||||
const tags = await this.buildTags(definition.tags, titles);
|
||||
const tags = await this.buildTags(definition.tags, definition.dictionary);
|
||||
tags.push(dictTagBuildSource(definition.dictionary));
|
||||
|
||||
let frequencies = await this.database.findTermFreq(definition.expression, titles);
|
||||
@ -124,7 +124,7 @@ class Translator {
|
||||
}
|
||||
|
||||
for (const definition of definitions) {
|
||||
const tags = await this.buildTags(definition.tags, titles);
|
||||
const tags = await this.buildTags(definition.tags, definition.dictionary);
|
||||
tags.push(dictTagBuildSource(definition.dictionary));
|
||||
|
||||
definition.tags = dictTagsSort(tags);
|
||||
@ -134,10 +134,10 @@ class Translator {
|
||||
return definitions;
|
||||
}
|
||||
|
||||
async buildTags(names, titles) {
|
||||
async buildTags(names, title) {
|
||||
const results = [];
|
||||
for (const name of names) {
|
||||
const meta = await this.database.findTag(name.split(':')[0], titles);
|
||||
const meta = await this.database.findTag(name.split(':')[0], title);
|
||||
|
||||
const result = {name};
|
||||
for (const prop in meta || {}) {
|
||||
|
Loading…
Reference in New Issue
Block a user