mirror of
https://github.com/qbittorrent/qBittorrent.git
synced 2026-01-01 21:28:07 -06:00
Revise 'Add trackers' dialog
* Now it allow user to add tracker to different tier. * The downloaded trackers are now displayed as is (without modifying). * Now the dialog remember dialog size and last used URL. Closes #17692.
This commit is contained in:
@@ -540,6 +540,7 @@ void TorrentImpl::addTrackers(QVector<TrackerEntry> trackers)
|
||||
m_trackerEntries.append(trackers);
|
||||
std::sort(m_trackerEntries.begin(), m_trackerEntries.end()
|
||||
, [](const TrackerEntry &lhs, const TrackerEntry &rhs) { return lhs.tier < rhs.tier; });
|
||||
|
||||
m_session->handleTorrentNeedSaveResumeData(this);
|
||||
m_session->handleTorrentTrackersAdded(this, trackers);
|
||||
}
|
||||
@@ -561,6 +562,7 @@ void TorrentImpl::removeTrackers(const QStringList &trackers)
|
||||
if (!removedTrackers.isEmpty())
|
||||
{
|
||||
m_nativeHandle.replace_trackers(nativeTrackers);
|
||||
|
||||
m_session->handleTorrentNeedSaveResumeData(this);
|
||||
m_session->handleTorrentTrackersRemoved(this, removedTrackers);
|
||||
}
|
||||
@@ -579,12 +581,13 @@ void TorrentImpl::replaceTrackers(QVector<TrackerEntry> trackers)
|
||||
nativeTrackers.emplace_back(makeNativeAnnounceEntry(tracker.url, tracker.tier));
|
||||
|
||||
m_nativeHandle.replace_trackers(nativeTrackers);
|
||||
m_trackerEntries = trackers;
|
||||
|
||||
// Clear the peer list if it's a private torrent since
|
||||
// we do not want to keep connecting with peers from old tracker.
|
||||
if (isPrivate())
|
||||
clearPeers();
|
||||
|
||||
m_trackerEntries = trackers;
|
||||
m_session->handleTorrentNeedSaveResumeData(this);
|
||||
m_session->handleTorrentTrackersChanged(this);
|
||||
}
|
||||
|
||||
@@ -28,6 +28,34 @@
|
||||
|
||||
#include "trackerentry.h"
|
||||
|
||||
#include <QList>
|
||||
#include <QVector>
|
||||
|
||||
QVector<BitTorrent::TrackerEntry> BitTorrent::parseTrackerEntries(const QStringView str)
|
||||
{
|
||||
const QList<QStringView> trackers = str.split(u'\n'); // keep the empty parts to track tracker tier
|
||||
|
||||
QVector<BitTorrent::TrackerEntry> entries;
|
||||
entries.reserve(trackers.size());
|
||||
|
||||
int trackerTier = 0;
|
||||
for (QStringView tracker : trackers)
|
||||
{
|
||||
tracker = tracker.trimmed();
|
||||
|
||||
if (tracker.isEmpty())
|
||||
{
|
||||
if (trackerTier < std::numeric_limits<decltype(trackerTier)>::max()) // prevent overflow
|
||||
++trackerTier;
|
||||
continue;
|
||||
}
|
||||
|
||||
entries.append({tracker.toString(), trackerTier});
|
||||
}
|
||||
|
||||
return entries;
|
||||
}
|
||||
|
||||
bool BitTorrent::operator==(const TrackerEntry &left, const TrackerEntry &right)
|
||||
{
|
||||
return (left.url == right.url);
|
||||
|
||||
@@ -30,10 +30,12 @@
|
||||
|
||||
#include <libtorrent/socket.hpp>
|
||||
|
||||
#include <QtContainerFwd>
|
||||
#include <QtGlobal>
|
||||
#include <QHash>
|
||||
#include <QMap>
|
||||
#include <QString>
|
||||
#include <QStringView>
|
||||
|
||||
namespace BitTorrent
|
||||
{
|
||||
@@ -74,6 +76,8 @@ namespace BitTorrent
|
||||
QString message {};
|
||||
};
|
||||
|
||||
QVector<TrackerEntry> parseTrackerEntries(QStringView str);
|
||||
|
||||
bool operator==(const TrackerEntry &left, const TrackerEntry &right);
|
||||
#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
|
||||
std::size_t qHash(const TrackerEntry &key, std::size_t seed = 0);
|
||||
|
||||
Reference in New Issue
Block a user