summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Alan F <ajf@eth0.org.uk>2014-02-03 14:06:16 +0000
committerGravatar Alan F <ajf@eth0.org.uk>2014-02-03 14:06:16 +0000
commitb06b8290bef019462a45f36de6f10abfe8b13c6d (patch)
tree1ecedacea6ec3bc90a2c9ba50ba853e5486c8057 /src
parentb598a43dfe3123c3cec1022e59558b09ffe4dac5 (diff)
hide the country and city columns if the databases have not been opened (probably because the file doesn't exist).
Diffstat (limited to 'src')
-rw-r--r--src/trg-peers-model.c24
-rw-r--r--src/trg-peers-model.h5
-rw-r--r--src/trg-peers-tree-view.c18
3 files changed, 40 insertions, 7 deletions
diff --git a/src/trg-peers-model.c b/src/trg-peers-model.c
index d64c74d..0137c9d 100644
--- a/src/trg-peers-model.c
+++ b/src/trg-peers-model.c
@@ -336,8 +336,21 @@ static gboolean trg_peers_model_add_city_foreach(GtkTreeModel *model,
return FALSE;
}
+#if HAVE_GEOIP
+gboolean trg_peers_model_has_city_db(TrgPeersModel *model) {
+ TrgPeersModelPrivate *priv = TRG_PEERS_MODEL_GET_PRIVATE(model);
+ return priv->geoipcity != NULL;
+}
+
+gboolean trg_peers_model_has_country_db(TrgPeersModel *model) {
+ TrgPeersModelPrivate *priv = TRG_PEERS_MODEL_GET_PRIVATE(model);
+ return priv->geoip != NULL;
+}
+
void trg_peers_model_add_city_column(TrgPeersModel *model) {
- gtk_tree_model_foreach(GTK_TREE_MODEL(model), trg_peers_model_add_city_foreach, NULL);
+ TrgPeersModelPrivate *priv = TRG_PEERS_MODEL_GET_PRIVATE(model);
+ if (priv->geoipcity)
+ gtk_tree_model_foreach(GTK_TREE_MODEL(model), trg_peers_model_add_city_foreach, NULL);
}
static gboolean trg_peers_model_add_country_foreach(GtkTreeModel *model,
@@ -345,15 +358,22 @@ static gboolean trg_peers_model_add_country_foreach(GtkTreeModel *model,
GtkTreeIter *iter,
gpointer data) {
gchar *address = NULL;
+
gtk_tree_model_get(GTK_TREE_MODEL(model), iter, PEERSCOL_IP, &address, -1);
gtk_list_store_set(GTK_LIST_STORE(model), iter, PEERSCOL_COUNTRY, lookup_country(TRG_PEERS_MODEL(model), address), -1);
+
g_free(address);
+
return FALSE;
}
void trg_peers_model_add_country_column(TrgPeersModel *model) {
- gtk_tree_model_foreach(GTK_TREE_MODEL(model), trg_peers_model_add_country_foreach, NULL);
+ TrgPeersModelPrivate *priv = TRG_PEERS_MODEL_GET_PRIVATE(model);
+ if (priv->geoip)
+ gtk_tree_model_foreach(GTK_TREE_MODEL(model), trg_peers_model_add_country_foreach, NULL);
}
+#endif
+
TrgPeersModel *trg_peers_model_new()
{
diff --git a/src/trg-peers-model.h b/src/trg-peers-model.h
index e080cc1..22d4efe 100644
--- a/src/trg-peers-model.h
+++ b/src/trg-peers-model.h
@@ -84,8 +84,13 @@ enum {
void trg_peers_model_update(TrgPeersModel * model, TrgTreeView * tv,
gint64 updateSerial, JsonObject * t,
gboolean first);
+
+#if HAVE_GEOIP
void trg_peers_model_add_city_column(TrgPeersModel *model);
void trg_peers_model_add_country_column(TrgPeersModel *model);
+gboolean trg_peers_model_has_city_db(TrgPeersModel *model);
+gboolean trg_peers_model_has_country_db(TrgPeersModel *model);
+#endif
#endif /* TRG_PEERS_MODEL_H_ */
diff --git a/src/trg-peers-tree-view.c b/src/trg-peers-tree-view.c
index 7ed5645..9385d32 100644
--- a/src/trg-peers-tree-view.c
+++ b/src/trg-peers-tree-view.c
@@ -40,7 +40,11 @@ trg_peers_tree_view_class_init(TrgPeersTreeViewClass * klass G_GNUC_UNUSED)
{
}
-static void trg_peers_tree_view_init(TrgPeersTreeView * self)
+static void trg_peers_tree_view_init(TrgPeersTreeView * self) {
+
+}
+
+static void trg_peers_tree_view_setup_columns(TrgPeersTreeView * self, TrgPeersModel *model)
{
TrgTreeView *ttv = TRG_TREE_VIEW(self);
trg_column_description *desc;
@@ -54,11 +58,13 @@ static void trg_peers_tree_view_init(TrgPeersTreeView * self)
_("Host"), "host", 0);
#ifdef HAVE_GEOIP
- trg_tree_view_reg_column(ttv, TRG_COLTYPE_TEXT, PEERSCOL_COUNTRY,
- _("Country"), "country", 0);
- trg_tree_view_reg_column(ttv, TRG_COLTYPE_TEXT, PEERSCOL_CITY,
- _("City"), "city", 0);
+ if (trg_peers_model_has_country_db(model))
+ trg_tree_view_reg_column(ttv, TRG_COLTYPE_TEXT, PEERSCOL_COUNTRY,
+ _("Country"), "country", 0);
+ if (trg_peers_model_has_city_db(model))
+ trg_tree_view_reg_column(ttv, TRG_COLTYPE_TEXT, PEERSCOL_CITY,
+ _("City"), "city", 0);
#endif
trg_tree_view_reg_column(ttv, TRG_COLTYPE_SPEED, PEERSCOL_DOWNSPEED,
_("Down Speed"), "down-speed", 0);
@@ -91,6 +97,8 @@ TrgPeersTreeView *trg_peers_tree_view_new(TrgPrefs * prefs,
"config-id", configId,
"prefs", prefs, NULL);
+ trg_peers_tree_view_setup_columns(TRG_PEERS_TREE_VIEW(obj), model);
+
gtk_tree_view_set_model(GTK_TREE_VIEW(obj), GTK_TREE_MODEL(model));
trg_tree_view_restore_sort(TRG_TREE_VIEW(obj), 0x00);
trg_tree_view_setup_columns(TRG_TREE_VIEW(obj));