summaryrefslogtreecommitdiff
path: root/src/trg-peers-model.c
diff options
context:
space:
mode:
authorGravatar Alan Fitton <ajf@eth0.org.uk>2011-09-20 20:20:29 +0000
committerGravatar Alan Fitton <ajf@eth0.org.uk>2011-09-20 20:20:29 +0000
commit134e52f88ae48ba186ac813d6763aed22d8da4b6 (patch)
tree23a9df9e9384e43cf3e0a28f179fdbbdd11a8ebc /src/trg-peers-model.c
parent8cfc6187fdcfbc32e37aec8326451af2ae7eb893 (diff)
issue 120
Diffstat (limited to 'src/trg-peers-model.c')
-rw-r--r--src/trg-peers-model.c108
1 files changed, 45 insertions, 63 deletions
diff --git a/src/trg-peers-model.c b/src/trg-peers-model.c
index c9a64e1..2b75ecb 100644
--- a/src/trg-peers-model.c
+++ b/src/trg-peers-model.c
@@ -30,6 +30,7 @@
#include <GeoIP.h>
#endif
+#include "trg-tree-view.h"
#include "torrent.h"
#include "trg-client.h"
#include "tpeer.h"
@@ -48,19 +49,14 @@ struct _TrgPeersModelPrivate {
};
#endif
-static void
-trg_peers_model_class_init(TrgPeersModelClass * klass G_GNUC_UNUSED)
-{
+static void trg_peers_model_class_init(TrgPeersModelClass * klass G_GNUC_UNUSED) {
#ifdef HAVE_GEOIP
g_type_class_add_private(klass, sizeof(TrgPeersModelPrivate));
#endif
}
-gboolean
-find_existing_peer_item_foreachfunc(GtkTreeModel * model,
- GtkTreePath * path G_GNUC_UNUSED,
- GtkTreeIter * iter, gpointer data)
-{
+gboolean find_existing_peer_item_foreachfunc(GtkTreeModel * model,
+ GtkTreePath * path G_GNUC_UNUSED, GtkTreeIter * iter, gpointer data) {
struct peerAndIter *pi = (struct peerAndIter *) data;
gchar *ip;
@@ -73,16 +69,14 @@ find_existing_peer_item_foreachfunc(GtkTreeModel * model,
return pi->found;
}
-gboolean
-find_existing_peer_item(TrgPeersModel * model, JsonObject * p,
- GtkTreeIter * iter)
-{
+gboolean find_existing_peer_item(TrgPeersModel * model, JsonObject * p,
+ GtkTreeIter * iter) {
struct peerAndIter pi;
pi.ip = peer_get_address(p);
pi.found = FALSE;
gtk_tree_model_foreach(GTK_TREE_MODEL(model),
- find_existing_peer_item_foreachfunc, &pi);
+ find_existing_peer_item_foreachfunc, &pi);
if (pi.found == TRUE)
*iter = pi.iter;
@@ -90,9 +84,8 @@ find_existing_peer_item(TrgPeersModel * model, JsonObject * p,
return pi.found;
}
-static void resolved_dns_cb(GObject * source_object,
- GAsyncResult * res, gpointer data)
-{
+static void resolved_dns_cb(GObject * source_object, GAsyncResult * res,
+ gpointer data) {
GtkTreeRowReference *treeRef;
GtkTreeModel *model;
GtkTreePath *path;
@@ -102,15 +95,14 @@ static void resolved_dns_cb(GObject * source_object,
path = gtk_tree_row_reference_get_path(treeRef);
if (path != NULL) {
- gchar *rdns =
- g_resolver_lookup_by_address_finish(G_RESOLVER(source_object),
- res, NULL);
+ gchar *rdns = g_resolver_lookup_by_address_finish(
+ G_RESOLVER(source_object), res, NULL);
if (rdns != NULL) {
GtkTreeIter iter;
if (gtk_tree_model_get_iter(model, &iter, path) == TRUE) {
gdk_threads_enter();
- gtk_list_store_set(GTK_LIST_STORE(model),
- &iter, PEERSCOL_HOST, rdns, -1);
+ gtk_list_store_set(GTK_LIST_STORE(model), &iter, PEERSCOL_HOST,
+ rdns, -1);
gdk_threads_leave();
}
g_free(rdns);
@@ -121,13 +113,14 @@ static void resolved_dns_cb(GObject * source_object,
gtk_tree_row_reference_free(treeRef);
}
-void trg_peers_model_update(TrgPeersModel * model, gint64 updateSerial,
- JsonObject * t, gint mode)
-{
+void trg_peers_model_update(TrgPeersModel * model, TrgTreeView *tv,
+ gint64 updateSerial, JsonObject * t, gint mode) {
#ifdef HAVE_GEOIP
TrgPeersModelPrivate *priv = TRG_PEERS_MODEL_GET_PRIVATE(model);
+ gboolean doGeoLookup = trg_tree_view_is_column_showing(tv, PEERSCOL_COUNTRY);
#endif
+ gboolean doHostLookup = trg_tree_view_is_column_showing(tv, PEERSCOL_HOST);
JsonArray *peers;
GtkTreeIter peerIter;
GList *li, *peersList;
@@ -146,23 +139,21 @@ void trg_peers_model_update(TrgPeersModel * model, gint64 updateSerial,
const gchar *country = NULL;
#endif
- if (mode == TORRENT_GET_MODE_FIRST
- || find_existing_peer_item(model, peer, &peerIter) == FALSE) {
+ if (mode == TORRENT_GET_MODE_FIRST || find_existing_peer_item(model,
+ peer, &peerIter) == FALSE) {
gtk_list_store_append(GTK_LIST_STORE(model), &peerIter);
address = peer_get_address(peer);
#ifdef HAVE_GEOIP
- if (priv->geoip)
+ if (priv->geoip && doGeoLookup)
country = GeoIP_country_name_by_addr(priv->geoip, address);
#endif
- gtk_list_store_set(GTK_LIST_STORE(model), &peerIter,
- PEERSCOL_ICON, GTK_STOCK_NETWORK,
- PEERSCOL_IP, address,
+ gtk_list_store_set(GTK_LIST_STORE(model), &peerIter, PEERSCOL_ICON,
+ GTK_STOCK_NETWORK, PEERSCOL_IP, address,
#ifdef HAVE_GEOIP
- PEERSCOL_COUNTRY, country ? country : "",
+ PEERSCOL_COUNTRY, country ? country : "",
#endif
- PEERSCOL_CLIENT, peer_get_client_name(peer),
- -1);
+ PEERSCOL_CLIENT, peer_get_client_name(peer), -1);
isNew = TRUE;
} else {
@@ -170,21 +161,17 @@ void trg_peers_model_update(TrgPeersModel * model, gint64 updateSerial,
}
flagStr = peer_get_flagstr(peer);
- gtk_list_store_set(GTK_LIST_STORE(model), &peerIter,
- PEERSCOL_FLAGS, flagStr,
- PEERSCOL_PROGRESS,
- peer_get_progress(peer),
- PEERSCOL_DOWNSPEED,
- peer_get_rate_to_client(peer),
- PEERSCOL_UPSPEED,
- peer_get_rate_to_peer(peer),
- PEERSCOL_UPDATESERIAL, updateSerial, -1);
-
- if (isNew == TRUE) {
- GtkTreePath *path =
- gtk_tree_model_get_path(GTK_TREE_MODEL(model), &peerIter);
- GtkTreeRowReference *treeRef =
- gtk_tree_row_reference_new(GTK_TREE_MODEL(model), path);
+ gtk_list_store_set(GTK_LIST_STORE(model), &peerIter, PEERSCOL_FLAGS,
+ flagStr, PEERSCOL_PROGRESS, peer_get_progress(peer),
+ PEERSCOL_DOWNSPEED, peer_get_rate_to_client(peer),
+ PEERSCOL_UPSPEED, peer_get_rate_to_peer(peer),
+ PEERSCOL_UPDATESERIAL, updateSerial, -1);
+
+ if (doHostLookup && isNew == TRUE) {
+ GtkTreePath *path = gtk_tree_model_get_path(GTK_TREE_MODEL(model),
+ &peerIter);
+ GtkTreeRowReference *treeRef = gtk_tree_row_reference_new(
+ GTK_TREE_MODEL(model), path);
GInetAddress *inetAddr;
GResolver *resolver;
@@ -192,9 +179,8 @@ void trg_peers_model_update(TrgPeersModel * model, gint64 updateSerial,
inetAddr = g_inet_address_new_from_string(address);
resolver = g_resolver_get_default();
- g_resolver_lookup_by_address_async(resolver,
- inetAddr, NULL,
- resolved_dns_cb, treeRef);
+ g_resolver_lookup_by_address_async(resolver, inetAddr, NULL,
+ resolved_dns_cb, treeRef);
g_object_unref(resolver);
g_object_unref(inetAddr);
}
@@ -203,12 +189,11 @@ void trg_peers_model_update(TrgPeersModel * model, gint64 updateSerial,
g_list_free(peersList);
if (mode != TORRENT_GET_MODE_FIRST)
- trg_model_remove_removed(GTK_LIST_STORE(model),
- PEERSCOL_UPDATESERIAL, updateSerial);
+ trg_model_remove_removed(GTK_LIST_STORE(model), PEERSCOL_UPDATESERIAL,
+ updateSerial);
}
-static void trg_peers_model_init(TrgPeersModel * self)
-{
+static void trg_peers_model_init(TrgPeersModel * self) {
#ifdef HAVE_GEOIP
TrgPeersModelPrivate *priv = TRG_PEERS_MODEL_GET_PRIVATE(self);
#endif
@@ -228,19 +213,16 @@ static void trg_peers_model_init(TrgPeersModel * self)
column_types[PEERSCOL_CLIENT] = G_TYPE_STRING;
column_types[PEERSCOL_UPDATESERIAL] = G_TYPE_INT64;
- gtk_list_store_set_column_types(GTK_LIST_STORE(self),
- PEERSCOL_COLUMNS, column_types);
+ gtk_list_store_set_column_types(GTK_LIST_STORE(self), PEERSCOL_COLUMNS,
+ column_types);
#ifdef HAVE_GEOIP
if (g_file_test(TRG_GEOIP_DATABASE, G_FILE_TEST_EXISTS) == TRUE)
- priv->geoip =
- GeoIP_open(TRG_GEOIP_DATABASE,
- GEOIP_STANDARD | GEOIP_CHECK_CACHE);
+ priv->geoip = GeoIP_open(TRG_GEOIP_DATABASE,
+ GEOIP_STANDARD | GEOIP_CHECK_CACHE);
#endif
}
-
-TrgPeersModel *trg_peers_model_new()
-{
+TrgPeersModel *trg_peers_model_new() {
return g_object_new(TRG_TYPE_PEERS_MODEL, NULL);
}