diff options
author | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2020-10-04 22:04:44 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-04 22:04:44 -0400 |
commit | 54810510fa24c41f5c227d23c4f383052ce63a62 (patch) | |
tree | 50c1f15e1dad92edc377727e220d58b269f44558 /ext/bg/js | |
parent | 2d3cf89b490d09bc66138ba200148283be52d191 (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')
-rw-r--r-- | ext/bg/js/translator.js | 23 |
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; |