WebAPI: Added endpoints, next_announce and min_announce to tracker list

This commit is contained in:
tehcneko 2025-07-31 13:07:21 +01:00
commit 79fc62c184

View file

@ -67,14 +67,19 @@
// Tracker keys // Tracker keys
const QString KEY_TRACKER_URL = u"url"_s; const QString KEY_TRACKER_URL = u"url"_s;
const QString KEY_TRACKER_NAME = u"name"_s;
const QString KEY_TRACKER_UPDATING = u"updating"_s; const QString KEY_TRACKER_UPDATING = u"updating"_s;
const QString KEY_TRACKER_STATUS = u"status"_s; const QString KEY_TRACKER_STATUS = u"status"_s;
const QString KEY_TRACKER_TIER = u"tier"_s; const QString KEY_TRACKER_TIER = u"tier"_s;
const QString KEY_TRACKER_MSG = u"msg"_s; const QString KEY_TRACKER_MSG = u"msg"_s;
const QString KEY_TRACKER_BT_VERSION = u"bt_version"_s;
const QString KEY_TRACKER_PEERS_COUNT = u"num_peers"_s; const QString KEY_TRACKER_PEERS_COUNT = u"num_peers"_s;
const QString KEY_TRACKER_SEEDS_COUNT = u"num_seeds"_s; const QString KEY_TRACKER_SEEDS_COUNT = u"num_seeds"_s;
const QString KEY_TRACKER_LEECHES_COUNT = u"num_leeches"_s; const QString KEY_TRACKER_LEECHES_COUNT = u"num_leeches"_s;
const QString KEY_TRACKER_DOWNLOADED_COUNT = u"num_downloaded"_s; const QString KEY_TRACKER_DOWNLOADED_COUNT = u"num_downloaded"_s;
const QString KEY_TRACKER_NEXT_ANNOUNCE = u"next_announce"_s;
const QString KEY_TRACKER_MIN_ANNOUNCE = u"min_announce"_s;
const QString KEY_TRACKER_ENDPOINTS = u"endpoints"_s;
// Web seed keys // Web seed keys
const QString KEY_WEBSEED_URL = u"url"_s; const QString KEY_WEBSEED_URL = u"url"_s;
@ -269,24 +274,49 @@ namespace
QJsonArray getTrackers(const BitTorrent::Torrent *const torrent) QJsonArray getTrackers(const BitTorrent::Torrent *const torrent)
{ {
auto now = BitTorrent::AnnounceTimePoint::clock::now();
QJsonArray trackerList; QJsonArray trackerList;
for (const BitTorrent::TrackerEntryStatus &tracker : asConst(torrent->trackers())) for (const BitTorrent::TrackerEntryStatus &tracker : asConst(torrent->trackers()))
{ {
const bool isNotWorking = (tracker.state == BitTorrent::TrackerEndpointState::NotWorking) QJsonArray endpointsList;
|| (tracker.state == BitTorrent::TrackerEndpointState::TrackerError)
|| (tracker.state == BitTorrent::TrackerEndpointState::Unreachable); for (const BitTorrent::TrackerEndpointStatus &endpoint : tracker.endpoints)
{
endpointsList << QJsonObject
{
{KEY_TRACKER_NAME, endpoint.name},
{KEY_TRACKER_UPDATING, endpoint.isUpdating},
{KEY_TRACKER_STATUS, static_cast<int>(endpoint.state)},
{KEY_TRACKER_MSG, endpoint.message},
{KEY_TRACKER_BT_VERSION, static_cast<int>(endpoint.btVersion)},
{KEY_TRACKER_PEERS_COUNT, endpoint.numPeers},
{KEY_TRACKER_SEEDS_COUNT, endpoint.numSeeds},
{KEY_TRACKER_LEECHES_COUNT, endpoint.numLeeches},
{KEY_TRACKER_DOWNLOADED_COUNT, endpoint.numDownloaded},
{KEY_TRACKER_NEXT_ANNOUNCE, std::max<qint64>(0,
std::chrono::duration_cast<std::chrono::seconds>(endpoint.nextAnnounceTime - now).count())},
{KEY_TRACKER_MIN_ANNOUNCE, std::max<qint64>(0,
std::chrono::duration_cast<std::chrono::seconds>(endpoint.minAnnounceTime - now).count())}
};
}
trackerList << QJsonObject trackerList << QJsonObject
{ {
{KEY_TRACKER_URL, tracker.url}, {KEY_TRACKER_URL, tracker.url},
{KEY_TRACKER_TIER, tracker.tier}, {KEY_TRACKER_TIER, tracker.tier},
{KEY_TRACKER_UPDATING, tracker.isUpdating}, {KEY_TRACKER_UPDATING, tracker.isUpdating},
{KEY_TRACKER_STATUS, static_cast<int>((isNotWorking ? BitTorrent::TrackerEndpointState::NotWorking : tracker.state))}, {KEY_TRACKER_STATUS, static_cast<int>(tracker.state)},
{KEY_TRACKER_MSG, tracker.message}, {KEY_TRACKER_MSG, tracker.message},
{KEY_TRACKER_PEERS_COUNT, tracker.numPeers}, {KEY_TRACKER_PEERS_COUNT, tracker.numPeers},
{KEY_TRACKER_SEEDS_COUNT, tracker.numSeeds}, {KEY_TRACKER_SEEDS_COUNT, tracker.numSeeds},
{KEY_TRACKER_LEECHES_COUNT, tracker.numLeeches}, {KEY_TRACKER_LEECHES_COUNT, tracker.numLeeches},
{KEY_TRACKER_DOWNLOADED_COUNT, tracker.numDownloaded} {KEY_TRACKER_DOWNLOADED_COUNT, tracker.numDownloaded},
{KEY_TRACKER_NEXT_ANNOUNCE, std::max<qint64>(0,
std::chrono::duration_cast<std::chrono::seconds>(tracker.nextAnnounceTime - now).count())},
{KEY_TRACKER_MIN_ANNOUNCE, std::max<qint64>(0,
std::chrono::duration_cast<std::chrono::seconds>(tracker.minAnnounceTime - now).count())},
{KEY_TRACKER_ENDPOINTS, endpointsList}
}; };
} }