diff --git a/src/webui/api/torrentscontroller.cpp b/src/webui/api/torrentscontroller.cpp index 26dd06829..12ddcddfb 100644 --- a/src/webui/api/torrentscontroller.cpp +++ b/src/webui/api/torrentscontroller.cpp @@ -737,9 +737,16 @@ void TorrentsController::setLocationAction() const QStringList hashes {params()["hashes"].split("|")}; const QString newLocation {params()["location"].trimmed()}; - // check if the location exists - if (newLocation.isEmpty() || !QDir(newLocation).exists()) - return; + if (newLocation.isEmpty()) + throw APIError(APIErrorType::BadParams, tr("Save path is empty")); + + // try to create the location if it does not exist + if (!QDir(newLocation).mkpath(".")) + throw APIError(APIErrorType::Conflict, tr("Cannot make save path")); + + // check permissions + if (!QFileInfo(newLocation).isWritable()) + throw APIError(APIErrorType::AccessDenied, tr("Cannot write to directory")); applyToTorrents(hashes, [newLocation](BitTorrent::TorrentHandle *torrent) { diff --git a/src/webui/www/private/scripts/mocha-init.js b/src/webui/www/private/scripts/mocha-init.js index 0d464d67c..76cd50f6f 100644 --- a/src/webui/www/private/scripts/mocha-init.js +++ b/src/webui/www/private/scripts/mocha-init.js @@ -417,7 +417,7 @@ initializeWindows = function() { paddingVertical: 0, paddingHorizontal: 0, width: 400, - height: 100 + height: 130 }); } }; diff --git a/src/webui/www/private/setlocation.html b/src/webui/www/private/setlocation.html index ab1a72bac..a933407f1 100644 --- a/src/webui/www/private/setlocation.html +++ b/src/webui/www/private/setlocation.html @@ -31,8 +31,10 @@ new Event(e).stop(); // check field var location = $('setLocation').value.trim(); - if (location === null || location === "") + if (location === null || location === "") { + $('error_div').set('text', 'QBT_TR(Save path is empty)QBT_TR[CONTEXT=TorrentsController]'); return false; + } var hashesList = new URI().getData('hashes'); new Request({ @@ -42,8 +44,11 @@ hashes: hashesList, location: location }, - onComplete: function() { + onSuccess: function() { window.parent.closeWindows(); + }, + onFailure: function(xhr) { + $('error_div').set('text', xhr.response); } }).send(); }); @@ -55,6 +60,7 @@
QBT_TR(Location)QBT_TR[CONTEXT=TransferListWidget]:
+