Browse Source

Merge pull request #7571 from Chocobo1/webui_download

[WebAPI] Add parameters for /command/download & /command/upload
adaptive-webui-19844
Mike Tzou 7 years ago committed by GitHub
parent
commit
bd07cb91bb
  1. 2
      src/base/bittorrent/addtorrentparams.h
  2. 2
      src/base/bittorrent/session.cpp
  3. 4
      src/base/bittorrent/torrenthandle.cpp
  4. 2
      src/base/bittorrent/torrenthandle.h
  5. 9
      src/webui/extra_translations.h
  6. 20
      src/webui/webapplication.cpp
  7. 21
      src/webui/www/public/download.html
  8. 22
      src/webui/www/public/upload.html

2
src/base/bittorrent/addtorrentparams.h

@ -52,5 +52,7 @@ namespace BitTorrent @@ -52,5 +52,7 @@ namespace BitTorrent
bool skipChecking = false;
TriStateBool createSubfolder;
TriStateBool useAutoTMM;
int uploadLimit = -1;
int downloadLimit = -1;
};
}

2
src/base/bittorrent/session.cpp

@ -2193,6 +2193,8 @@ bool Session::addTorrent_impl(AddTorrentData addData, const MagnetUri &magnetUri @@ -2193,6 +2193,8 @@ bool Session::addTorrent_impl(AddTorrentData addData, const MagnetUri &magnetUri
p.max_connections = maxConnectionsPerTorrent();
p.max_uploads = maxUploadsPerTorrent();
p.save_path = Utils::Fs::toNativePath(savePath).toStdString();
p.upload_limit = addData.uploadLimit;
p.download_limit = addData.downloadLimit;
m_addingTorrents.insert(hash, addData);
// Adding torrent to BitTorrent session

4
src/base/bittorrent/torrenthandle.cpp

@ -95,6 +95,8 @@ AddTorrentData::AddTorrentData() @@ -95,6 +95,8 @@ AddTorrentData::AddTorrentData()
, hasRootFolder(true)
, addForced(false)
, addPaused(false)
, uploadLimit(-1)
, downloadLimit(-1)
, ratioLimit(TorrentHandle::USE_GLOBAL_RATIO)
, seedingTimeLimit(TorrentHandle::USE_GLOBAL_SEEDING_TIME)
{
@ -118,6 +120,8 @@ AddTorrentData::AddTorrentData(const AddTorrentParams &params) @@ -118,6 +120,8 @@ AddTorrentData::AddTorrentData(const AddTorrentParams &params)
, addPaused(params.addPaused == TriStateBool::Undefined
? Session::instance()->isAddTorrentPaused()
: params.addPaused == TriStateBool::True)
, uploadLimit(params.uploadLimit)
, downloadLimit(params.downloadLimit)
, filePriorities(params.filePriorities)
, ratioLimit(params.ignoreShareLimits ? TorrentHandle::NO_RATIO_LIMIT : TorrentHandle::USE_GLOBAL_RATIO)
, seedingTimeLimit(params.ignoreShareLimits ? TorrentHandle::NO_SEEDING_TIME_LIMIT : TorrentHandle::USE_GLOBAL_SEEDING_TIME)

2
src/base/bittorrent/torrenthandle.h

@ -104,6 +104,8 @@ namespace BitTorrent @@ -104,6 +104,8 @@ namespace BitTorrent
bool hasRootFolder;
bool addForced;
bool addPaused;
int uploadLimit;
int downloadLimit;
// for new torrents
QVector<int> filePriorities;
// for resumed torrents

9
src/webui/extra_translations.h

@ -73,9 +73,12 @@ static const char *__TRANSLATIONS__[] = { @@ -73,9 +73,12 @@ static const char *__TRANSLATIONS__[] = {
QT_TRANSLATE_NOOP("HttpServer", "Invalid category name:\nPlease do not use any special characters in the category name."),
QT_TRANSLATE_NOOP("HttpServer", "Unknown"),
QT_TRANSLATE_NOOP("HttpServer", "Hard Disk"),
QT_TRANSLATE_NOOP("HttpServer", "Share ratio limit must be between 0 and 9998.")
QT_TRANSLATE_NOOP("HttpServer", "Seeding time limit must be between 0 and 525600 minutes.")
QT_TRANSLATE_NOOP("HttpServer", "Set location")
QT_TRANSLATE_NOOP("HttpServer", "Share ratio limit must be between 0 and 9998."),
QT_TRANSLATE_NOOP("HttpServer", "Seeding time limit must be between 0 and 525600 minutes."),
QT_TRANSLATE_NOOP("HttpServer", "Set location"),
QT_TRANSLATE_NOOP("HttpServer", "Limit upload rate"),
QT_TRANSLATE_NOOP("HttpServer", "Limit download rate"),
QT_TRANSLATE_NOOP("HttpServer", "Rename torrent")
};
static const struct { const char *source; const char *comment; } __COMMENTED_TRANSLATIONS__[] = {

20
src/webui/webapplication.cpp

@ -414,11 +414,16 @@ void WebApplication::action_command_download() @@ -414,11 +414,16 @@ void WebApplication::action_command_download()
const QString urls = request().posts.value("urls");
const bool skipChecking = parseBool(request().posts.value("skip_checking"), false);
const bool seqDownload = parseBool(request().posts.value("sequentialDownload"), false);
const bool firstLastPiece = parseBool(request().posts.value("firstLastPiecePrio"), false);
const TriStateBool addPaused = parseTristatebool(request().posts.value("paused"));
const TriStateBool rootFolder = parseTristatebool(request().posts.value("root_folder"));
const QString savepath = request().posts.value("savepath").trimmed();
const QString category = request().posts.value("category").trimmed();
const QString cookie = request().posts.value("cookie");
const QString torrentName = request().posts.value("rename").trimmed();
const int upLimit = request().posts.value("upLimit").toInt();
const int dlLimit = request().posts.value("dlLimit").toInt();
QList<QNetworkCookie> cookies;
if (!cookie.isEmpty()) {
@ -437,10 +442,15 @@ void WebApplication::action_command_download() @@ -437,10 +442,15 @@ void WebApplication::action_command_download()
BitTorrent::AddTorrentParams params;
// TODO: Check if destination actually exists
params.skipChecking = skipChecking;
params.sequential = seqDownload;
params.firstLastPiecePriority = firstLastPiece;
params.addPaused = addPaused;
params.createSubfolder = rootFolder;
params.savePath = savepath;
params.category = category;
params.name = torrentName;
params.uploadLimit = (upLimit > 0) ? upLimit : -1;
params.downloadLimit = (dlLimit > 0) ? dlLimit : -1;
bool partialSuccess = false;
for (QString url : urls.split('\n')) {
@ -462,10 +472,15 @@ void WebApplication::action_command_upload() @@ -462,10 +472,15 @@ void WebApplication::action_command_upload()
CHECK_URI(0);
const bool skipChecking = parseBool(request().posts.value("skip_checking"), false);
const bool seqDownload = parseBool(request().posts.value("sequentialDownload"), false);
const bool firstLastPiece = parseBool(request().posts.value("firstLastPiecePrio"), false);
const TriStateBool addPaused = parseTristatebool(request().posts.value("paused"));
const TriStateBool rootFolder = parseTristatebool(request().posts.value("root_folder"));
const QString savepath = request().posts.value("savepath").trimmed();
const QString category = request().posts.value("category").trimmed();
const QString torrentName = request().posts.value("rename").trimmed();
const int upLimit = request().posts.value("upLimit").toInt();
const int dlLimit = request().posts.value("dlLimit").toInt();
for (const Http::UploadedFile &torrent : request().files) {
const QString filePath = saveTmpFile(torrent.data);
@ -485,10 +500,15 @@ void WebApplication::action_command_upload() @@ -485,10 +500,15 @@ void WebApplication::action_command_upload()
BitTorrent::AddTorrentParams params;
// TODO: Check if destination actually exists
params.skipChecking = skipChecking;
params.sequential = seqDownload;
params.firstLastPiecePriority = firstLastPiece;
params.addPaused = addPaused;
params.createSubfolder = rootFolder;
params.savePath = savepath;
params.category = category;
params.name = torrentName;
params.uploadLimit = (upLimit > 0) ? upLimit : -1;
params.downloadLimit = (dlLimit > 0) ? dlLimit : -1;
if (!BitTorrent::Session::instance()->addTorrent(torrentInfo, params)) {
status(500, "Internal Server Error");

21
src/webui/www/public/download.html

@ -25,6 +25,10 @@ @@ -25,6 +25,10 @@
<label for="cookie" class="leftLabelLarge">QBT_TR(Cookie:)QBT_TR[CONTEXT=HttpServer]</label>
<input type="text" id="cookie" name="cookie" style="width: 16em;"/>
</div>
<div class="formRow">
<label for="rename" class="leftLabelLarge">QBT_TR(Rename torrent)QBT_TR[CONTEXT=HttpServer]</label>
<input type="text" name="rename" style="width: 16em;"/>
</div>
<div class="formRow">
<label for="category" class="leftLabelLarge">QBT_TR(Category:)QBT_TR[CONTEXT=AddNewTorrentDialog]</label>
<input type="text" id="category" name="category" style="width: 16em;"/>
@ -42,6 +46,23 @@ @@ -42,6 +46,23 @@
<label for="root_folder" class="leftLabelLarge">QBT_TR(Create subfolder)QBT_TR[CONTEXT=AddNewTorrentDialog]</label>
<input type="checkbox" name="root_folder" value="true" checked="checked"/>
</div>
</div>
<div class="formRow">
<label for="sequentialDownload" class="leftLabelLarge">QBT_TR(Download in sequential order)QBT_TR[CONTEXT=TransferListWidget]</label>
<input type="checkbox" name="sequentialDownload" value="true"/>
</div>
<div class="formRow">
<label for="firstLastPiecePrio" class="leftLabelLarge">QBT_TR(Download first and last pieces first)QBT_TR[CONTEXT=TransferListWidget]</label>
<input type="checkbox" name="firstLastPiecePrio" value="true"/>
</div>
<div class="formRow">
<label for="dlLimit" class="leftLabelLarge">QBT_TR(Limit download rate)QBT_TR[CONTEXT=HttpServer]</label>
<input type="text" name="dlLimit" style="width: 16em;" placeholder="Bytes/s"/>
</div>
<div class="formRow">
<label for="upLimit" class="leftLabelLarge">QBT_TR(Limit upload rate)QBT_TR[CONTEXT=HttpServer]</label>
<input type="text" name="upLimit" style="width: 16em;" placeholder="Bytes/s"/>
</div>
<div id="submitbutton" style="margin-top: 12px; text-align: center;">
<button type="submit" id="submitButton">QBT_TR(Download)QBT_TR[CONTEXT=downloadFromURL]</button>
</div>

22
src/webui/www/public/upload.html

@ -21,9 +21,13 @@ @@ -21,9 +21,13 @@
<label for="savepath" class="leftLabelLarge">QBT_TR(Save files to location:)QBT_TR[CONTEXT=HttpServer]</label>
<input type="text" id="savepath" name="savepath" style="width: 16em;"/>
</div>
<div class="formRow">
<label for="rename" class="leftLabelLarge">QBT_TR(Rename torrent)QBT_TR[CONTEXT=HttpServer]</label>
<input type="text" name="rename" style="width: 16em;"/>
</div>
<div class="formRow">
<label for="category" class="leftLabelLarge">QBT_TR(Category:)QBT_TR[CONTEXT=AddNewTorrentDialog]</label>
<input type="text" id="category" name="category"/ style="width: 16em;"/>
<input type="text" id="category" name="category" style="width: 16em;"/>
</div>
<div class="formRow">
<label for="start_torrent" class="leftLabelLarge">QBT_TR(Start torrent)QBT_TR[CONTEXT=AddNewTorrentDialog]</label>
@ -38,6 +42,22 @@ @@ -38,6 +42,22 @@
<label for="root_folder" class="leftLabelLarge">QBT_TR(Create subfolder)QBT_TR[CONTEXT=AddNewTorrentDialog]</label>
<input type="checkbox" name="root_folder" value="true" checked="checked"/>
</div>
<div class="formRow">
<label for="sequentialDownload" class="leftLabelLarge">QBT_TR(Download in sequential order)QBT_TR[CONTEXT=TransferListWidget]</label>
<input type="checkbox" name="sequentialDownload" value="true"/>
</div>
<div class="formRow">
<label for="firstLastPiecePrio" class="leftLabelLarge">QBT_TR(Download first and last pieces first)QBT_TR[CONTEXT=TransferListWidget]</label>
<input type="checkbox" name="firstLastPiecePrio" value="true"/>
</div>
<div class="formRow">
<label for="dlLimit" class="leftLabelLarge">QBT_TR(Limit download rate)QBT_TR[CONTEXT=HttpServer]</label>
<input type="text" name="dlLimit" style="width: 16em;" placeholder="Bytes/s"/>
</div>
<div class="formRow">
<label for="upLimit" class="leftLabelLarge">QBT_TR(Limit upload rate)QBT_TR[CONTEXT=HttpServer]</label>
<input type="text" name="upLimit" style="width: 16em;" placeholder="Bytes/s"/>
</div>
<div id="submitbutton" style="margin-top: 30px; text-align: center;">
<button type="submit" style="font-size: 1em;">QBT_TR(Upload Torrents)QBT_TR[CONTEXT=HttpServer]</button>
</div>

Loading…
Cancel
Save