From c5b0c941f310f2b90e9d23f5dc5d89f3167cd817 Mon Sep 17 00:00:00 2001 From: Alan Fitton Date: Wed, 7 Sep 2011 15:10:00 +0000 Subject: 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. --- src/protocol-constants.h | 3 +++ src/requests.c | 3 +++ src/torrent.c | 15 +++++++++++++++ src/torrent.h | 3 +++ src/trg-torrent-model.c | 33 ++++++++++++++++++++------------- src/trg-torrent-model.h | 3 +++ src/trg-torrent-tree-view.c | 9 +++++++++ 7 files changed, 56 insertions(+), 13 deletions(-) (limited to 'src') 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 @@ -54,9 +54,18 @@ static void trg_torrent_tree_view_init(TrgTorrentTreeView * tttv) _("Status"), "status", 0); 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); -- cgit v1.2.3