aboutsummaryrefslogtreecommitdiffstats
path: root/libempathy/empathy-contact.c
diff options
context:
space:
mode:
authorGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>2010-04-02 22:21:23 +0800
committerGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>2010-04-06 23:59:10 +0800
commit3607fded92aa603e2f6135144e16b109bfb900f8 (patch)
tree739414a03cdc77cea3b3a237e83b6c9bf7f2ef66 /libempathy/empathy-contact.c
parent76a5a6e1be3b8dd36421d95affc6516ca057b4dc (diff)
downloadgsoc2013-empathy-3607fded92aa603e2f6135144e16b109bfb900f8.tar
gsoc2013-empathy-3607fded92aa603e2f6135144e16b109bfb900f8.tar.gz
gsoc2013-empathy-3607fded92aa603e2f6135144e16b109bfb900f8.tar.bz2
gsoc2013-empathy-3607fded92aa603e2f6135144e16b109bfb900f8.tar.lz
gsoc2013-empathy-3607fded92aa603e2f6135144e16b109bfb900f8.tar.xz
gsoc2013-empathy-3607fded92aa603e2f6135144e16b109bfb900f8.tar.zst
gsoc2013-empathy-3607fded92aa603e2f6135144e16b109bfb900f8.zip
Get location update from TpContact (#599162)
Diffstat (limited to 'libempathy/empathy-contact.c')
-rw-r--r--libempathy/empathy-contact.c23
1 files changed, 21 insertions, 2 deletions
diff --git a/libempathy/empathy-contact.c b/libempathy/empathy-contact.c
index e5c406a6a..94d83b89d 100644
--- a/libempathy/empathy-contact.c
+++ b/libempathy/empathy-contact.c
@@ -60,6 +60,9 @@ typedef struct {
/* Location is composed of string keys and GValues.
* Example: a "city" key would have "Helsinki" as string GValue,
* a "latitude" would have 65.0 as double GValue.
+ *
+ * This is a super set of the location stored in TpContact as we can try add
+ * more fields by searching the address using geoclue.
*/
GHashTable *location;
} EmpathyContactPriv;
@@ -72,6 +75,9 @@ static void contact_set_property (GObject *object, guint param_id,
static void update_geocode (EmpathyContact *contact);
+static void empathy_contact_set_location (EmpathyContact *contact,
+ GHashTable *location);
+
G_DEFINE_TYPE (EmpathyContact, empathy_contact, G_TYPE_OBJECT);
enum
@@ -122,6 +128,14 @@ tp_contact_notify_cb (TpContact *tp_contact,
g_object_notify (contact, "id");
else if (!tp_strdiff (param->name, "handle"))
g_object_notify (contact, "handle");
+ else if (!tp_strdiff (param->name, "location"))
+ {
+ GHashTable *location;
+
+ location = tp_contact_get_location (tp_contact);
+ /* This will start a geoclue search to find the address if needed */
+ empathy_contact_set_location (EMPATHY_CONTACT (contact), location);
+ }
}
static void
@@ -302,6 +316,7 @@ set_tp_contact (EmpathyContact *contact,
TpContact *tp_contact)
{
EmpathyContactPriv *priv = GET_PRIV (contact);
+ GHashTable *location;
if (tp_contact == NULL)
return;
@@ -310,6 +325,10 @@ set_tp_contact (EmpathyContact *contact,
priv->tp_contact = g_object_ref (tp_contact);
priv->presence = empathy_contact_get_presence (contact);
+ location = tp_contact_get_location (tp_contact);
+ if (location != NULL)
+ empathy_contact_set_location (contact, location);
+
g_signal_connect (priv->tp_contact, "notify",
G_CALLBACK (tp_contact_notify_cb), contact);
}
@@ -1128,9 +1147,9 @@ empathy_contact_get_location (EmpathyContact *contact)
* Example: a "city" key would have "Helsinki" as string GValue,
* a "latitude" would have 65.0 as double GValue.
*/
-void
+static void
empathy_contact_set_location (EmpathyContact *contact,
- GHashTable *location)
+ GHashTable *location)
{
EmpathyContactPriv *priv;