]> granicus.if.org Git - transmission/commitdiff
#1069: Unknown seeders and leechers count in `Peers' tab
authorCharles Kerr <charles@transmissionbt.com>
Wed, 2 Jul 2008 01:04:07 +0000 (01:04 +0000)
committerCharles Kerr <charles@transmissionbt.com>
Wed, 2 Jul 2008 01:04:07 +0000 (01:04 +0000)
gtk/details.c

index 7d6f1274abf8c5a89a92220d8404cf9a7d19d5b6..3ca1a408a89ecd327bece98630e94dfeb7a942c2 100644 (file)
@@ -456,6 +456,8 @@ static void
 refresh_peers (GtkWidget * top)
 {
   int i;
+  int seedCount = 0;
+  int leechCount = 0;
   int n_peers;
   GtkTreeIter iter;
   PeerData * p = (PeerData*) g_object_get_data (G_OBJECT(top), "peer-data");
@@ -490,6 +492,12 @@ refresh_peers (GtkWidget * top)
   n_peers = 0;
   peers = tr_torrentPeers (tor, &n_peers);
   qsort (peers, n_peers, sizeof(tr_peer_stat), compare_peers);
+  for( i=0; i<n_peers; ++i ) {
+    if( peers[i].progress >= 1.0 )
+      ++seedCount;
+    else
+      ++leechCount;
+  }
 
   i = 0;
   if (gtk_tree_model_get_iter_first (model, &iter)) do
@@ -525,8 +533,10 @@ refresh_peers (GtkWidget * top)
     refresh_pieces (p->completeness, NULL, p->gtor);
 #endif
 
-  fmtpeercount (p->seeders_lb, stat->seeders);
-  fmtpeercount (p->leechers_lb, stat->leechers);
+  /* use the tracker-supplied information if it's available;
+   * otherwise, use the counts of connected peers as a fallback */
+  fmtpeercount (p->seeders_lb, stat->seeders >= 0 ? stat->seeders : seedCount );
+  fmtpeercount (p->leechers_lb, stat->leechers >= 0 ? stat->leechers : leechCount );
   fmtpeercount (p->completed_lb, stat->timesCompleted );
 
   free( peers );