From 0c9ecd1d7628011e9cd16eb99230cb9f88cd150b Mon Sep 17 00:00:00 2001 From: "Vladimir Golovnev (Glassez)" Date: Fri, 12 Mar 2021 16:03:51 +0300 Subject: [PATCH] Properly show tracker status for "paused" torrents --- src/base/bittorrent/torrentimpl.cpp | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/src/base/bittorrent/torrentimpl.cpp b/src/base/bittorrent/torrentimpl.cpp index eaf9cd415..bd8ec4e7a 100644 --- a/src/base/bittorrent/torrentimpl.cpp +++ b/src/base/bittorrent/torrentimpl.cpp @@ -118,7 +118,7 @@ namespace int numUpdating = 0; int numWorking = 0; - int numNotContacted = 0; + int numNotWorking = 0; #if (LIBTORRENT_VERSION_NUM >= 20000) const int numEndpoints = nativeEntry.endpoints.size() * ((hashes.has_v1() && hashes.has_v2()) ? 2 : 1); trackerEntry.endpoints.reserve(numEndpoints); @@ -143,6 +143,7 @@ namespace else if (infoHash.fails > 0) { trackerEndpoint.status = TrackerEntry::NotWorking; + ++numNotWorking; } else if (nativeEntry.verified) { @@ -152,7 +153,6 @@ namespace else { trackerEndpoint.status = TrackerEntry::NotContacted; - ++numNotContacted; } trackerEntry.endpoints.append(trackerEndpoint); @@ -163,7 +163,8 @@ namespace } } #else - trackerEntry.endpoints.reserve(nativeEntry.endpoints.size()); + const int numEndpoints = nativeEntry.endpoints.size(); + trackerEntry.endpoints.reserve(numEndpoints); for (const lt::announce_endpoint &endpoint : nativeEntry.endpoints) { TrackerEntry::EndpointStats trackerEndpoint; @@ -178,6 +179,7 @@ namespace else if (endpoint.fails > 0) { trackerEndpoint.status = TrackerEntry::NotWorking; + ++numNotWorking; } else if (nativeEntry.verified) { @@ -187,7 +189,6 @@ namespace else { trackerEndpoint.status = TrackerEntry::NotContacted; - ++numNotContacted; } trackerEntry.endpoints.append(trackerEndpoint); @@ -197,14 +198,15 @@ namespace } #endif - if (numUpdating > 0) - trackerEntry.status = TrackerEntry::Updating; - else if (numWorking > 0) - trackerEntry.status = TrackerEntry::Working; - else if (numNotContacted > 0) - trackerEntry.status = TrackerEntry::NotContacted; - else - trackerEntry.status = TrackerEntry::NotWorking; + if (numEndpoints > 0) + { + if (numUpdating > 0) + trackerEntry.status = TrackerEntry::Updating; + else if (numWorking > 0) + trackerEntry.status = TrackerEntry::Working; + else if (numNotWorking == numEndpoints) + trackerEntry.status = TrackerEntry::NotWorking; + } return trackerEntry; }