diff options
author | Alex Yatskov <alex@foosoft.net> | 2017-03-25 10:46:59 -0700 |
---|---|---|
committer | Alex Yatskov <alex@foosoft.net> | 2017-03-25 10:46:59 -0700 |
commit | 20d062329bfcdc0d7c5fd07f48071ae6524f9566 (patch) | |
tree | a9b34e5eafb86c77da97a2b2a6601822f4a67d14 /ext/mixed/js | |
parent | 0e167876923ba6f20c8b84e518436f2b523e06f9 (diff) |
more audio handling improvements
Diffstat (limited to 'ext/mixed/js')
-rw-r--r-- | ext/mixed/js/display.js | 23 | ||||
-rw-r--r-- | ext/mixed/js/util.js | 31 |
2 files changed, 36 insertions, 18 deletions
diff --git a/ext/mixed/js/display.js b/ext/mixed/js/display.js index 29a292c1..050caf4e 100644 --- a/ext/mixed/js/display.js +++ b/ext/mixed/js/display.js @@ -251,24 +251,13 @@ class Display { noteAdd(definition, mode) { this.spinner.show(); - - let promise = Promise.resolve(); - if (mode !== 'kanji') { - const filename = Display.audioBuildFilename(definition); - if (filename) { - promise = audioBuildUrl(definition, this.responseCache).then(url => definition.audio = {url, filename}).catch(() => {}); + return this.definitionAdd(definition, mode).then(success => { + if (success) { + const index = this.definitions.indexOf(definition); + Display.adderButtonFind(index, mode).addClass('disabled'); + } else { + this.handleError('note could not be added'); } - } - - promise.then(() => { - return this.definitionAdd(definition, mode).then(success => { - if (success) { - const index = this.definitions.indexOf(definition); - Display.adderButtonFind(index, mode).addClass('disabled'); - } else { - this.handleError('note could not be added'); - } - }); }).catch(this.handleError.bind(this)).then(() => this.spinner.hide()); } diff --git a/ext/mixed/js/util.js b/ext/mixed/js/util.js index 13f124a0..1289455c 100644 --- a/ext/mixed/js/util.js +++ b/ext/mixed/js/util.js @@ -21,7 +21,7 @@ * Audio */ -function audioBuildUrl(definition, cache) { +function audioBuildUrl(definition, cache={}) { return new Promise((resolve, reject) => { const response = cache[definition.expression]; if (response) { @@ -78,3 +78,32 @@ function audioBuildFilename(definition) { return filename += '.mp3'; } } + +function audioInject(definition, fields) { + const filename = audioBuildFilename(definition); + if (!filename) { + return Promise.resolve(true); + } + + const audio = { + filename, + skipHash: '7e2c2f954ef6051373ba916f000168dc', + fields: [] + }; + + for (const name in fields) { + if (fields[name].includes('{audio}')) { + audio.fields.push(name); + } + } + + if (audio.fields.length === 0) { + return Promise.resolve(true); + } + + return audioBuildUrl(definition).then(url => { + audio.url = url; + note.audio = audio; + return true; + }).catch(() => false); +} |