diff options
author | Pierre-Luc Beaudoin <pierre-luc.beaudoin@collabora.co.uk> | 2009-07-03 02:25:48 +0800 |
---|---|---|
committer | Pierre-Luc Beaudoin <pierre-luc.beaudoin@collabora.co.uk> | 2009-08-06 21:58:18 +0800 |
commit | 713fb600634add0e0abe35489402e5ed8d5fde10 (patch) | |
tree | 352a16e114fe6901d9fc93936818054f3ff6d61b /libempathy-gtk/empathy-location-manager.c | |
parent | 52a4fda0785b6e49be175221350c8f90d7982527 (diff) | |
download | gsoc2013-empathy-713fb600634add0e0abe35489402e5ed8d5fde10.tar gsoc2013-empathy-713fb600634add0e0abe35489402e5ed8d5fde10.tar.gz gsoc2013-empathy-713fb600634add0e0abe35489402e5ed8d5fde10.tar.bz2 gsoc2013-empathy-713fb600634add0e0abe35489402e5ed8d5fde10.tar.lz gsoc2013-empathy-713fb600634add0e0abe35489402e5ed8d5fde10.tar.xz gsoc2013-empathy-713fb600634add0e0abe35489402e5ed8d5fde10.tar.zst gsoc2013-empathy-713fb600634add0e0abe35489402e5ed8d5fde10.zip |
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
Diffstat (limited to 'libempathy-gtk/empathy-location-manager.c')
-rw-r--r-- | libempathy-gtk/empathy-location-manager.c | 36 |
1 files changed, 18 insertions, 18 deletions
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 <math.h> #include <string.h> #include <time.h> @@ -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; |