Skip to content

Commit

Permalink
created new client for v2, restored v1 of qbt
Browse files Browse the repository at this point in the history
  • Loading branch information
bogenpirat committed Sep 24, 2019
1 parent eeed867 commit c7b2e31
Show file tree
Hide file tree
Showing 7 changed files with 85 additions and 65 deletions.
1 change: 1 addition & 0 deletions manifest.json
Expand Up @@ -25,6 +25,7 @@
"webuiapis/VuzeRemoteUI.js",
"webuiapis/BuffaloWebUI.js",
"webuiapis/qBittorrentWebUI.js",
"webuiapis/qBittorrentWebUI-v2.js",
"webuiapis/QnapDownloadStation.js",
"webuiapis/DelugeWebUI.js",
"webuiapis/pyrtWebUI.js",
Expand Down
11 changes: 6 additions & 5 deletions miscapis/background.js
Expand Up @@ -106,7 +106,7 @@ function registerReferrerHeaderListeners() {
var servers = JSON.parse(localStorage.getItem("servers"));
for(var i in servers) {
var server = servers[i];
if(server && server.client && server.client == "qBittorrent WebUI") {
if(server && server.client && (server.client == "qBittorrent WebUI" || server.client == "qBittorrent v4.1+ WebUI")) {
var url = "http" + (server.hostsecure ? "s" : "") + "://" + server.host + ":" + server.port + "/";

var listener = function(details) {
Expand Down Expand Up @@ -136,13 +136,14 @@ function registerReferrerHeaderListeners() {
details.requestHeaders.push({'name': 'Origin', 'value': url});
}

console.log(details); // TODO
return {requestHeaders: details.requestHeaders};
}

chrome.webRequest.onBeforeSendHeaders.addListener(listener, {urls: [
"http" + (server.hostsecure ? "s" : "") + "://" + server.host + ":" + server.port + "/*"
]}, ["blocking", "requestHeaders"]);
if(server.host && server.port) {
chrome.webRequest.onBeforeSendHeaders.addListener(listener, {urls: [
"http" + (server.hostsecure ? "s" : "") + "://" + server.host + ":" + server.port + "/*"
]}, ["blocking", "requestHeaders"]);
}

listeners.push(listener);
}
Expand Down
13 changes: 12 additions & 1 deletion miscapis/config.js
Expand Up @@ -7,7 +7,8 @@ RTA.clients.config.getConfig = function(client, name) {
"Hadouken WebUI" : RTA.clients.config.hadouken,
"flood WebUI" : RTA.clients.config.flood,
"QNAP DownloadStation" : RTA.clients.config.qnap,
"qBittorrent WebUI" : RTA.clients.config.qbittorrent
"qBittorrent WebUI" : RTA.clients.config.qbittorrent,
"qBittorrent v4.1+ WebUI" : RTA.clients.config.qbittorrentv2
};

var config = "<table>" + RTA.clients.config.generalsettings.replace(/\{clienttype\}/g, client).replace(/\{name\}/g, name);
Expand Down Expand Up @@ -219,3 +220,13 @@ RTA.clients.config.qbittorrent = multiline(function(){/*
</tbody>
*/});

RTA.clients.config.qbittorrentv2 = multiline(function(){/*
<tbody name="qbittorrentv2specifics" class="specifics">
<tr>
<td><span class="title">Label/Directory<br/>interactivity</span></td>
<td><input type="checkbox" name="qbittorrentv2dirlabelask" /><br />
<span class="tip">Enable this to always ask for a label/directory combination upon adding torrents.</span></td>
</tr>
</tbody>
*/});

3 changes: 3 additions & 0 deletions miscapis/content_rta.js
Expand Up @@ -68,6 +68,9 @@ function registerLinks(response) {
else if (server["qbittorrentdirlabelask"] && server["client"]=="qBittorrent WebUI") {
showLabelDirChooser(response, url);
}
else if (server["qbittorrentv2dirlabelask"] && server["client"]=="qBittorrent v4.1+ WebUI") {
showLabelDirChooser(response, url);
}
else {
chrome.extension.sendRequest({"action": "addTorrent", "url": url, "label": undefined, "dir": undefined});
}
Expand Down
5 changes: 5 additions & 0 deletions miscapis/functions.js
Expand Up @@ -49,6 +49,8 @@ RTA.dispatchTorrent = function(server, data, name, label, dir) {
RTA.clients.qnapDownloadStationAdder(server, data, name); break;
case "tTorrent WebUI":
RTA.clients.tTorrentAdder(server, data, name); break;
case "qBittorrent v4.1+ WebUI":
RTA.clients.qBittorrentV2Adder(server, data, name, label, dir); break;
}
}

Expand Down Expand Up @@ -174,6 +176,9 @@ RTA.genericOnClick = function(info, tab) {
else if (server.qbittorrentlabelask == true && server.client == "qBittorrent WebUI") {
chrome.tabs.sendRequest(tab.id, {"action": "showLabelDirChooser", "url": info.linkUrl, "settings": localStorage, "server": server});
}
else if (server.qbittorrentv2labelask == true && server.client == "qBittorrent v4.1+ WebUI") {
chrome.tabs.sendRequest(tab.id, {"action": "showLabelDirChooser", "url": info.linkUrl, "settings": localStorage, "server": server});
}
else {
RTA.getTorrent(server, info.linkUrl);
}
Expand Down
1 change: 1 addition & 0 deletions options.html
Expand Up @@ -25,6 +25,7 @@ <h1><img src="icons/BitTorrent48.png" alt="BitTorrent!" /> Remote Torrent Adder
<option>Deluge WebUI</option>
<option>pyrt WebUI</option>
<option>qBittorrent WebUI</option>
<option>qBittorrent v4.1+ WebUI</option>
<option>ruTorrent WebUI</option>
<option>Torrentflux WebUI</option>
<option>Transmission WebUI</option>
Expand Down
116 changes: 57 additions & 59 deletions webuiapis/qBittorrentWebUI.js
@@ -1,59 +1,57 @@
RTA.clients.qBittorrentAdder = function(server, data, torrentname, label, dir) {

var rootUrl = (server.hostsecure ? "https" : "http") + "://" + server.host + ":" + server.port;

var loginXhr = new XMLHttpRequest();
loginXhr.open("POST", rootUrl + "/api/v2/auth/login", true);
loginXhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
loginXhr.send("username=" + encodeURIComponent(server.login) + "&password=" + encodeURIComponent(server.password));
loginXhr.onreadystatechange = function() {
if(loginXhr.readyState == 4 && loginXhr.status == 0) {
RTA.displayResponse("Failure", "Could not contact server at: " + rootUrl, true);
}
else if(loginXhr.readyState == 4 && loginXhr.status == 200) {

xhr = new XMLHttpRequest();
xhr.open("POST", "http" + (server.hostsecure ? "s" : "") + "://" + server.host + ":" + server.port + "/api/v2/torrents/add");
xhr.onreadystatechange = function(data) {
if(xhr.readyState == 4 && xhr.status == 200) {
RTA.displayResponse("Success", "Torrent added successfully.");
} else if(xhr.readyState == 4 && xhr.status != 200) {
RTA.displayResponse("Failure", "Server responded with an irregular HTTP error code:\n" + xhr.status + ": " + xhr.responseText, true);
}
};

var boundary = "AJAX-----------------------" + (new Date).getTime();
xhr.setRequestHeader("Content-Type", "multipart/form-data; boundary=" + boundary);
var message = "--" + boundary + "\r\n";

if(data.substring(0,7) == "magnet:") {
message += "Content-Disposition: form-data; name=\"urls\"\r\n\r\n";
message += data + "\r\n";
message += "--" + boundary + "\r\n";
} else {
message += "Content-Disposition: form-data; name=\"fileselect[]\"; filename=\"" + ((torrentname.length && torrentname.length > 1) ? torrentname : (new Date).getTime()) + "\"\r\n";
message += "Content-Type: application/x-bittorrent\r\n\r\n";
message += data + "\r\n";
message += "--" + boundary + "\r\n";
}

if(dir) {
message += "Content-Disposition: form-data; name=\"savepath\"\r\n\r\n"
message += dir + "\r\n";
message += "--" + boundary + "\r\n";
}

if(label) {
message += "Content-Disposition: form-data; name=\"category\"\r\n\r\n"
message += label + "\r\n";
message += "--" + boundary + "--\r\n";
}

xhr.sendAsBinary(message);
}
else if(loginXhr.readyState == 4 && loginXhr.status != 200)
{
RTA.displayResponse("Failure", "Unable to Authenticate with Server. HTTP error code:\n" + xhr.status + ": " + xhr.responseText, true);
}
};
}
RTA.clients.qBittorrentAdder = function(server, data, torrentname, label, dir) {
var target;
if(data.substring(0,7) == "magnet:")
target = "download";
else
target = "upload";


var rootUrl = (server.hostsecure ? "https" : "http") + "://" + server.host + ":" + server.port;

var loginXhr = new XMLHttpRequest();
loginXhr.open("POST", rootUrl + "/login", true);
loginXhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
loginXhr.send("username=" + encodeURIComponent(server.login) + "&password=" + encodeURIComponent(server.password));
loginXhr.onreadystatechange = function() {
if(loginXhr.readyState == 4) {
xhr = new XMLHttpRequest();
xhr.open("POST", "http" + (server.hostsecure ? "s" : "") + "://" + server.host + ":" + server.port + "/command/" + target, true, server.login, server.password);
xhr.onreadystatechange = function(data) {
if(xhr.readyState == 4 && xhr.status == 200) {
RTA.displayResponse("Success", "Torrent added successfully.");
} else if(xhr.readyState == 4 && xhr.status != 200) {
RTA.displayResponse("Failure", "Server responded with an irregular HTTP error code:\n" + xhr.status + ": " + xhr.responseText, true);
}
};

var boundary = "AJAX-----------------------" + (new Date).getTime();
xhr.setRequestHeader("Content-Type", "multipart/form-data; boundary=" + boundary);
var message = "--" + boundary + "\r\n";

if(data.substring(0,7) == "magnet:") {
message += "Content-Disposition: form-data; name=\"urls\"\r\n\r\n";
message += data + "\r\n";
message += "--" + boundary + "\r\n";
} else {
message += "Content-Disposition: form-data; name=\"fileselect[]\"; filename=\"" + ((torrentname.length && torrentname.length > 1) ? torrentname : (new Date).getTime()) + "\"\r\n";
message += "Content-Type: application/x-bittorrent\r\n\r\n";
message += data + "\r\n";
message += "--" + boundary + "\r\n";
}

if(dir) {
message += "Content-Disposition: form-data; name=\"savepath\"\r\n\r\n"
message += dir + "\r\n";
message += "--" + boundary + "\r\n";
}

if(label) {
message += "Content-Disposition: form-data; name=\"category\"\r\n\r\n"
message += label + "\r\n";
message += "--" + boundary + "--\r\n";
}

xhr.sendAsBinary(message);
}
};
}

0 comments on commit c7b2e31

Please sign in to comment.