more audio handling improvements
This commit is contained in:
parent
0e16787692
commit
20d062329b
@ -7,6 +7,7 @@
|
|||||||
<script src="/mixed/lib/handlebars.min.js"></script>
|
<script src="/mixed/lib/handlebars.min.js"></script>
|
||||||
<script src="/mixed/lib/dexie.min.js"></script>
|
<script src="/mixed/lib/dexie.min.js"></script>
|
||||||
<script src="/mixed/lib/wanakana.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/templates.js"></script>
|
||||||
<script src="/bg/js/util.js"></script>
|
<script src="/bg/js/util.js"></script>
|
||||||
<script src="/bg/js/anki-connect.js"></script>
|
<script src="/bg/js/anki-connect.js"></script>
|
||||||
|
@ -56,7 +56,10 @@ window.yomichan = new class {
|
|||||||
}
|
}
|
||||||
|
|
||||||
noteFormat(definition, mode) {
|
noteFormat(definition, mode) {
|
||||||
const note = {fields: {}, tags: this.options.anki.tags};
|
const note = {
|
||||||
|
fields: {},
|
||||||
|
tags: this.options.anki.tags
|
||||||
|
};
|
||||||
|
|
||||||
let fields = [];
|
let fields = [];
|
||||||
if (mode === 'kanji') {
|
if (mode === 'kanji') {
|
||||||
@ -67,25 +70,6 @@ window.yomichan = new class {
|
|||||||
fields = this.options.anki.terms.fields;
|
fields = this.options.anki.terms.fields;
|
||||||
note.deckName = this.options.anki.terms.deck;
|
note.deckName = this.options.anki.terms.deck;
|
||||||
note.modelName = this.options.anki.terms.model;
|
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) {
|
for (const name in fields) {
|
||||||
@ -117,8 +101,15 @@ window.yomichan = new class {
|
|||||||
}
|
}
|
||||||
|
|
||||||
definitionAdd(definition, mode) {
|
definitionAdd(definition, mode) {
|
||||||
|
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);
|
const note = this.noteFormat(definition, mode);
|
||||||
return this.anki.addNote(note);
|
return this.anki.addNote(note);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
definitionsAddable(definitions, modes) {
|
definitionsAddable(definitions, modes) {
|
||||||
|
@ -251,16 +251,6 @@ class Display {
|
|||||||
|
|
||||||
noteAdd(definition, mode) {
|
noteAdd(definition, mode) {
|
||||||
this.spinner.show();
|
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(() => {});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
promise.then(() => {
|
|
||||||
return this.definitionAdd(definition, mode).then(success => {
|
return this.definitionAdd(definition, mode).then(success => {
|
||||||
if (success) {
|
if (success) {
|
||||||
const index = this.definitions.indexOf(definition);
|
const index = this.definitions.indexOf(definition);
|
||||||
@ -268,7 +258,6 @@ class Display {
|
|||||||
} else {
|
} else {
|
||||||
this.handleError('note could not be added');
|
this.handleError('note could not be added');
|
||||||
}
|
}
|
||||||
});
|
|
||||||
}).catch(this.handleError.bind(this)).then(() => this.spinner.hide());
|
}).catch(this.handleError.bind(this)).then(() => this.spinner.hide());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
* Audio
|
* Audio
|
||||||
*/
|
*/
|
||||||
|
|
||||||
function audioBuildUrl(definition, cache) {
|
function audioBuildUrl(definition, cache={}) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
const response = cache[definition.expression];
|
const response = cache[definition.expression];
|
||||||
if (response) {
|
if (response) {
|
||||||
@ -78,3 +78,32 @@ function audioBuildFilename(definition) {
|
|||||||
return filename += '.mp3';
|
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);
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user