From efcdff72a3d98b90a17a0c563ef46a0a8f76bf20 Mon Sep 17 00:00:00 2001
From: toasted-nutbread <toasted-nutbread@users.noreply.github.com>
Date: Wed, 1 Apr 2020 21:09:49 -0400
Subject: Move media injection functions into AnkiNoteBuilder

---
 ext/bg/js/anki-note-builder.js | 76 ++++++++++++++++++++++++++++++++++++++
 ext/bg/js/backend.js           | 84 +++---------------------------------------
 2 files changed, 81 insertions(+), 79 deletions(-)

diff --git a/ext/bg/js/anki-note-builder.js b/ext/bg/js/anki-note-builder.js
index 51022da3..d34fc66e 100644
--- a/ext/bg/js/anki-note-builder.js
+++ b/ext/bg/js/anki-note-builder.js
@@ -84,6 +84,82 @@ class AnkiNoteBuilder {
         });
     }
 
+    async injectAudio(definition, fields, sources, audioSystem, optionsContext) {
+        let usesAudio = false;
+        for (const fieldValue of Object.values(fields)) {
+            if (fieldValue.includes('{audio}')) {
+                usesAudio = true;
+                break;
+            }
+        }
+
+        if (!usesAudio) {
+            return true;
+        }
+
+        try {
+            const expressions = definition.expressions;
+            const audioSourceDefinition = Array.isArray(expressions) ? expressions[0] : definition;
+
+            const {uri} = await audioSystem.getDefinitionAudio(audioSourceDefinition, sources, {tts: false, optionsContext});
+            const filename = this._createInjectedAudioFileName(audioSourceDefinition);
+            if (filename !== null) {
+                definition.audio = {url: uri, filename};
+            }
+
+            return true;
+        } catch (e) {
+            return false;
+        }
+    }
+
+    async injectScreenshot(definition, fields, screenshot, anki) {
+        let usesScreenshot = false;
+        for (const fieldValue of Object.values(fields)) {
+            if (fieldValue.includes('{screenshot}')) {
+                usesScreenshot = true;
+                break;
+            }
+        }
+
+        if (!usesScreenshot) {
+            return;
+        }
+
+        const dateToString = (date) => {
+            const year = date.getUTCFullYear();
+            const month = date.getUTCMonth().toString().padStart(2, '0');
+            const day = date.getUTCDate().toString().padStart(2, '0');
+            const hours = date.getUTCHours().toString().padStart(2, '0');
+            const minutes = date.getUTCMinutes().toString().padStart(2, '0');
+            const seconds = date.getUTCSeconds().toString().padStart(2, '0');
+            return `${year}-${month}-${day}-${hours}-${minutes}-${seconds}`;
+        };
+
+        const now = new Date(Date.now());
+        const filename = `yomichan_browser_screenshot_${definition.reading}_${dateToString(now)}.${screenshot.format}`;
+        const data = screenshot.dataUrl.replace(/^data:[\w\W]*?,/, '');
+
+        try {
+            await anki.storeMediaFile(filename, data);
+        } catch (e) {
+            return;
+        }
+
+        definition.screenshotFileName = filename;
+    }
+
+    _createInjectedAudioFileName(definition) {
+        const {reading, expression} = definition;
+        if (!reading && !expression) { return null; }
+
+        let filename = 'yomichan';
+        if (reading) { filename += `_${reading}`; }
+        if (expression) { filename += `_${expression}`; }
+        filename += '.mp3';
+        return filename;
+    }
+
     static stringReplaceAsync(str, regex, replacer) {
         let match;
         let index = 0;
diff --git a/ext/bg/js/backend.js b/ext/bg/js/backend.js
index d4c822ca..9e02cced 100644
--- a/ext/bg/js/backend.js
+++ b/ext/bg/js/backend.js
@@ -460,19 +460,21 @@ class Backend {
         const templates = this.defaultAnkiFieldTemplates;
 
         if (mode !== 'kanji') {
-            await this._audioInject(
+            await this.ankiNoteBuilder.injectAudio(
                 definition,
                 options.anki.terms.fields,
                 options.audio.sources,
+                this.audioSystem,
                 optionsContext
             );
         }
 
         if (details && details.screenshot) {
-            await this._injectScreenshot(
+            await this.ankiNoteBuilder.injectScreenshot(
                 definition,
                 options.anki.terms.fields,
-                details.screenshot
+                details.screenshot,
+                this.anki
             );
         }
 
@@ -800,86 +802,10 @@ class Backend {
         return await this.audioUriBuilder.getUri(definition, source, options);
     }
 
-    async _audioInject(definition, fields, sources, optionsContext) {
-        let usesAudio = false;
-        for (const fieldValue of Object.values(fields)) {
-            if (fieldValue.includes('{audio}')) {
-                usesAudio = true;
-                break;
-            }
-        }
-
-        if (!usesAudio) {
-            return true;
-        }
-
-        try {
-            const expressions = definition.expressions;
-            const audioSourceDefinition = Array.isArray(expressions) ? expressions[0] : definition;
-
-            const {uri} = await this.audioSystem.getDefinitionAudio(audioSourceDefinition, sources, {tts: false, optionsContext});
-            const filename = this._createInjectedAudioFileName(audioSourceDefinition);
-            if (filename !== null) {
-                definition.audio = {url: uri, filename};
-            }
-
-            return true;
-        } catch (e) {
-            return false;
-        }
-    }
-
-    async _injectScreenshot(definition, fields, screenshot) {
-        let usesScreenshot = false;
-        for (const fieldValue of Object.values(fields)) {
-            if (fieldValue.includes('{screenshot}')) {
-                usesScreenshot = true;
-                break;
-            }
-        }
-
-        if (!usesScreenshot) {
-            return;
-        }
-
-        const dateToString = (date) => {
-            const year = date.getUTCFullYear();
-            const month = date.getUTCMonth().toString().padStart(2, '0');
-            const day = date.getUTCDate().toString().padStart(2, '0');
-            const hours = date.getUTCHours().toString().padStart(2, '0');
-            const minutes = date.getUTCMinutes().toString().padStart(2, '0');
-            const seconds = date.getUTCSeconds().toString().padStart(2, '0');
-            return `${year}-${month}-${day}-${hours}-${minutes}-${seconds}`;
-        };
-
-        const now = new Date(Date.now());
-        const filename = `yomichan_browser_screenshot_${definition.reading}_${dateToString(now)}.${screenshot.format}`;
-        const data = screenshot.dataUrl.replace(/^data:[\w\W]*?,/, '');
-
-        try {
-            await this.anki.storeMediaFile(filename, data);
-        } catch (e) {
-            return;
-        }
-
-        definition.screenshotFileName = filename;
-    }
-
     async _renderTemplate(template, data) {
         return handlebarsRenderDynamic(template, data);
     }
 
-    _createInjectedAudioFileName(definition) {
-        const {reading, expression} = definition;
-        if (!reading && !expression) { return null; }
-
-        let filename = 'yomichan';
-        if (reading) { filename += `_${reading}`; }
-        if (expression) { filename += `_${expression}`; }
-        filename += '.mp3';
-        return filename;
-    }
-
     static _getTabUrl(tab) {
         return new Promise((resolve) => {
             chrome.tabs.sendMessage(tab.id, {action: 'getUrl'}, {frameId: 0}, (response) => {
-- 
cgit v1.2.3