add a force sync option; fix audio mining on some websites like youtube

This commit is contained in:
wareya committed 2019-08-14 07:51:54 -04:00
1 parent 59b64c11ea
commit 1a98b17aa4
5 files changed
+77 -26

No files matched your search

+31 -11
View File
@@ -10,23 +10,24 @@ reader_width: 800,
reader_height: 300, reader_height: 300,
deconjugator_rules_json: "", deconjugator_rules_json: "",
freqlist_mode: 1, freqlist_mode: 1,
ankiconnect_force_sync: false
}; };
async function settings_init() async function settings_init()
{ {
try try
{ {
async function getvar(name, defval) async function getvar(name)
{ {
let temp = (await browser.storage.local.get(name))[name]; let temp = (await browser.storage.local.get(name))[name];
if(temp == undefined) if(temp != undefined)
temp = defval; settings[name] = temp;
settings[name] = temp;
} }
getvar("reader_width", 800); getvar("reader_width");
getvar("reader_height", 300); getvar("reader_height");
getvar("deconjugator_rules_json", ""); getvar("deconjugator_rules_json");
getvar("freqlist_mode", 1); getvar("freqlist_mode");
getvar("ankiconnect_force_sync");
} catch(err) {} // options not stored yet } catch(err) {} // options not stored yet
} }
@@ -1053,8 +1054,6 @@ function add_json_info(lookups, other_settings)
} }
else else
{ {
console.log("testing thing");
console.log(entry);
let possibilities = json_lookup_kana_exact(dict, foundtext); let possibilities = json_lookup_kana_exact(dict, foundtext);
if(!other_settings.strict_epwing) if(!other_settings.strict_epwing)
{ {
@@ -1950,7 +1949,7 @@ function send_error(tab, error)
} catch (err) {} } catch (err) {}
} }
browser.runtime.onMessage.addListener((req, sender) => browser.runtime.onMessage.addListener(async (req, sender) =>
{ {
if (req.type == "search") if (req.type == "search")
{ {
@@ -2001,6 +2000,15 @@ browser.runtime.onMessage.addListener((req, sender) =>
{ {
if(response.error) if(response.error)
send_error(sender.tab.id, "AnkiConnect mining failed: " + 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) { } } catch (e) { }
}); });
xhr.addEventListener('error', () => xhr.addEventListener('error', () =>
@@ -2021,6 +2029,18 @@ browser.runtime.onMessage.addListener((req, sender) =>
console.log("tried to play audio"); console.log("tried to play audio");
console.log(req.host); 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); return Promise.resolve(undefined);
}); });
+2 -1
View File
@@ -18,7 +18,8 @@
"storage", "storage",
"tabs", "tabs",
"clipboardRead", "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": { "background": {
+6
View File
@@ -175,6 +175,12 @@ function defaults()
default: false, default: false,
label: "Enable live mining (configured via the button below under \"Other\")" 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({ settings.push({
id: "use_selection", id: "use_selection",
kind: "checkbox", kind: "checkbox",
+1
View File
@@ -66,6 +66,7 @@ body > p:nth-of-type(1)
</style> </style>
<script src="include/browser-polyfill.min.js" charset="UTF-8"></script> <script src="include/browser-polyfill.min.js" charset="UTF-8"></script>
<script src="reader.js" charset="UTF-8"></script> <script src="reader.js" charset="UTF-8"></script>
<script src="texthook.js" charset="UTF-8"></script>
</head> </head>
<body lang="ja"> <body lang="ja">
+37 -14
View File
@@ -2208,25 +2208,48 @@ async function mine_to_ankiconnect_with_base64_audio(object, audiofname, audioda
}, (e) => {console.log(e);}); }, (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) async function mine_to_ankiconnect(object)
{ {
let audio_base64 = ""; try
if(object.audio !== undefined)
{ {
let url = "https://assets.languagepod101.com/dictionary/japanese/audiomp3.php?kana=" + object.audio[0] + "&kanji=" + object.audio[1]; let audio_base64 = "";
let reader = new FileReader(); if(object.audio !== undefined)
reader.onload = () =>
{ {
let fname = "nazeka_audio_" + object.audio[0] + "_" + object.audio[1] + ".mp3"; let url = "";
let result = reader.result.replace(/[^,]*,/, ""); if(settings.audio_force_https)
mine_to_ankiconnect_with_base64_audio(object, fname, result); url = "https://";
}; else
fetch(url) url = "http://";
.then((response) => response.blob()) url += "assets.languagepod101.com/dictionary/japanese/audiomp3.php?kana=" + object.audio[0] + "&kanji=" + object.audio[1];
.then((myBlob) => reader.readAsDataURL(myBlob)); 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) function mine(highlight)