diff options
Diffstat (limited to 'ext/js')
| -rw-r--r-- | ext/js/background/backend.js | 3 | ||||
| -rw-r--r-- | ext/js/data/options-util.js | 16 | ||||
| -rw-r--r-- | ext/js/display/display-audio.js | 7 | ||||
| -rw-r--r-- | ext/js/display/display.js | 4 | ||||
| -rw-r--r-- | ext/js/media/audio-downloader.js | 31 | 
5 files changed, 38 insertions, 23 deletions
| diff --git a/ext/js/background/backend.js b/ext/js/background/backend.js index 2368b5d0..ba310d93 100644 --- a/ext/js/background/backend.js +++ b/ext/js/background/backend.js @@ -1742,7 +1742,7 @@ class Backend {              return null;          } -        const {sources, preferredAudioIndex, customSourceUrl, customSourceType} = details; +        const {sources, preferredAudioIndex, customSourceUrl} = details;          let data;          let contentType;          try { @@ -1754,7 +1754,6 @@ class Backend {                  {                      textToSpeechVoice: null,                      customSourceUrl, -                    customSourceType,                      binary: true,                      disableCache: true                  } diff --git a/ext/js/data/options-util.js b/ext/js/data/options-util.js index 740afa76..89d50903 100644 --- a/ext/js/data/options-util.js +++ b/ext/js/data/options-util.js @@ -817,11 +817,25 @@ class OptionsUtil {          // Version 12 changes:          //  Changed sentenceParsing.enableTerminationCharacters to sentenceParsing.terminationCharacterMode.          //  Added {search-query} field marker. +        //  Updated audio.sources[] to change 'custom' into 'custom-json'. +        //  Removed audio.customSourceType.          await this._applyAnkiFieldTemplatesPatch(options, '/data/templates/anki-field-templates-upgrade-v12.handlebars');          for (const profile of options.profiles) { -            const {sentenceParsing} = profile.options; +            const {sentenceParsing, audio} = profile.options; +              sentenceParsing.terminationCharacterMode = sentenceParsing.enableTerminationCharacters ? 'custom' : 'newlines';              delete sentenceParsing.enableTerminationCharacters; + +            const {sources, customSourceType} = audio; +            audio.sources = sources.map((type) => { +                switch (type) { +                    case 'custom': +                        return (customSourceType === 'json' ? 'custom-json' : 'custom'); +                    default: +                        return type; +                } +            }); +            delete audio.customSourceType;          }          return options;      } diff --git a/ext/js/display/display-audio.js b/ext/js/display/display-audio.js index d8553547..34e74004 100644 --- a/ext/js/display/display-audio.js +++ b/ext/js/display/display-audio.js @@ -116,7 +116,7 @@ class DisplayAudio {          const {term, reading} = headword;          const audioOptions = this._getAudioOptions(); -        const {textToSpeechVoice, customSourceUrl, customSourceType, volume} = audioOptions; +        const {textToSpeechVoice, customSourceUrl, volume} = audioOptions;          if (!Array.isArray(sources)) {              ({sources} = audioOptions);          } @@ -131,7 +131,7 @@ class DisplayAudio {              let audio;              let title;              let source = null; -            const info = await this._createTermAudio(sources, sourceDetailsMap, term, reading, {textToSpeechVoice, customSourceUrl, customSourceType}); +            const info = await this._createTermAudio(sources, sourceDetailsMap, term, reading, {textToSpeechVoice, customSourceUrl});              const valid = (info !== null);              if (valid) {                  ({audio, source} = info); @@ -518,7 +518,8 @@ class DisplayAudio {              ['jisho', 'Jisho.org', true],              ['text-to-speech', 'Text-to-speech', ttsSupported],              ['text-to-speech-reading', 'Text-to-speech (Kana reading)', ttsSupported], -            ['custom', 'Custom', customSupported] +            ['custom', 'Custom URL', customSupported], +            ['custom-json', 'Custom URL (JSON)', customSupported]          ];          const results = []; diff --git a/ext/js/display/display.js b/ext/js/display/display.js index bb089047..1c4602c5 100644 --- a/ext/js/display/display.js +++ b/ext/js/display/display.js @@ -1554,7 +1554,7 @@ class Display extends EventDispatcher {      async _injectAnkiNoteMedia(dictionaryEntry, options, fields) {          const {              anki: {screenshot: {format, quality}}, -            audio: {sources, customSourceUrl, customSourceType} +            audio: {sources, customSourceUrl}          } = options;          const timestamp = Date.now(); @@ -1570,7 +1570,7 @@ class Display extends EventDispatcher {                  sources2 = [primaryCardAudio.source];                  preferredAudioIndex = primaryCardAudio.index;              } -            audioDetails = {sources: sources2, preferredAudioIndex, customSourceUrl, customSourceType}; +            audioDetails = {sources: sources2, preferredAudioIndex, customSourceUrl};          }          const screenshotDetails = ( diff --git a/ext/js/media/audio-downloader.js b/ext/js/media/audio-downloader.js index 577d1c1b..70e99f11 100644 --- a/ext/js/media/audio-downloader.js +++ b/ext/js/media/audio-downloader.js @@ -33,7 +33,8 @@ class AudioDownloader {              ['jisho', this._getInfoJisho.bind(this)],              ['text-to-speech', this._getInfoTextToSpeech.bind(this)],              ['text-to-speech-reading', this._getInfoTextToSpeechReading.bind(this)], -            ['custom', this._getInfoCustom.bind(this)] +            ['custom', this._getInfoCustom.bind(this)], +            ['custom-json', this._getInfoCustomJson.bind(this)]          ]);      } @@ -191,22 +192,14 @@ class AudioDownloader {          return [{type: 'tts', text: reading, voice: textToSpeechVoice}];      } -    async _getInfoCustom(term, reading, {customSourceUrl, customSourceType}) { -        if (typeof customSourceUrl !== 'string') { -            throw new Error('No custom URL defined'); -        } -        const data = {term, reading}; -        const url = customSourceUrl.replace(/\{([^}]*)\}/g, (m0, m1) => (Object.prototype.hasOwnProperty.call(data, m1) ? `${data[m1]}` : m0)); - -        switch (customSourceType) { -            case 'json': -                return await this._getInfoCustomJson(url); -            default: -                return [{type: 'url', url}]; -        } +    async _getInfoCustom(term, reading, {customSourceUrl}) { +        const url = this._getCustomUrl(term, reading, customSourceUrl); +        return [{type: 'url', url}];      } -    async _getInfoCustomJson(url) { +    async _getInfoCustomJson(term, reading, {customSourceUrl}) { +        const url = this._getCustomUrl(term, reading, customSourceUrl); +          const response = await this._requestBuilder.fetchAnonymous(url, {              method: 'GET',              mode: 'cors', @@ -237,6 +230,14 @@ class AudioDownloader {          return results;      } +    _getCustomUrl(term, reading, customSourceUrl) { +        if (typeof customSourceUrl !== 'string') { +            throw new Error('No custom URL defined'); +        } +        const data = {term, reading}; +        return customSourceUrl.replace(/\{([^}]*)\}/g, (m0, m1) => (Object.prototype.hasOwnProperty.call(data, m1) ? `${data[m1]}` : m0)); +    } +      async _downloadAudioFromUrl(url, source) {          const response = await this._requestBuilder.fetchAnonymous(url, {              method: 'GET', |