summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/trg-main-window.c2
-rw-r--r--src/trg-peers-model.c108
-rw-r--r--src/trg-peers-model.h4
-rw-r--r--src/trg-tree-view.c19
-rw-r--r--src/trg-tree-view.h1
5 files changed, 69 insertions, 65 deletions
diff --git a/src/trg-main-window.c b/src/trg-main-window.c
index 58d3725..db68ea3 100644
--- a/src/trg-main-window.c
+++ b/src/trg-main-window.c
@@ -242,7 +242,7 @@ static void update_selected_torrent_notebook(TrgMainWindow * win, gint mode,
trg_client_get_serial(client), t, mode);
trg_files_model_update(priv->filesModel, trg_client_get_serial(client),
t, mode);
- trg_peers_model_update(priv->peersModel, trg_client_get_serial(client),
+ trg_peers_model_update(priv->peersModel, TRG_TREE_VIEW(priv->peersTreeView), trg_client_get_serial(client),
t, mode);
} else if (id < 0) {
trg_main_window_torrent_scrub(win);
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);
}
diff --git a/src/trg-peers-model.h b/src/trg-peers-model.h
index 95dcce2..6a4a83c 100644
--- a/src/trg-peers-model.h
+++ b/src/trg-peers-model.h
@@ -32,6 +32,8 @@
#endif
#include <glib-object.h>
+#include "trg-tree-view.h"
+
G_BEGIN_DECLS
#define TRG_TYPE_PEERS_MODEL trg_peers_model_get_type()
#define TRG_PEERS_MODEL(obj) \
@@ -78,7 +80,7 @@ enum {
PEERSCOL_COLUMNS
};
-void trg_peers_model_update(TrgPeersModel * model, gint64 updateSerial,
+void trg_peers_model_update(TrgPeersModel * model, TrgTreeView *tv, gint64 updateSerial,
JsonObject * t, gboolean first);
#endif /* TRG_PEERS_MODEL_H_ */
diff --git a/src/trg-tree-view.c b/src/trg-tree-view.c
index 175f294..0ad4024 100644
--- a/src/trg-tree-view.c
+++ b/src/trg-tree-view.c
@@ -48,6 +48,25 @@ struct _TrgTreeViewPrivate {
TrgPrefs *prefs;
};
+gboolean trg_tree_view_is_column_showing(TrgTreeView *tv, gint index)
+{
+ TrgTreeViewPrivate *priv = TRG_TREE_VIEW_GET_PRIVATE(tv);
+
+ GList *li;
+ for (li = priv->columns; li; li = g_list_next(li))
+ {
+ trg_column_description *cd = (trg_column_description*)li->data;
+ if (cd->model_column == index) {
+ if (cd->flags & TRG_COLUMN_SHOWING)
+ return TRUE;
+ else
+ break;
+ }
+ }
+
+ return FALSE;
+}
+
static void
trg_tree_view_get_property(GObject * object, guint property_id,
GValue * value, GParamSpec * pspec)
diff --git a/src/trg-tree-view.h b/src/trg-tree-view.h
index 7a512dd..ac9bb52 100644
--- a/src/trg-tree-view.h
+++ b/src/trg-tree-view.h
@@ -91,5 +91,6 @@ void trg_tree_view_setup_columns(TrgTreeView * tv);
void trg_tree_view_set_prefs(TrgTreeView *tv, TrgPrefs *prefs);
void trg_tree_view_persist(TrgTreeView * tv);
void trg_tree_view_restore_sort(TrgTreeView * tv);
+gboolean trg_tree_view_is_column_showing(TrgTreeView *tv, gint index);
#endif /* _TRG_TREE_VIEW_H_ */