Generalize AnkiNoteBuilder to not use audioSystem directly (#796)

This commit is contained in:
toasted-nutbread 2020-09-09 21:07:18 -04:00 committed by GitHub
parent 5d2261acb9
commit 58e5ddfde0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 19 additions and 11 deletions

View File

@ -20,9 +20,9 @@
*/
class AnkiNoteBuilder {
constructor({audioSystem, renderTemplate, getClipboardImage=null, getScreenshot=null}) {
this._audioSystem = audioSystem;
constructor({renderTemplate, getDefinitionAudio=null, getClipboardImage=null, getScreenshot=null}) {
this._renderTemplate = renderTemplate;
this._getDefinitionAudio = getDefinitionAudio;
this._getClipboardImage = getClipboardImage;
this._getScreenshot = getScreenshot;
}
@ -130,7 +130,7 @@ class AnkiNoteBuilder {
if (fileName === null) { return; }
fileName = this._replaceInvalidFileNameCharacters(fileName);
const {audio} = await this._audioSystem.getDefinitionAudio(
const {audio: data} = await this._getDefinitionAudio(
audioSourceDefinition,
sources,
{
@ -141,7 +141,6 @@ class AnkiNoteBuilder {
}
);
const data = this._arrayBufferToBase64(audio);
await anki.storeMediaFile(fileName, data);
definition.audioFileName = fileName;
@ -260,10 +259,6 @@ class AnkiNoteBuilder {
return fileName.replace(/[<>:"/\\|?*\x00-\x1F]/g, '-');
}
_arrayBufferToBase64(arrayBuffer) {
return btoa(String.fromCharCode(...new Uint8Array(arrayBuffer)));
}
_stringReplaceAsync(str, regex, replacer) {
let match;
let index = 0;

View File

@ -58,8 +58,8 @@ class Backend {
useCache: false
});
this._ankiNoteBuilder = new AnkiNoteBuilder({
audioSystem: this._audioSystem,
renderTemplate: this._renderTemplate.bind(this),
getDefinitionAudio: this._getDefinitionAudio.bind(this),
getClipboardImage: this._onApiClipboardImageGet.bind(this),
getScreenshot: this._getScreenshot.bind(this)
});
@ -124,7 +124,8 @@ class Backend {
['getSettings', {async: false, contentScript: true, handler: this._onApiGetSettings.bind(this)}],
['setAllSettings', {async: true, contentScript: false, handler: this._onApiSetAllSettings.bind(this)}],
['getOrCreateSearchPopup', {async: true, contentScript: true, handler: this._onApiGetOrCreateSearchPopup.bind(this)}],
['isTabSearchPopup', {async: true, contentScript: true, handler: this._onApiIsTabSearchPopup.bind(this)}]
['isTabSearchPopup', {async: true, contentScript: true, handler: this._onApiIsTabSearchPopup.bind(this)}],
['getDefinitionAudio', {async: true, contentScript: true, handler: this._onApiGetDefinitionAudio.bind(this)}]
]);
this._messageHandlersWithProgress = new Map([
['deleteDictionary', {async: true, contentScript: false, handler: this._onApiDeleteDictionary.bind(this)}]
@ -827,6 +828,10 @@ class Backend {
return (tab !== null);
}
async _onApiGetDefinitionAudio({definition, sources, details}) {
return this._getDefinitionAudio(definition, sources, details);
}
// Command handlers
async _onCommandSearch(params) {
@ -1631,4 +1636,8 @@ class Backend {
}
}
}
async _getDefinitionAudio(definition, sources, details) {
return await this._audioSystem.getDefinitionAudio(definition, sources, details);
}
}

View File

@ -185,7 +185,11 @@ class AudioSystem {
throw new Error('Could not retrieve audio');
}
return arrayBuffer;
return this._arrayBufferToBase64(arrayBuffer);
}
_arrayBufferToBase64(arrayBuffer) {
return btoa(String.fromCharCode(...new Uint8Array(arrayBuffer)));
}
_isAudioValid(audio) {