mirror of
https://github.com/qbittorrent/qBittorrent
synced 2025-08-21 05:43:32 -07:00
Merge dfcb16a7fd
into b7a43ea118
This commit is contained in:
commit
3b87217b7a
4 changed files with 39 additions and 7 deletions
|
@ -1,5 +1,10 @@
|
|||
# WebAPI Changelog
|
||||
|
||||
## 2.11.10
|
||||
|
||||
* [#22963](https://github.com/qbittorrent/qBittorrent/pull/22963)
|
||||
* `torrents/editTracker` endpoint now supports setting a tracker's tier via `tier` parameter
|
||||
|
||||
## 2.11.9
|
||||
|
||||
* [#21015](https://github.com/qbittorrent/qBittorrent/pull/21015)
|
||||
|
|
|
@ -1130,6 +1130,8 @@ void TorrentsController::editTrackerAction()
|
|||
const auto id = BitTorrent::TorrentID::fromString(params()[u"hash"_s]);
|
||||
const QString origUrl = params()[u"origUrl"_s];
|
||||
const QString newUrl = params()[u"newUrl"_s];
|
||||
// min tier is 0, so -1 indicates to keep tier unchanged
|
||||
const int newTier = parseInt(params()[u"tier"_s]).value_or(-1);
|
||||
|
||||
BitTorrent::Torrent *const torrent = BitTorrent::Session::instance()->getTorrent(id);
|
||||
if (!torrent)
|
||||
|
@ -1137,10 +1139,14 @@ void TorrentsController::editTrackerAction()
|
|||
|
||||
const QUrl origTrackerUrl {origUrl};
|
||||
const QUrl newTrackerUrl {newUrl};
|
||||
if (origTrackerUrl == newTrackerUrl)
|
||||
const bool isTrackerUrlChanged = origTrackerUrl != newTrackerUrl;
|
||||
const bool isNewTierSpecified = newTier >= 0;
|
||||
if (!isTrackerUrlChanged && !isNewTierSpecified)
|
||||
return;
|
||||
if (!newTrackerUrl.isValid())
|
||||
throw APIError(APIErrorType::BadParams, u"New tracker URL is invalid"_s);
|
||||
if ((newTier < -1) || (newTier > 255))
|
||||
throw APIError(APIErrorType::BadParams, u"New tier must be between 0 and 255"_s);
|
||||
|
||||
const QList<BitTorrent::TrackerEntryStatus> currentTrackers = torrent->trackers();
|
||||
QList<BitTorrent::TrackerEntry> entries;
|
||||
|
@ -1151,7 +1157,7 @@ void TorrentsController::editTrackerAction()
|
|||
{
|
||||
const QUrl trackerUrl {tracker.url};
|
||||
|
||||
if (trackerUrl == newTrackerUrl)
|
||||
if (isTrackerUrlChanged && (trackerUrl == newTrackerUrl))
|
||||
throw APIError(APIErrorType::Conflict, u"New tracker URL already exists"_s);
|
||||
|
||||
BitTorrent::TrackerEntry entry
|
||||
|
@ -1162,8 +1168,14 @@ void TorrentsController::editTrackerAction()
|
|||
|
||||
if (trackerUrl == origTrackerUrl)
|
||||
{
|
||||
const bool isTrackerTierChanged = tracker.tier != newTier;
|
||||
if (!isTrackerUrlChanged && !isTrackerTierChanged)
|
||||
return;
|
||||
|
||||
match = true;
|
||||
entry.url = newTrackerUrl.toString();
|
||||
if (isNewTierSpecified)
|
||||
entry.tier = newTier;
|
||||
}
|
||||
entries.append(entry);
|
||||
}
|
||||
|
|
|
@ -26,9 +26,11 @@
|
|||
|
||||
const searchParams = new URLSearchParams(window.location.search);
|
||||
const currentUrl = searchParams.get("url");
|
||||
if (currentUrl === null)
|
||||
const currentTier = searchParams.get("tier");
|
||||
if ((currentUrl === null) || (currentTier === null))
|
||||
return;
|
||||
|
||||
document.getElementById("trackerTier").value = currentTier;
|
||||
document.getElementById("trackerUrl").value = currentUrl;
|
||||
document.getElementById("trackerUrl").focus();
|
||||
|
||||
|
@ -41,7 +43,8 @@
|
|||
body: new URLSearchParams({
|
||||
hash: searchParams.get("hash"),
|
||||
origUrl: currentUrl,
|
||||
newUrl: document.getElementById("trackerUrl").value
|
||||
newUrl: document.getElementById("trackerUrl").value,
|
||||
tier: document.getElementById("trackerTier").value
|
||||
})
|
||||
})
|
||||
.then((response) => {
|
||||
|
@ -63,6 +66,11 @@
|
|||
<input type="text" id="trackerUrl" style="width: 90%;">
|
||||
</div>
|
||||
<br>
|
||||
<label for="trackerTier">QBT_TR(Tier:)QBT_TR[CONTEXT=TrackerListWidget]</label>
|
||||
<div style="text-align: center; padding-top: 10px;">
|
||||
<input type="number" id="trackerTier" style="width: 90%; max-width: 100px;" min="0" max="255">
|
||||
</div>
|
||||
<br>
|
||||
<input type="button" value="QBT_TR(Edit)QBT_TR[CONTEXT=HttpServer]" id="editTrackerButton">
|
||||
</div>
|
||||
</body>
|
||||
|
|
|
@ -209,13 +209,20 @@ window.qBittorrent.PropTrackers ??= (() => {
|
|||
if (current_hash.length === 0)
|
||||
return;
|
||||
|
||||
const trackerUrl = encodeURIComponent(torrentTrackersTable.selectedRowsIds()[0]);
|
||||
const tracker = torrentTrackersTable.getRow(torrentTrackersTable.getSelectedRowId());
|
||||
const contentURL = new URL("edittracker.html", window.location);
|
||||
contentURL.search = new URLSearchParams({
|
||||
hash: current_hash,
|
||||
url: tracker.full_data.url,
|
||||
tier: tracker.full_data.tier
|
||||
});
|
||||
|
||||
new MochaUI.Window({
|
||||
id: "trackersPage",
|
||||
icon: "images/qbittorrent-tray.svg",
|
||||
title: "QBT_TR(Tracker editing)QBT_TR[CONTEXT=TrackerListWidget]",
|
||||
loadMethod: "iframe",
|
||||
contentURL: `edittracker.html?hash=${current_hash}&url=${trackerUrl}`,
|
||||
contentURL: contentURL.toString(),
|
||||
scrollbars: true,
|
||||
resizable: false,
|
||||
maximizable: false,
|
||||
|
@ -223,7 +230,7 @@ window.qBittorrent.PropTrackers ??= (() => {
|
|||
paddingVertical: 0,
|
||||
paddingHorizontal: 0,
|
||||
width: 500,
|
||||
height: 150,
|
||||
height: 200,
|
||||
onCloseComplete: () => {
|
||||
updateData();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue