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
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_STATUS = u"status"_s;
const QString KEY_TRACKER_TIER = u"tier"_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_SEEDS_COUNT = u"num_seeds"_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_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
const QString KEY_WEBSEED_URL = u"url"_s;
@ -269,24 +274,49 @@ namespace
QJsonArray getTrackers(const BitTorrent::Torrent *const torrent)
{
auto now = BitTorrent::AnnounceTimePoint::clock::now();
QJsonArray trackerList;
for (const BitTorrent::TrackerEntryStatus &tracker : asConst(torrent->trackers()))
{
const bool isNotWorking = (tracker.state == BitTorrent::TrackerEndpointState::NotWorking)
|| (tracker.state == BitTorrent::TrackerEndpointState::TrackerError)
|| (tracker.state == BitTorrent::TrackerEndpointState::Unreachable);
QJsonArray endpointsList;
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
{
{KEY_TRACKER_URL, tracker.url},
{KEY_TRACKER_TIER, tracker.tier},
{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_PEERS_COUNT, tracker.numPeers},
{KEY_TRACKER_SEEDS_COUNT, tracker.numSeeds},
{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}
};
}