summaryrefslogtreecommitdiff
path: root/ext/bg/js/translator.js
diff options
context:
space:
mode:
authortoasted-nutbread <toasted-nutbread@users.noreply.github.com>2020-10-04 22:04:44 -0400
committerGitHub <noreply@github.com>2020-10-04 22:04:44 -0400
commit54810510fa24c41f5c227d23c4f383052ce63a62 (patch)
tree50c1f15e1dad92edc377727e220d58b269f44558 /ext/bg/js/translator.js
parent2d3cf89b490d09bc66138ba200148283be52d191 (diff)
Fix primary audio source (#886)
* Add abstraction: _getDefinitionPrimaryExpressionAndReading * Reuse existing definitions in a sequence * Revert change to related definition source/rawSource/sourceTerm * Update _getDefinitionPrimaryExpressionAndReading to return best match
Diffstat (limited to 'ext/bg/js/translator.js')
-rw-r--r--ext/bg/js/translator.js23
1 files changed, 19 insertions, 4 deletions
diff --git a/ext/bg/js/translator.js b/ext/bg/js/translator.js
index 53370f73..d7cb7b31 100644
--- a/ext/bg/js/translator.js
+++ b/ext/bg/js/translator.js
@@ -373,13 +373,16 @@ class Translator {
if (typeof sequencedDefinition === 'undefined') {
sequencedDefinition = {
sourceDefinitions: [],
- relatedDefinitions: []
+ relatedDefinitions: [],
+ relatedDefinitionIds: new Set()
};
sequencedDefinitionMap.set(sequence, sequencedDefinition);
sequencedDefinitions.push(sequencedDefinition);
sequenceList.push(sequence);
}
sequencedDefinition.sourceDefinitions.push(definition);
+ sequencedDefinition.relatedDefinitions.push(definition);
+ sequencedDefinition.relatedDefinitionIds.add(definition.id);
} else {
unsequencedDefinitions.push(definition);
}
@@ -388,13 +391,20 @@ class Translator {
if (sequenceList.length > 0) {
const databaseDefinitions = await this._database.findTermsBySequenceBulk(sequenceList, mainDictionary);
for (const databaseDefinition of databaseDefinitions) {
- const {relatedDefinitions} = sequencedDefinitions[databaseDefinition.index];
- const {expression} = databaseDefinition;
- const definition = await this._createTermDefinitionFromDatabaseDefinition(databaseDefinition, expression, expression, expression, [], enabledDictionaryMap);
+ const {relatedDefinitions, relatedDefinitionIds} = sequencedDefinitions[databaseDefinition.index];
+ const {id} = databaseDefinition;
+ if (relatedDefinitionIds.has(id)) { continue; }
+
+ const {source, rawSource, sourceTerm} = relatedDefinitions[0];
+ const definition = await this._createTermDefinitionFromDatabaseDefinition(databaseDefinition, source, rawSource, sourceTerm, [], enabledDictionaryMap);
relatedDefinitions.push(definition);
}
}
+ for (const {relatedDefinitions} of sequencedDefinitions) {
+ this._sortDefinitionsById(relatedDefinitions);
+ }
+
return {sequencedDefinitions, unsequencedDefinitions};
}
@@ -1211,6 +1221,11 @@ class Translator {
definitions.sort((a, b) => a.index - b.index);
}
+ _sortDefinitionsById(definitions) {
+ if (definitions.length <= 1) { return; }
+ definitions.sort((a, b) => a.id - b.id);
+ }
+
_sortKanjiStats(stats) {
if (stats.length <= 1) { return; }
const stringComparer = this._stringComparer;