From 713fb600634add0e0abe35489402e5ed8d5fde10 Mon Sep 17 00:00:00 2001 From: Pierre-Luc Beaudoin Date: Thu, 2 Jul 2009 14:25:48 -0400 Subject: Fix reduced accuracy concerns As pointed out by users, the previous reduced accuracy mode was not the best. It is better to trunkate the coordinates rather than adding a random value to it. This patch also replaces strcmp by tp_strdiff --- libempathy-gtk/empathy-location-manager.c | 36 +++++++++++++++---------------- 1 file changed, 18 insertions(+), 18 deletions(-) (limited to 'libempathy-gtk/empathy-location-manager.c') diff --git a/libempathy-gtk/empathy-location-manager.c b/libempathy-gtk/empathy-location-manager.c index 278af72f2..087ce5644 100644 --- a/libempathy-gtk/empathy-location-manager.c +++ b/libempathy-gtk/empathy-location-manager.c @@ -21,6 +21,10 @@ #include "config.h" +/* Needed for trunc */ +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#include #include #include @@ -63,7 +67,6 @@ typedef struct { GeoclueAddress *gc_address; gboolean reduce_accuracy; - gdouble reduce_value; EmpathyAccountManager *account_manager; /* The idle id for publish_on_idle func */ @@ -312,7 +315,8 @@ address_changed_cb (GeoclueAddress *address, { GValue *new_value; /* Discard street information if reduced accuracy is on */ - if (priv->reduce_accuracy && strcmp (key, EMPATHY_LOCATION_STREET) == 0) + if (priv->reduce_accuracy && + !tp_strdiff (key, EMPATHY_LOCATION_STREET)) continue; new_value = tp_g_value_slice_new_string (value); @@ -368,7 +372,11 @@ position_changed_cb (GeocluePosition *position, if (fields & GEOCLUE_POSITION_FIELDS_LONGITUDE) { - longitude += priv->reduce_value; + + if (priv->reduce_accuracy) + /* Truncate at 1 decimal place */ + longitude = trunc (longitude * 10.0) / 10.0; + new_value = tp_g_value_slice_new_double (longitude); g_hash_table_insert (priv->location, g_strdup (EMPATHY_LOCATION_LON), new_value); @@ -381,7 +389,10 @@ position_changed_cb (GeocluePosition *position, if (fields & GEOCLUE_POSITION_FIELDS_LATITUDE) { - latitude += priv->reduce_value; + if (priv->reduce_accuracy) + /* Truncate at 1 decimal place */ + latitude = trunc (latitude * 10.0) / 10.0; + new_value = tp_g_value_slice_new_double (latitude); g_hash_table_replace (priv->location, g_strdup (EMPATHY_LOCATION_LAT), new_value); @@ -577,11 +588,11 @@ resource_cb (EmpathyConf *conf, if (!empathy_conf_get_bool (conf, key, &resource_enabled)) return; - if (strcmp (key, EMPATHY_PREFS_LOCATION_RESOURCE_NETWORK) == 0) + if (tp_strdiff (key, EMPATHY_PREFS_LOCATION_RESOURCE_NETWORK) == FALSE) resource = GEOCLUE_RESOURCE_NETWORK; - if (strcmp (key, EMPATHY_PREFS_LOCATION_RESOURCE_CELL) == 0) + if (tp_strdiff (key, EMPATHY_PREFS_LOCATION_RESOURCE_CELL) == FALSE) resource = GEOCLUE_RESOURCE_CELL; - if (strcmp (key, EMPATHY_PREFS_LOCATION_RESOURCE_GPS) == 0) + if (tp_strdiff (key, EMPATHY_PREFS_LOCATION_RESOURCE_GPS) == FALSE) resource = GEOCLUE_RESOURCE_GPS; if (resource_enabled) @@ -609,17 +620,6 @@ accuracy_cb (EmpathyConf *conf, return; priv->reduce_accuracy = enabled; - if (enabled) - { - GRand *rand = g_rand_new_with_seed (time (NULL)); - priv->reduce_value = g_rand_double_range (rand, -0.25, 0.25); - g_rand_free (rand); - } - else - { - priv->reduce_value = 0.0; - } - if (!priv->geoclue_is_setup) return; -- cgit v1.2.3