From 54810510fa24c41f5c227d23c4f383052ce63a62 Mon Sep 17 00:00:00 2001 From: toasted-nutbread Date: Sun, 4 Oct 2020 22:04:44 -0400 Subject: 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 --- ext/bg/js/translator.js | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) (limited to 'ext/bg') 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; -- cgit v1.2.3