From 1a98b17aa496b4c5c3ffc4483bdb0b875b9134d2 Mon Sep 17 00:00:00 2001 From: wareya Date: Wed, 14 Aug 2019 07:51:54 -0400 Subject: [PATCH] add a force sync option; fix audio mining on some websites like youtube --- background-script.js | 42 ++++++++++++++++++++++++++---------- manifest.json | 3 ++- options.js | 6 ++++++ reader.html | 1 + texthook.js | 51 ++++++++++++++++++++++++++++++++------------ 5 files changed, 77 insertions(+), 26 deletions(-) diff --git a/background-script.js b/background-script.js index 4134ced..b44c83d 100644 --- a/background-script.js +++ b/background-script.js @@ -10,23 +10,24 @@ reader_width: 800, reader_height: 300, deconjugator_rules_json: "", freqlist_mode: 1, +ankiconnect_force_sync: false }; async function settings_init() { try { - async function getvar(name, defval) + async function getvar(name) { let temp = (await browser.storage.local.get(name))[name]; - if(temp == undefined) - temp = defval; - settings[name] = temp; + if(temp != undefined) + settings[name] = temp; } - getvar("reader_width", 800); - getvar("reader_height", 300); - getvar("deconjugator_rules_json", ""); - getvar("freqlist_mode", 1); + getvar("reader_width"); + getvar("reader_height"); + getvar("deconjugator_rules_json"); + getvar("freqlist_mode"); + getvar("ankiconnect_force_sync"); } catch(err) {} // options not stored yet } @@ -1053,8 +1054,6 @@ function add_json_info(lookups, other_settings) } else { - console.log("testing thing"); - console.log(entry); let possibilities = json_lookup_kana_exact(dict, foundtext); if(!other_settings.strict_epwing) { @@ -1950,7 +1949,7 @@ function send_error(tab, error) } catch (err) {} } -browser.runtime.onMessage.addListener((req, sender) => +browser.runtime.onMessage.addListener(async (req, sender) => { if (req.type == "search") { @@ -2001,6 +2000,15 @@ browser.runtime.onMessage.addListener((req, sender) => { if(response.error) send_error(sender.tab.id, "AnkiConnect mining failed: " + response.error); + else + { + if(settings.ankiconnect_force_sync) + { + let newxhr = new XMLHttpRequest(); + newxhr.open("POST", req.host, true); + newxhr.send('{"action": "sync","version": 6}'); + } + } } catch (e) { } }); xhr.addEventListener('error', () => @@ -2021,6 +2029,18 @@ browser.runtime.onMessage.addListener((req, sender) => console.log("tried to play audio"); console.log(req.host); } + else if (req.type == "get_audio_base64") + { + let blob = await (await fetch(req.url)).blob(); + let reader = new FileReader(); + let result_base64 = await new Promise((resolve) => + { + let fileReader = new FileReader(); + fileReader.onload = (e) => resolve(fileReader.result); + fileReader.readAsDataURL(blob); + }); + return Promise.resolve({"response" : result_base64}); + } return Promise.resolve(undefined); }); diff --git a/manifest.json b/manifest.json index 394e79d..d462824 100644 --- a/manifest.json +++ b/manifest.json @@ -18,7 +18,8 @@ "storage", "tabs", "clipboardRead", - "https://assets.languagepod101.com/dictionary/japanese/audiomp3.php?*" + "https://assets.languagepod101.com/dictionary/japanese/audiomp3.php?*", + "http://assets.languagepod101.com/dictionary/japanese/audiomp3.php?*" ], "background": { diff --git a/options.js b/options.js index 70c6da0..4c1369e 100644 --- a/options.js +++ b/options.js @@ -175,6 +175,12 @@ function defaults() default: false, label: "Enable live mining (configured via the button below under \"Other\")" }); + settings.push({ + id: "ankiconnect_force_sync", + kind: "checkbox", + default: false, + label: "Force Anki to sync to AnkiWeb after each mined card" + }); settings.push({ id: "use_selection", kind: "checkbox", diff --git a/reader.html b/reader.html index 2089e9b..3d7a7fe 100644 --- a/reader.html +++ b/reader.html @@ -66,6 +66,7 @@ body > p:nth-of-type(1) + diff --git a/texthook.js b/texthook.js index 36a1e83..8556946 100644 --- a/texthook.js +++ b/texthook.js @@ -2208,25 +2208,48 @@ async function mine_to_ankiconnect_with_base64_audio(object, audiofname, audioda }, (e) => {console.log(e);}); } +async function get_url_blob_base64(url) +{ + let data = await browser.runtime.sendMessage({type:"get_audio_base64", url:url}); + return data; +} + async function mine_to_ankiconnect(object) { - let audio_base64 = ""; - if(object.audio !== undefined) + try { - let url = "https://assets.languagepod101.com/dictionary/japanese/audiomp3.php?kana=" + object.audio[0] + "&kanji=" + object.audio[1]; - let reader = new FileReader(); - reader.onload = () => + let audio_base64 = ""; + if(object.audio !== undefined) { - let fname = "nazeka_audio_" + object.audio[0] + "_" + object.audio[1] + ".mp3"; - let result = reader.result.replace(/[^,]*,/, ""); - mine_to_ankiconnect_with_base64_audio(object, fname, result); - }; - fetch(url) - .then((response) => response.blob()) - .then((myBlob) => reader.readAsDataURL(myBlob)); + let url = ""; + if(settings.audio_force_https) + url = "https://"; + else + url = "http://"; + url += "assets.languagepod101.com/dictionary/japanese/audiomp3.php?kana=" + object.audio[0] + "&kanji=" + object.audio[1]; + let response = await get_url_blob_base64(url); + if(response) + { + let res = response.response; + console.log("loaded"); + let fname = "nazeka_audio_" + object.audio[0] + "_" + object.audio[1] + ".mp3"; + let result = res.replace(/[^,]*,/, ""); + mine_to_ankiconnect_with_base64_audio(object, fname, result); + } + else + { + console.log("errored"); + errormessage("AnkiConnect mining partially failed: Failed to connect to languagepod101 to grab audio (going to try mining without audio)"); + mine_to_ankiconnect_with_base64_audio(object, "", ""); + } + } + else + mine_to_ankiconnect_with_base64_audio(object, "", ""); + } + catch(e) + { + errormessage("AnkiConnect failed: " + e); } - else - mine_to_ankiconnect_with_base64_audio(object, "", ""); } function mine(highlight)