177 lines
4.9 KiB
JavaScript
177 lines
4.9 KiB
JavaScript
let JD2_API_URL = window.localStorage.getItem("jd2_api_url") ?? 'http://localhost:9666/flashgot?';
|
|
let JD2_REFERER = window.localStorage.getItem("jd2_referer") ?? 'localhost';
|
|
let JD2_MATCH_URL = window.localStorage.getItem("jd2_match_url") ?? "*://*/flashgot?*";
|
|
|
|
// menu
|
|
const mnDlId = "JD2Dl";
|
|
const mnGrabberId = "JD2Grabber"
|
|
|
|
|
|
function onError(error) {
|
|
console.log('UrlToJD2 background error: ' + error);
|
|
}
|
|
|
|
function onCreated() {
|
|
if (browser.runtime.lastError) {
|
|
onError(browser.runtime.lastError);
|
|
}
|
|
}
|
|
|
|
function makeRequest(url) {
|
|
var req = new XMLHttpRequest();
|
|
req.open('GET', url, true);
|
|
req.send(null);
|
|
req.onerror = function () {
|
|
onError('Is JD2 on and ready ?');
|
|
}
|
|
req.onload = function () {
|
|
if (req.readyState === XMLHttpRequest.DONE && req.status === 200) {
|
|
// console.log(req.responseText);
|
|
// notify...
|
|
} else {
|
|
onError(req.statusText);
|
|
}
|
|
}
|
|
}
|
|
|
|
function urlConstruct(url, autostart) {
|
|
return JD2_API_URL + "autostart=" + autostart + "&urls=" + encodeURIComponent(url);
|
|
}
|
|
|
|
// Return an url from a text, good enought :-)
|
|
function linkify(text) {
|
|
let urlRegex =/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
|
|
let url = text.match(urlRegex);
|
|
return (url === null) ? '' : url[0];
|
|
}
|
|
|
|
// MENU
|
|
browser.menus.create({
|
|
id: mnGrabberId,
|
|
title: "Linkgrabbler",
|
|
contexts: ["link", "selection"],
|
|
icons: {
|
|
"16": "icons/jd2linkgrabber-16.png",
|
|
"32": "icons/jd2linkgrabber-32.png"
|
|
}
|
|
}, onCreated);
|
|
|
|
browser.menus.create({
|
|
id: mnDlId,
|
|
title: "send to Download",
|
|
contexts: ["link", "selection"],
|
|
icons: {
|
|
"16": "icons/jd2download-16.png",
|
|
"32": "icons/jd2download-32.png"
|
|
}
|
|
}, onCreated);
|
|
|
|
// Choose from info (object menus.OnClickData)
|
|
// linkUrl over selectionText
|
|
// return link or ''
|
|
function infoToUrl(info){
|
|
var url = '';
|
|
if (typeof info.linkUrl !== 'undefined'){
|
|
url = info.linkUrl;
|
|
} else {
|
|
if (typeof info.selectionText !== 'undefined'){
|
|
url = linkify(info.selectionText);
|
|
}
|
|
}
|
|
return url;
|
|
}
|
|
|
|
browser.menus.onClicked.addListener((info, tab) => {
|
|
var url = infoToUrl(info);
|
|
if (url !== ''){
|
|
switch (info.menuItemId){
|
|
case mnGrabberId:
|
|
url_for_JD2 = urlConstruct(url, 0);
|
|
break;
|
|
case mnDlId:
|
|
url_for_JD2 = urlConstruct(url, 1);
|
|
break;
|
|
}
|
|
// console.log(url);
|
|
// console.log(url_for_JD2);
|
|
makeRequest(url_for_JD2);
|
|
}
|
|
});
|
|
|
|
function updateMenuItem(url) {
|
|
browser.menus.update(mnDlId, {
|
|
title: 'Download: ' + url
|
|
});
|
|
browser.menus.update(mnGrabberId, {
|
|
title: 'Linkgrabber: ' + url
|
|
});
|
|
browser.menus.refresh();
|
|
}
|
|
|
|
function allMenusVisible(visible){
|
|
browser.menus.update(mnGrabberId, {
|
|
visible: visible
|
|
});
|
|
browser.menus.update(mnDlId, {
|
|
visible: visible
|
|
});
|
|
}
|
|
|
|
browser.menus.onShown.addListener(info => {
|
|
var url = infoToUrl(info);
|
|
// console.log(url);
|
|
if (url !== ''){
|
|
allMenusVisible(true);
|
|
updateMenuItem(url);
|
|
return;
|
|
} else {
|
|
allMenusVisible(false);
|
|
browser.menus.refresh();
|
|
}
|
|
});
|
|
|
|
// Handle message from 'popup'
|
|
function handleMessageFromPopup(request, sender, sendResponse) {
|
|
if (request.message == "refresh") {
|
|
JD2_API_URL = window.localStorage.getItem("jd2_api_url");
|
|
JD2_REFERER = window.localStorage.getItem("jd2_referer");
|
|
JD2_MATCH_URL = window.localStorage.getItem("jd2_match_url");
|
|
} else {
|
|
let forJD2link = urlConstruct(request.jd2url, request.jd2action);
|
|
makeRequest(forJD2link);
|
|
return Promise.resolve({response: "done"});
|
|
}
|
|
}
|
|
browser.runtime.onMessage.addListener(handleMessageFromPopup);
|
|
|
|
|
|
// Some functions for a good referer !
|
|
|
|
// https://stackoverflow.com/a/11602753
|
|
function mod_headers(header_array, p_name, p_value) {
|
|
var did_set = false;
|
|
for (var i in header_array) {
|
|
var header = header_array[i];
|
|
var name = header.name;
|
|
// var value = header.value;
|
|
// If the header is already present, change it:
|
|
if (name == p_name) {
|
|
header.value = p_value;
|
|
did_set = true;
|
|
}
|
|
}
|
|
// if it is not, add it:
|
|
if (!did_set) { header_array.push({ name: p_name, value: p_value }); }
|
|
}
|
|
|
|
function rewriteHeader(e) {
|
|
mod_headers(e.requestHeaders, 'Referer', JD2_REFERER);
|
|
// for (var header of e.requestHeaders) { console.log(header.name + '::' + header.value); }
|
|
return { requestHeaders: e.requestHeaders };
|
|
}
|
|
|
|
browser.webRequest.onBeforeSendHeaders.addListener(
|
|
rewriteHeader,
|
|
{ urls: [JD2_MATCH_URL] },
|
|
["blocking", "requestHeaders"]
|
|
); |