aboutsummaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorAlex Yatskov <alex@foosoft.net>2017-03-25 10:46:59 -0700
committerAlex Yatskov <alex@foosoft.net>2017-03-25 10:46:59 -0700
commit20d062329bfcdc0d7c5fd07f48071ae6524f9566 (patch)
treea9b34e5eafb86c77da97a2b2a6601822f4a67d14 /ext
parent0e167876923ba6f20c8b84e518436f2b523e06f9 (diff)
more audio handling improvements
Diffstat (limited to 'ext')
-rw-r--r--ext/bg/background.html1
-rw-r--r--ext/bg/js/yomichan.js35
-rw-r--r--ext/mixed/js/display.js23
-rw-r--r--ext/mixed/js/util.js31
4 files changed, 50 insertions, 40 deletions
diff --git a/ext/bg/background.html b/ext/bg/background.html
index 8fb41a38..b5ae147b 100644
--- a/ext/bg/background.html
+++ b/ext/bg/background.html
@@ -7,6 +7,7 @@
<script src="/mixed/lib/handlebars.min.js"></script>
<script src="/mixed/lib/dexie.min.js"></script>
<script src="/mixed/lib/wanakana.min.js"></script>
+ <script src="/mixed/js/util.js"></script>
<script src="/bg/js/templates.js"></script>
<script src="/bg/js/util.js"></script>
<script src="/bg/js/anki-connect.js"></script>
diff --git a/ext/bg/js/yomichan.js b/ext/bg/js/yomichan.js
index 3a42c594..50a8a636 100644
--- a/ext/bg/js/yomichan.js
+++ b/ext/bg/js/yomichan.js
@@ -56,7 +56,10 @@ window.yomichan = new class {
}
noteFormat(definition, mode) {
- const note = {fields: {}, tags: this.options.anki.tags};
+ const note = {
+ fields: {},
+ tags: this.options.anki.tags
+ };
let fields = [];
if (mode === 'kanji') {
@@ -67,25 +70,6 @@ window.yomichan = new class {
fields = this.options.anki.terms.fields;
note.deckName = this.options.anki.terms.deck;
note.modelName = this.options.anki.terms.model;
-
- if (definition.audio) {
- const audio = {
- url: definition.audio.url,
- filename: definition.audio.filename,
- skipHash: '7e2c2f954ef6051373ba916f000168dc',
- fields: []
- };
-
- for (const name in fields) {
- if (fields[name].includes('{audio}')) {
- audio.fields.push(name);
- }
- }
-
- if (audio.fields.length > 0) {
- note.audio = audio;
- }
- }
}
for (const name in fields) {
@@ -117,8 +101,15 @@ window.yomichan = new class {
}
definitionAdd(definition, mode) {
- const note = this.noteFormat(definition, mode);
- return this.anki.addNote(note);
+ let promise = Promise.resolve();
+ if (this.options.general.audioPlayback && mode !== 'kanji') {
+ promise = audioInject(definition, this.options.anki.terms.fields);
+ }
+
+ return promise.then(() => {
+ const note = this.noteFormat(definition, mode);
+ return this.anki.addNote(note);
+ });
}
definitionsAddable(definitions, modes) {
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);
+}