Pop-up dictionary browser extension for language learning. Successor to Yomichan. (PERSONAL FORK)

Fix anki note generator not fetching required audio sources (#2178)

authored by

Kuuuube and committed by
GitHub
917bd956 ae1ac405

+20 -18
+17 -17
ext/js/media/audio-downloader.js
··· 91 91 */ 92 92 async downloadTermAudio(sources, preferredAudioIndex, term, reading, idleTimeout, languageSummary, enableDefaultAudioSources) { 93 93 const errors = []; 94 - const requiredAudioSources = enableDefaultAudioSources ? this._getRequiredAudioSources(languageSummary.iso, sources) : []; 94 + const requiredAudioSources = enableDefaultAudioSources ? getRequiredAudioSources(languageSummary.iso, sources) : []; 95 95 for (const source of [...sources, ...requiredAudioSources]) { 96 96 let infoList = await this.getTermAudioInfoList(source, term, reading, languageSummary); 97 97 if (typeof preferredAudioIndex === 'number') { ··· 116 116 } 117 117 118 118 // Private 119 - 120 - /** 121 - * @param {string} language 122 - * @param {import('audio').AudioSourceInfo[]} sources 123 - * @returns {import('audio').AudioSourceInfo[]} 124 - */ 125 - _getRequiredAudioSources(language, sources) { 126 - /** @type {Set<import('settings').AudioSourceType>} */ 127 - const requiredSources = getRequiredAudioSourceList(language); 128 - 129 - for (const {type} of sources) { 130 - requiredSources.delete(type); 131 - } 132 - 133 - return [...requiredSources].map((type) => ({type, url: '', voice: ''})); 134 - } 135 119 136 120 /** 137 121 * @param {string} url ··· 646 630 'wiktionary', 647 631 ]); 648 632 } 633 + 634 + /** 635 + * @param {string} language 636 + * @param {import('audio').AudioSourceInfo[]} sources 637 + * @returns {import('audio').AudioSourceInfo[]} 638 + */ 639 + export function getRequiredAudioSources(language, sources) { 640 + /** @type {Set<import('settings').AudioSourceType>} */ 641 + const requiredSources = getRequiredAudioSourceList(language); 642 + 643 + for (const {type} of sources) { 644 + requiredSources.delete(type); 645 + } 646 + 647 + return [...requiredSources].map((type) => ({type, url: '', voice: ''})); 648 + }
+3 -1
ext/js/pages/settings/anki-deck-generator-controller.js
··· 22 22 import {getDynamicTemplates} from '../../data/anki-template-util.js'; 23 23 import {querySelectorNotNull} from '../../dom/query-selector.js'; 24 24 import {getLanguageSummaries} from '../../language/languages.js'; 25 + import {getRequiredAudioSources} from '../../media/audio-downloader.js'; 25 26 import {TemplateRendererProxy} from '../../templates/template-renderer-proxy.js'; 26 27 27 28 export class AnkiDeckGeneratorController { ··· 496 497 const {general: {resultOutputMode, glossaryLayoutMode, compactTags}} = options; 497 498 const idleTimeout = (Number.isFinite(options.anki.downloadTimeout) && options.anki.downloadTimeout > 0 ? options.anki.downloadTimeout : null); 498 499 const languageSummary = getLanguageSummaries().find(({iso}) => iso === options.general.language); 499 - const mediaOptions = addMedia ? {audio: {sources: options.audio.sources, preferredAudioIndex: null, idleTimeout: idleTimeout, languageSummary: languageSummary}} : null; 500 + const requiredAudioSources = options.audio.enableDefaultAudioSources ? getRequiredAudioSources(options.general.language, options.audio.sources) : []; 501 + const mediaOptions = addMedia ? {audio: {sources: [...options.audio.sources, ...requiredAudioSources], preferredAudioIndex: null, idleTimeout: idleTimeout, languageSummary: languageSummary}} : null; 500 502 const requirements = addMedia ? [...getDictionaryEntryMedia(dictionaryEntry), {type: 'audio'}] : []; 501 503 const dictionaryStylesMap = this._ankiNoteBuilder.getDictionaryStylesMap(options.dictionaries); 502 504 const cardFormat = /** @type {import('settings').AnkiCardFormat} */ ({