mirror of
https://github.com/d47081/qBittorrent.git
synced 2025-02-02 09:55:55 +00:00
Merge pull request #4015 from naikel/cookies
[WebUI] Add save path, cookies and labels when adding torrents
This commit is contained in:
commit
6f2eccd62f
@ -39,7 +39,7 @@ static const char *__TRANSLATIONS__[] = {
|
|||||||
QT_TRANSLATE_NOOP("HttpServer", "Logout"),
|
QT_TRANSLATE_NOOP("HttpServer", "Logout"),
|
||||||
QT_TRANSLATE_NOOP("HttpServer", "Download Torrents from their URL or Magnet link"),
|
QT_TRANSLATE_NOOP("HttpServer", "Download Torrents from their URL or Magnet link"),
|
||||||
QT_TRANSLATE_NOOP("HttpServer", "Only one link per line"),
|
QT_TRANSLATE_NOOP("HttpServer", "Only one link per line"),
|
||||||
QT_TRANSLATE_NOOP("HttpServer", "Download local torrent"),
|
QT_TRANSLATE_NOOP("HttpServer", "Upload local torrent"),
|
||||||
QT_TRANSLATE_NOOP("HttpServer", "Download"),
|
QT_TRANSLATE_NOOP("HttpServer", "Download"),
|
||||||
QT_TRANSLATE_NOOP("HttpServer", "Are you sure you want to delete the selected torrents from the transfer list?"),
|
QT_TRANSLATE_NOOP("HttpServer", "Are you sure you want to delete the selected torrents from the transfer list?"),
|
||||||
QT_TRANSLATE_NOOP("HttpServer", "Global upload rate limit must be greater than 0 or disabled."),
|
QT_TRANSLATE_NOOP("HttpServer", "Global upload rate limit must be greater than 0 or disabled."),
|
||||||
@ -84,6 +84,9 @@ static const char *__TRANSLATIONS__[] = {
|
|||||||
QT_TRANSLATE_NOOP("HttpServer", "Paused"),
|
QT_TRANSLATE_NOOP("HttpServer", "Paused"),
|
||||||
QT_TRANSLATE_NOOP("HttpServer", "Active"),
|
QT_TRANSLATE_NOOP("HttpServer", "Active"),
|
||||||
QT_TRANSLATE_NOOP("HttpServer", "Inactive")
|
QT_TRANSLATE_NOOP("HttpServer", "Inactive")
|
||||||
|
QT_TRANSLATE_NOOP("HttpServer", "Save files to location:")
|
||||||
|
QT_TRANSLATE_NOOP("HttpServer", "Label:")
|
||||||
|
QT_TRANSLATE_NOOP("HttpServer", "Cookie:")
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct { const char *source; const char *comment; } __COMMENTED_TRANSLATIONS__[] = {
|
static const struct { const char *source; const char *comment; } __COMMENTED_TRANSLATIONS__[] = {
|
||||||
|
@ -44,6 +44,7 @@
|
|||||||
#include "core/bittorrent/trackerentry.h"
|
#include "core/bittorrent/trackerentry.h"
|
||||||
#include "core/bittorrent/torrentinfo.h"
|
#include "core/bittorrent/torrentinfo.h"
|
||||||
#include "core/bittorrent/torrenthandle.h"
|
#include "core/bittorrent/torrenthandle.h"
|
||||||
|
#include "core/net/downloadmanager.h"
|
||||||
#include "websessiondata.h"
|
#include "websessiondata.h"
|
||||||
#include "webapplication.h"
|
#include "webapplication.h"
|
||||||
|
|
||||||
@ -112,6 +113,7 @@ QMap<QString, QMap<QString, WebApplication::Action> > WebApplication::initialize
|
|||||||
ADD_ACTION(command, bottomPrio);
|
ADD_ACTION(command, bottomPrio);
|
||||||
ADD_ACTION(command, recheck);
|
ADD_ACTION(command, recheck);
|
||||||
ADD_ACTION(command, setLabel);
|
ADD_ACTION(command, setLabel);
|
||||||
|
ADD_ACTION(command, getSavePath);
|
||||||
ADD_ACTION(version, api);
|
ADD_ACTION(version, api);
|
||||||
ADD_ACTION(version, api_min);
|
ADD_ACTION(version, api_min);
|
||||||
ADD_ACTION(version, qbittorrent);
|
ADD_ACTION(version, qbittorrent);
|
||||||
@ -306,9 +308,33 @@ void WebApplication::action_command_shutdown()
|
|||||||
void WebApplication::action_command_download()
|
void WebApplication::action_command_download()
|
||||||
{
|
{
|
||||||
CHECK_URI(0);
|
CHECK_URI(0);
|
||||||
CHECK_PARAMETERS("urls");
|
|
||||||
QString urls = request().posts["urls"];
|
QString urls = request().posts["urls"];
|
||||||
QStringList list = urls.split('\n');
|
QStringList list = urls.split('\n');
|
||||||
|
QString savepath = request().posts["savepath"];
|
||||||
|
QString label = request().posts["label"];
|
||||||
|
QString cookie = request().posts["cookie"];
|
||||||
|
QList<QNetworkCookie> cookies;
|
||||||
|
if (!cookie.isEmpty()) {
|
||||||
|
|
||||||
|
QStringList cookiesStr = cookie.split("; ");
|
||||||
|
foreach (QString cookieStr, cookiesStr) {
|
||||||
|
cookieStr = cookieStr.trimmed();
|
||||||
|
int index = cookieStr.indexOf('=');
|
||||||
|
if (index > 1) {
|
||||||
|
QByteArray name = cookieStr.left(index).toLatin1();
|
||||||
|
QByteArray value = cookieStr.right(cookieStr.length() - index - 1).toLatin1();
|
||||||
|
QNetworkCookie c(name, value);
|
||||||
|
cookies << c;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
savepath = savepath.trimmed();
|
||||||
|
label = label.trimmed();
|
||||||
|
|
||||||
|
BitTorrent::AddTorrentParams params;
|
||||||
|
params.savePath = savepath;
|
||||||
|
params.label = label;
|
||||||
|
|
||||||
foreach (QString url, list) {
|
foreach (QString url, list) {
|
||||||
url = url.trimmed();
|
url = url.trimmed();
|
||||||
@ -320,7 +346,9 @@ void WebApplication::action_command_download()
|
|||||||
if ((url.size() == 40 && !url.contains(QRegExp("[^0-9A-Fa-f]")))
|
if ((url.size() == 40 && !url.contains(QRegExp("[^0-9A-Fa-f]")))
|
||||||
|| (url.size() == 32 && !url.contains(QRegExp("[^2-7A-Za-z]"))))
|
|| (url.size() == 32 && !url.contains(QRegExp("[^2-7A-Za-z]"))))
|
||||||
url = "magnet:?xt=urn:btih:" + url;
|
url = "magnet:?xt=urn:btih:" + url;
|
||||||
BitTorrent::Session::instance()->addTorrent(url);
|
|
||||||
|
Net::DownloadManager::instance()->setCookiesFromUrl(cookies, QUrl::fromEncoded(url.toUtf8()));
|
||||||
|
BitTorrent::Session::instance()->addTorrent(url, params);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -329,6 +357,11 @@ void WebApplication::action_command_upload()
|
|||||||
{
|
{
|
||||||
qDebug() << Q_FUNC_INFO;
|
qDebug() << Q_FUNC_INFO;
|
||||||
CHECK_URI(0);
|
CHECK_URI(0);
|
||||||
|
QString savepath = request().posts["savepath"];
|
||||||
|
QString label = request().posts["label"];
|
||||||
|
|
||||||
|
savepath = savepath.trimmed();
|
||||||
|
label = label.trimmed();
|
||||||
|
|
||||||
foreach(const Http::UploadedFile& torrent, request().files) {
|
foreach(const Http::UploadedFile& torrent, request().files) {
|
||||||
QString filePath = saveTmpFile(torrent.data);
|
QString filePath = saveTmpFile(torrent.data);
|
||||||
@ -340,7 +373,10 @@ void WebApplication::action_command_upload()
|
|||||||
print(QObject::tr("Error: '%1' is not a valid torrent file.\n").arg(torrent.filename), Http::CONTENT_TYPE_TXT);
|
print(QObject::tr("Error: '%1' is not a valid torrent file.\n").arg(torrent.filename), Http::CONTENT_TYPE_TXT);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (!BitTorrent::Session::instance()->addTorrent(torrentInfo)) {
|
BitTorrent::AddTorrentParams params;
|
||||||
|
params.savePath = savepath;
|
||||||
|
params.label = label;
|
||||||
|
if (!BitTorrent::Session::instance()->addTorrent(torrentInfo, params)) {
|
||||||
status(500, "Internal Server Error");
|
status(500, "Internal Server Error");
|
||||||
print(QObject::tr("Error: Could not add torrent to session."), Http::CONTENT_TYPE_TXT);
|
print(QObject::tr("Error: Could not add torrent to session."), Http::CONTENT_TYPE_TXT);
|
||||||
}
|
}
|
||||||
@ -685,6 +721,12 @@ void WebApplication::action_command_setLabel()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WebApplication::action_command_getSavePath()
|
||||||
|
{
|
||||||
|
CHECK_URI(0);
|
||||||
|
print(Preferences::instance()->getSavePath());
|
||||||
|
}
|
||||||
|
|
||||||
bool WebApplication::isPublicScope()
|
bool WebApplication::isPublicScope()
|
||||||
{
|
{
|
||||||
return (scope_ == DEFAULT_SCOPE || scope_ == VERSION_INFO);
|
return (scope_ == DEFAULT_SCOPE || scope_ == VERSION_INFO);
|
||||||
|
@ -87,6 +87,7 @@ private:
|
|||||||
void action_command_bottomPrio();
|
void action_command_bottomPrio();
|
||||||
void action_command_recheck();
|
void action_command_recheck();
|
||||||
void action_command_setLabel();
|
void action_command_setLabel();
|
||||||
|
void action_command_getSavePath();
|
||||||
void action_version_api();
|
void action_version_api();
|
||||||
void action_version_api_min();
|
void action_version_api_min();
|
||||||
void action_version_qbittorrent();
|
void action_version_qbittorrent();
|
||||||
|
@ -4,16 +4,50 @@
|
|||||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||||
<title>QBT_TR(Add Torrent Link)QBT_TR</title>
|
<title>QBT_TR(Add Torrent Link)QBT_TR</title>
|
||||||
<link rel="stylesheet" href="css/style.css" type="text/css" />
|
<link rel="stylesheet" href="css/style.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="css/Window.css" type="text/css" />
|
||||||
<script type="text/javascript" src="scripts/mootools-1.2-core-yc.js" charset="utf-8"></script>
|
<script type="text/javascript" src="scripts/mootools-1.2-core-yc.js" charset="utf-8"></script>
|
||||||
<script type="text/javascript" src="scripts/download.js" charset="utf-8"></script>
|
<script type="text/javascript" src="scripts/download.js" charset="utf-8"></script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
<iframe id="download_frame" name="download_frame" class="invisible" src="javascript:false;"></iframe>
|
||||||
|
<form action="command/download" enctype="multipart/form-data" method="post" id="downloadForm" style="text-align: center;" target="download_frame">
|
||||||
<center>
|
<center>
|
||||||
<br/>
|
<br/>
|
||||||
<h2 class="vcenter">QBT_TR(Download Torrents from their URLs or Magnet links)QBT_TR</h2>
|
<h2 class="vcenter">QBT_TR(Download Torrents from their URLs or Magnet links)QBT_TR</h2>
|
||||||
<textarea id="urls" rows="10"></textarea>
|
<textarea id="urls" rows="10" name="urls"></textarea>
|
||||||
<p>QBT_TR(Only one link per line)QBT_TR</p>
|
<p>QBT_TR(Only one link per line)QBT_TR</p>
|
||||||
<input type="button" value="QBT_TR(Download)QBT_TR" id="downButton"/>
|
<fieldset class="settings" style="border: 0; text-align: left;">
|
||||||
</center>
|
<div class="formRow" style="margin-top: 6px;">
|
||||||
|
<label for="savepath" class="leftLabelLarge">QBT_TR(Save files to location:)QBT_TR</label>
|
||||||
|
<input type="text" id="savepath" name="savepath" style="width: 16em;"/>
|
||||||
|
</div>
|
||||||
|
<div class="formRow">
|
||||||
|
<label for="cookie" class="leftLabelLarge">QBT_TR(Cookie:)QBT_TR</label>
|
||||||
|
<input type="text" id="cookie" name="cookie" style="width: 16em;"/>
|
||||||
|
</div>
|
||||||
|
<div class="formRow">
|
||||||
|
<label for="label" class="leftLabelLarge">QBT_TR(Label:)QBT_TR</label>
|
||||||
|
<input type="text" id="label" name="label" style="width: 16em;"/>
|
||||||
|
</div>
|
||||||
|
<div id="submitbutton" style="margin-top: 12px; text-align: center;">
|
||||||
|
<button type="submit" id="submitButton">QBT_TR(Download)QBT_TR</button>
|
||||||
|
</div>
|
||||||
|
</center>
|
||||||
|
</form>
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
var submitted = false;
|
||||||
|
|
||||||
|
$('downloadForm').addEventListener("submit", function() {
|
||||||
|
$('download_spinner').style.display = "block";
|
||||||
|
submitted = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
$('download_frame').addEventListener("load", function() {
|
||||||
|
if (submitted)
|
||||||
|
window.parent.closeWindows();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
<div id="download_spinner" class="mochaSpinner"></div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -20,19 +20,23 @@
|
|||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
* THE SOFTWARE.
|
* THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
window.addEvent('domready', function() {
|
|
||||||
$('urls').focus();
|
getSavePath = function() {
|
||||||
$('downButton').addEvent('click', function(e) {
|
var req = new Request({
|
||||||
new Event(e).stop();
|
url: 'command/getSavePath',
|
||||||
new Request({
|
method: 'get',
|
||||||
url: 'command/download',
|
noCache: true,
|
||||||
method: 'post',
|
onFailure: function() {
|
||||||
data: {
|
alert("Could not contact qBittorrent");
|
||||||
urls: $('urls').value
|
},
|
||||||
},
|
onSuccess: function(data) {
|
||||||
onComplete: function() {
|
if (data) {
|
||||||
window.parent.document.getElementById('downloadPage').parentNode.removeChild(window.parent.document.getElementById('downloadPage'));
|
$('savepath').setProperty('value', data);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}).send();
|
}).send();
|
||||||
});
|
}
|
||||||
});
|
|
||||||
|
$(window).addEventListener("load", function() {
|
||||||
|
getSavePath();
|
||||||
|
});
|
||||||
|
@ -57,7 +57,7 @@ initializeWindows = function() {
|
|||||||
paddingVertical: 0,
|
paddingVertical: 0,
|
||||||
paddingHorizontal: 0,
|
paddingHorizontal: 0,
|
||||||
width: 500,
|
width: 500,
|
||||||
height: 300
|
height: 360
|
||||||
});
|
});
|
||||||
updateMainData();
|
updateMainData();
|
||||||
});
|
});
|
||||||
@ -88,7 +88,7 @@ initializeWindows = function() {
|
|||||||
new Event(e).stop();
|
new Event(e).stop();
|
||||||
new MochaUI.Window({
|
new MochaUI.Window({
|
||||||
id: 'uploadPage',
|
id: 'uploadPage',
|
||||||
title: "QBT_TR(Download local torrent)QBT_TR",
|
title: "QBT_TR(Upload local torrent)QBT_TR",
|
||||||
loadMethod: 'iframe',
|
loadMethod: 'iframe',
|
||||||
contentURL: 'upload.html',
|
contentURL: 'upload.html',
|
||||||
scrollbars: true,
|
scrollbars: true,
|
||||||
@ -96,8 +96,8 @@ initializeWindows = function() {
|
|||||||
maximizable: false,
|
maximizable: false,
|
||||||
paddingVertical: 0,
|
paddingVertical: 0,
|
||||||
paddingHorizontal: 0,
|
paddingHorizontal: 0,
|
||||||
width: 600,
|
width: 500,
|
||||||
height: 130
|
height: 200
|
||||||
});
|
});
|
||||||
updateMainData();
|
updateMainData();
|
||||||
});
|
});
|
||||||
|
@ -2,73 +2,48 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||||
<title>QBT_TR(Download local torrent)QBT_TR</title>
|
<title>QBT_TR(Upload local torrent)QBT_TR</title>
|
||||||
<link rel="stylesheet" href="css/style.css" type="text/css" />
|
<link rel="stylesheet" href="css/style.css" type="text/css" />
|
||||||
<link rel="stylesheet" href="css/Window.css" type="text/css" />
|
<link rel="stylesheet" href="css/Window.css" type="text/css" />
|
||||||
<script type="text/javascript" src="scripts/mootools-1.2-core-yc.js" charset="utf-8"></script>
|
<script type="text/javascript" src="scripts/mootools-1.2-core-yc.js" charset="utf-8"></script>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript" src="scripts/download.js" charset="utf-8"></script>
|
||||||
|
|
||||||
function stateChangeHandler() {
|
|
||||||
if (this.readyState == this.DONE) {
|
|
||||||
if (this.status == 200) {
|
|
||||||
window.parent.closeWindows();
|
|
||||||
} else {
|
|
||||||
if (this.responseText != "") {
|
|
||||||
alert(this.responseText);
|
|
||||||
} else {
|
|
||||||
alert("QBT_TR(Upload Failed!)QBT_TR");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$('upload_spinner').style.display = "none";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function uploadFiles(files) {
|
|
||||||
var xhr = new XMLHttpRequest();
|
|
||||||
if (xhr.upload) {
|
|
||||||
// start upload
|
|
||||||
var formData = new FormData();
|
|
||||||
for (var i = 0, file; file = files[i]; ++i)
|
|
||||||
formData.append(file.name, file);
|
|
||||||
xhr.onreadystatechange = stateChangeHandler;
|
|
||||||
xhr.open("POST", "command/upload");
|
|
||||||
// Bypass cache
|
|
||||||
xhr.setRequestHeader("Cache-Control", "no-cache");
|
|
||||||
xhr.send(formData);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function fileHandler(e) {
|
|
||||||
e.preventDefault();
|
|
||||||
$('upload_spinner').style.display = "block";
|
|
||||||
// fetch FileList object
|
|
||||||
var files = $('fileselect').files
|
|
||||||
// process all File objects
|
|
||||||
uploadFiles(files);
|
|
||||||
}
|
|
||||||
|
|
||||||
window.addEvent('load', function() {
|
|
||||||
// is XHR2 available?
|
|
||||||
var xhr = new XMLHttpRequest();
|
|
||||||
if (xhr.upload) {
|
|
||||||
$('uploadForm').addEvent('submit', fileHandler);
|
|
||||||
} else {
|
|
||||||
$('upload_frame').addEvent('load', function() { window.parent.closeWindows(); });
|
|
||||||
$('uploadForm').addEvent('submit', function() { $('upload_spinner').style.display = "block"; });
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<iframe id="upload_frame" name="upload_frame" class="invisible" src="javascript:false;"></iframe>
|
<iframe id="upload_frame" name="upload_frame" class="invisible" src="javascript:false;"></iframe>
|
||||||
<form action="command/upload" enctype="multipart/form-data" method="post" id="uploadForm" target="upload_frame" style="text-align: center;">
|
<form action="command/upload" enctype="multipart/form-data" method="post" id="uploadForm" style="text-align: center;" target="upload_frame">
|
||||||
<div style="margin-top: 25px; display: inline-block; border: 1px solid lightgrey; border-radius: 4px;">
|
<p>
|
||||||
<input type="file" id="fileselect" name="fileselect[]" multiple="multiple" />
|
<div style="margin-top: 25px; display: inline-block; border: 1px solid lightgrey; border-radius: 4px;">
|
||||||
|
<input type="file" id="fileselect" name="fileselect[]" multiple="multiple"/>
|
||||||
|
</div>
|
||||||
|
</p>
|
||||||
|
<fieldset class="settings" style="border: 0; text-align: left;">
|
||||||
|
<div class="formRow" style="margin-top: 12px;">
|
||||||
|
<label for="savepath" class="leftLabelLarge">QBT_TR(Save files to location:)QBT_TR</label>
|
||||||
|
<input type="text" id="savepath" name="savepath" style="width: 16em;"/>
|
||||||
</div>
|
</div>
|
||||||
<div id="submitbutton" style="margin-top: 30px;">
|
<div class="formRow">
|
||||||
|
<label for="label" class="leftLabelLarge">QBT_TR(Label:)QBT_TR</label>
|
||||||
|
<input type="text" id="label" name="label"/ style="width: 16em;"/>
|
||||||
|
</div>
|
||||||
|
<div id="submitbutton" style="margin-top: 30px; text-align: center;">
|
||||||
<button type="submit" style="font-size: 1em;">QBT_TR(Upload Torrents)QBT_TR</button>
|
<button type="submit" style="font-size: 1em;">QBT_TR(Upload Torrents)QBT_TR</button>
|
||||||
</div>
|
</div>
|
||||||
|
</fieldset>
|
||||||
</form>
|
</form>
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
var submitted = false;
|
||||||
|
|
||||||
|
$('uploadForm').addEventListener("submit", function() {
|
||||||
|
$('upload_spinner').style.display = "block";
|
||||||
|
submitted = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
$('upload_frame').addEventListener("load", function() {
|
||||||
|
if (submitted)
|
||||||
|
window.parent.closeWindows();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
<div id="upload_spinner" class="mochaSpinner"></div>
|
<div id="upload_spinner" class="mochaSpinner"></div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user