summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Alan Fitton <ajf@eth0.org.uk>2011-09-07 15:10:00 +0000
committerGravatar Alan Fitton <ajf@eth0.org.uk>2011-09-07 15:10:00 +0000
commitc5b0c941f310f2b90e9d23f5dc5d89f3167cd817 (patch)
tree78d6c4211327773f00682e17a69a5260a2eb6388 /src
parent13fb8f29b209e9b948375f6d7888fb8c637c2cd4 (diff)
issue 75 - show total number of seeders/leechers across trackers instead of sending/receiving peers. add new non-default columns for sending to us, receiving from us, and connected.
Diffstat (limited to 'src')
-rw-r--r--src/protocol-constants.h3
-rw-r--r--src/requests.c3
-rw-r--r--src/torrent.c15
-rw-r--r--src/torrent.h3
-rw-r--r--src/trg-torrent-model.c33
-rw-r--r--src/trg-torrent-model.h3
-rw-r--r--src/trg-torrent-tree-view.c9
7 files changed, 56 insertions, 13 deletions
diff --git a/src/protocol-constants.h b/src/protocol-constants.h
index a22e12d..01fd99e 100644
--- a/src/protocol-constants.h
+++ b/src/protocol-constants.h
@@ -74,6 +74,9 @@
#define FIELD_PEER_LIMIT "peer-limit"
#define FIELD_DOWNLOAD_DIR "downloadDir"
#define FIELD_FILE_DOWNLOAD_DIR "download-dir"
+#define FIELD_PEERS_SENDING_TO_US "peersSendingToUs"
+#define FIELD_PEERS_GETTING_FROM_US "peersGettingFromUs"
+#define FIELD_PEERS_CONNECTED "peersConnected"
#define FIELD_FILES_WANTED "files-wanted"
#define FIELD_FILES_UNWANTED "files-unwanted"
diff --git a/src/requests.c b/src/requests.c
index 7a38806..baefbc5 100644
--- a/src/requests.c
+++ b/src/requests.c
@@ -131,6 +131,9 @@ JsonNode *torrent_get(gint64 id)
json_array_add_string_element(fields, FIELD_PEERS);
json_array_add_string_element(fields, FIELD_PEERSFROM);
json_array_add_string_element(fields, FIELD_FILES);
+ json_array_add_string_element(fields, FIELD_PEERS_SENDING_TO_US);
+ json_array_add_string_element(fields, FIELD_PEERS_GETTING_FROM_US);
+ json_array_add_string_element(fields, FIELD_PEERS_CONNECTED);
json_array_add_string_element(fields, FIELD_HAVEVALID);
json_array_add_string_element(fields, FIELD_HAVEUNCHECKED);
json_array_add_string_element(fields, FIELD_RATEUPLOAD);
diff --git a/src/torrent.c b/src/torrent.c
index 98eb687..85b351b 100644
--- a/src/torrent.c
+++ b/src/torrent.c
@@ -370,6 +370,21 @@ JsonArray *torrent_get_files(JsonObject * args)
return json_object_get_array_member(args, FIELD_FILES);
}
+gint64 torrent_get_peers_connected(JsonObject *args)
+{
+ return json_object_get_int_member(args, FIELD_PEERS_CONNECTED);
+}
+
+gint64 torrent_get_peers_sending_to_us(JsonObject *args)
+{
+ return json_object_get_int_member(args, FIELD_PEERS_SENDING_TO_US);
+}
+
+gint64 torrent_get_peers_getting_from_us(JsonObject *args)
+{
+ return json_object_get_int_member(args, FIELD_PEERS_GETTING_FROM_US);
+}
+
/* tracker stats */
gint64 tracker_stats_get_id(JsonObject * t)
diff --git a/src/torrent.h b/src/torrent.h
index 44e15f5..fc3f752 100644
--- a/src/torrent.h
+++ b/src/torrent.h
@@ -64,6 +64,9 @@ JsonArray *torrent_get_wanted(JsonObject * t);
JsonArray *torrent_get_priorities(JsonObject * t);
gint64 torrent_get_id(JsonObject * t);
JsonArray *torrent_get_files(JsonObject * args);
+gint64 torrent_get_peers_getting_from_us(JsonObject *args);
+gint64 torrent_get_peers_sending_to_us(JsonObject *args);
+gint64 torrent_get_peers_connected(JsonObject *args);
gdouble torrent_get_percent_done(JsonObject * t);
gint64 torrent_get_left_until_done(JsonObject * t);
gboolean torrent_get_is_finished(JsonObject * t);
diff --git a/src/trg-torrent-model.c b/src/trg-torrent-model.c
index 735bda0..11852af 100644
--- a/src/trg-torrent-model.c
+++ b/src/trg-torrent-model.c
@@ -100,24 +100,19 @@ static void trg_torrent_model_count_peers(TrgTorrentModel * model,
GtkTreeIter * iter,
JsonObject * t)
{
- GList *peersList = json_array_get_elements(torrent_get_peers(t));
- gint seeders, leechers;
+ GList *trackersList = json_array_get_elements(torrent_get_tracker_stats(t));
+ gint seeders = 0;
+ gint leechers = 0;
GList *li;
- seeders = 0;
- leechers = 0;
+ for (li = trackersList; li; li = g_list_next(li)) {
+ JsonObject *tracker = json_node_get_object((JsonNode *) li->data);
- for (li = peersList; li; li = g_list_next(li)) {
- JsonObject *peer = json_node_get_object((JsonNode *) li->data);
-
- if (peer_get_is_downloading_from(peer))
- seeders++;
-
- if (peer_get_is_uploading_to(peer))
- leechers++;
+ seeders += tracker_stats_get_seeder_count(tracker);
+ leechers += tracker_stats_get_leecher_count(tracker);
}
- g_list_free(peersList);
+ g_list_free(trackersList);
gtk_list_store_set(GTK_LIST_STORE(model), iter,
TORRENT_COLUMN_SEEDS, seeders,
@@ -178,6 +173,9 @@ static void trg_torrent_model_init(TrgTorrentModel * self)
column_types[TORRENT_COLUMN_DONE_DATE] = G_TYPE_INT64;
column_types[TORRENT_COLUMN_FROMPEX] = G_TYPE_INT64;
column_types[TORRENT_COLUMN_FROMDHT] = G_TYPE_INT64;
+ column_types[TORRENT_COLUMN_PEERS_CONNECTED] = G_TYPE_INT64;
+ column_types[TORRENT_COLUMN_PEERS_FROM_US] = G_TYPE_INT64;
+ column_types[TORRENT_COLUMN_PEERS_TO_US] = G_TYPE_INT64;
gtk_list_store_set_column_types(GTK_LIST_STORE(self),
TORRENT_COLUMN_COLUMNS, column_types);
@@ -293,6 +291,12 @@ update_torrent_iter(TrgTorrentModel * model, gint64 rpcv, gint64 serial,
peerfrom_get_pex(pf), -1);
gtk_list_store_set(ls, iter, TORRENT_COLUMN_FROMDHT,
peerfrom_get_dht(pf), -1);
+ gtk_list_store_set(ls, iter, TORRENT_COLUMN_PEERS_CONNECTED,
+ torrent_get_peers_connected(t), -1);
+ gtk_list_store_set(ls, iter, TORRENT_COLUMN_PEERS_TO_US,
+ torrent_get_peers_sending_to_us(t), -1);
+ gtk_list_store_set(ls, iter, TORRENT_COLUMN_PEERS_FROM_US,
+ torrent_get_peers_getting_from_us(t), -1);
#else
gtk_list_store_set(ls, iter,
TORRENT_COLUMN_ICON, statusIcon,
@@ -311,6 +315,9 @@ update_torrent_iter(TrgTorrentModel * model, gint64 rpcv, gint64 serial,
TORRENT_COLUMN_DOWNLOADED, downloaded,
TORRENT_COLUMN_FROMPEX, peerfrom_get_pex(pf),
TORRENT_COLUMN_FROMDHT, peerfrom_get_dht(pf),
+ TORRENT_COLUMN_PEERS_CONNECTED, torrent_get_peers_connected(t),
+ TORRENT_COLUMN_PEERS_TO_US, torrent_get_peers_sending_to_us(t),
+ TORRENT_COLUMN_PEERS_FROM_US, torrent_get_peers_getting_from_us(t),
TORRENT_COLUMN_RATIO,
uploaded >
0
diff --git a/src/trg-torrent-model.h b/src/trg-torrent-model.h
index 9716a97..04096d3 100644
--- a/src/trg-torrent-model.h
+++ b/src/trg-torrent-model.h
@@ -85,6 +85,9 @@ enum {
TORRENT_COLUMN_STATUS,
TORRENT_COLUMN_SEEDS,
TORRENT_COLUMN_LEECHERS,
+ TORRENT_COLUMN_PEERS_CONNECTED,
+ TORRENT_COLUMN_PEERS_FROM_US,
+ TORRENT_COLUMN_PEERS_TO_US,
TORRENT_COLUMN_DOWNSPEED,
TORRENT_COLUMN_UPSPEED,
TORRENT_COLUMN_ETA,
diff --git a/src/trg-torrent-tree-view.c b/src/trg-torrent-tree-view.c
index 5cd07d1..f7ba44a 100644
--- a/src/trg-torrent-tree-view.c
+++ b/src/trg-torrent-tree-view.c
@@ -55,9 +55,18 @@ static void trg_torrent_tree_view_init(TrgTorrentTreeView * tttv)
trg_tree_view_reg_column(ttv, TRG_COLTYPE_NUMGTZERO, TORRENT_COLUMN_SEEDS,
_("Seeds"), "seeds", 0);
trg_tree_view_reg_column(ttv, TRG_COLTYPE_NUMGTZERO,
+ TORRENT_COLUMN_PEERS_TO_US, _("Sending"),
+ "sending", TRG_COLUMN_EXTRA);
+ trg_tree_view_reg_column(ttv, TRG_COLTYPE_NUMGTZERO,
TORRENT_COLUMN_LEECHERS, _("Leechers"),
"leechers", 0);
trg_tree_view_reg_column(ttv, TRG_COLTYPE_NUMGTZERO,
+ TORRENT_COLUMN_PEERS_FROM_US, _("Receiving"),
+ "connected-leechers", TRG_COLUMN_EXTRA);
+ trg_tree_view_reg_column(ttv, TRG_COLTYPE_NUMGTZERO,
+ TORRENT_COLUMN_PEERS_CONNECTED, _("Connected"),
+ "connected-peers", 0);
+ trg_tree_view_reg_column(ttv, TRG_COLTYPE_NUMGTZERO,
TORRENT_COLUMN_FROMPEX, _("PEX Peers"),
"from-pex", TRG_COLUMN_EXTRA);
trg_tree_view_reg_column(ttv, TRG_COLTYPE_NUMGTZERO,