urltojd2/background.js

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"]
);