diff options
| author | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2021-01-22 21:09:43 -0500 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-01-22 21:09:43 -0500 | 
| commit | a51a591c404e365bc1fca657bb26c04d165f400b (patch) | |
| tree | dd5176a59ce03c7bd8deb44a327ca7d56bc9d4ab /ext | |
| parent | 55df9dc7cdae33b782d91ac84f0ea3d8998a3b9b (diff) | |
Update audio validity checks to be based on the source (#1290)
Diffstat (limited to 'ext')
| -rw-r--r-- | ext/bg/js/audio-downloader.js | 23 | ||||
| -rw-r--r-- | ext/mixed/js/audio-system.js | 29 | 
2 files changed, 33 insertions, 19 deletions
| diff --git a/ext/bg/js/audio-downloader.js b/ext/bg/js/audio-downloader.js index 171f5944..495b6399 100644 --- a/ext/bg/js/audio-downloader.js +++ b/ext/bg/js/audio-downloader.js @@ -53,7 +53,7 @@ class AudioDownloader {                  switch (info.type) {                      case 'url':                          try { -                            return await this._downloadAudioFromUrl(info.url); +                            return await this._downloadAudioFromUrl(info.url, source);                          } catch (e) {                              // NOP                          } @@ -192,7 +192,7 @@ class AudioDownloader {          return [{type: 'url', url}];      } -    async _downloadAudioFromUrl(url) { +    async _downloadAudioFromUrl(url, source) {          const response = await this._requestBuilder.fetchAnonymous(url, {              method: 'GET',              mode: 'cors', @@ -208,18 +208,25 @@ class AudioDownloader {          const arrayBuffer = await response.arrayBuffer(); -        if (!await this._isAudioBinaryValid(arrayBuffer)) { +        if (!await this._isAudioBinaryValid(arrayBuffer, source)) {              throw new Error('Could not retrieve audio');          }          return this._arrayBufferToBase64(arrayBuffer);      } -    async _isAudioBinaryValid(arrayBuffer) { -        const digest = await this._arrayBufferDigest(arrayBuffer); -        switch (digest) { -            case 'ae6398b5a27bc8c0a771df6c907ade794be15518174773c58c7c7ddd17098906': // jpod101 invalid audio -                return false; +    async _isAudioBinaryValid(arrayBuffer, source) { +        switch (source) { +            case 'jpod101': +            { +                const digest = await this._arrayBufferDigest(arrayBuffer); +                switch (digest) { +                    case 'ae6398b5a27bc8c0a771df6c907ade794be15518174773c58c7c7ddd17098906': // Invalid audio +                        return false; +                    default: +                        return true; +                } +            }              default:                  return true;          } diff --git a/ext/mixed/js/audio-system.js b/ext/mixed/js/audio-system.js index 584da2b1..ab6011d0 100644 --- a/ext/mixed/js/audio-system.js +++ b/ext/mixed/js/audio-system.js @@ -51,7 +51,7 @@ class AudioSystem {                  const info = infoList[j];                  let audio;                  try { -                    audio = await this.createAudioFromInfo(info); +                    audio = await this.createAudioFromInfo(info, source);                  } catch (e) {                      continue;                  } @@ -72,11 +72,11 @@ class AudioSystem {          return this._fallbackAudio;      } -    createAudio(url) { +    createAudio(url, source) {          return new Promise((resolve, reject) => {              const audio = new Audio(url);              audio.addEventListener('loadeddata', () => { -                if (!this._isAudioValid(audio)) { +                if (!this._isAudioValid(audio, source)) {                      reject(new Error('Could not retrieve audio'));                  } else {                      resolve(audio); @@ -94,10 +94,10 @@ class AudioSystem {          return new TextToSpeechAudio(text, voice);      } -    async createAudioFromInfo(info) { +    async createAudioFromInfo(info, source) {          switch (info.type) {              case 'url': -                return await this.createAudio(info.url); +                return await this.createAudio(info.url, source);              case 'tts':                  return this.createTextToSpeechAudio(info.text, info.voice);              default: @@ -107,12 +107,19 @@ class AudioSystem {      // Private -    _isAudioValid(audio) { -        const duration = audio.duration; -        return ( -            duration !== 5.694694 && // jpod101 invalid audio (Chrome) -            duration !== 5.720718 // jpod101 invalid audio (Firefox) -        ); +    _isAudioValid(audio, source) { +        switch (source) { +            case 'jpod101': +            { +                const duration = audio.duration; +                return ( +                    duration !== 5.694694 && // Invalid audio (Chrome) +                    duration !== 5.720718 // Invalid audio (Firefox) +                ); +            } +            default: +                return true; +        }      }      _getTextToSpeechVoiceFromVoiceUri(voiceUri) { |