summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonas Danielsson <jonas@threetimestwo.org>2014-12-16 05:32:17 -0500
committerJonas Danielsson <jonas@threetimestwo.org>2014-12-16 07:09:00 -0500
commit697be63f782847ce1dd7381ecec398293d1a636b (patch)
tree965bd2531cb7ede38a0729e8e8a15e0decf25deb
parent511df2cf5be14826f626618f33b2de0e3f4ca85a (diff)
downloadgnome-contacts-697be63f782847ce1dd7381ecec398293d1a636b.tar.gz
contacts-contact: Add method to geocode a contact
https://bugzilla.gnome.org/show_bug.cgi?id=658553
-rw-r--r--configure.ac3
-rw-r--r--src/contacts-contact.vala34
2 files changed, 36 insertions, 1 deletions
diff --git a/configure.ac b/configure.ac
index a7702fa..7ad72f6 100644
--- a/configure.ac
+++ b/configure.ac
@@ -50,10 +50,11 @@ pkg_modules="gtk+-3.0 >= 3.12.0
libedataserver-1.2 >= 3.5.3
goa-1.0
gee-0.8
+ geocode-glib-1.0
"
PKG_CHECK_MODULES(CONTACTS, [$pkg_modules])
-CONTACTS_PACKAGES="--pkg gtk+-3.0 --pkg gio-2.0 --pkg gio-unix-2.0 --pkg folks --pkg folks-telepathy --pkg folks-eds --pkg libnotify"
+CONTACTS_PACKAGES="--pkg gtk+-3.0 --pkg gio-2.0 --pkg gio-unix-2.0 --pkg folks --pkg folks-telepathy --pkg folks-eds --pkg libnotify --pkg geocode-glib-1.0"
AC_SUBST(CONTACTS_PACKAGES)
# Optional dependency for the user accounts panel
diff --git a/src/contacts-contact.vala b/src/contacts-contact.vala
index b3c14da..4078a75 100644
--- a/src/contacts-contact.vala
+++ b/src/contacts-contact.vala
@@ -20,6 +20,7 @@ using Gtk;
using Folks;
using Gee;
using TelepathyGLib;
+using Geocode;
public errordomain ContactError {
NOT_IMPLEMENTED,
@@ -672,6 +673,39 @@ public class Contacts.Contact : GLib.Object {
return res;
}
+ public static async Place geocode_address (PostalAddress addr) {
+ SourceFunc callback = geocode_address.callback;
+ var params = new HashTable<string, GLib.Value?>(str_hash, str_equal);
+
+ if (is_set (addr.street))
+ params.insert("street", addr.street);
+
+ if (is_set (addr.locality))
+ params.insert("locality", addr.locality);
+
+ if (is_set (addr.region))
+ params.insert("region", addr.region);
+
+ if (is_set (addr.country))
+ params.insert("country", addr.country);
+
+ Place? place = null;
+ var forward = new Forward.for_params (params);
+ forward.search_async.begin (null, (object, res) => {
+ try {
+ var places = forward.search_async.end (res);
+
+ place = places.nth_data (0);
+ callback ();
+ } catch (GLib.Error e) {
+ debug ("No geocode result found for contact");
+ callback ();
+ }
+ });
+ yield;
+ return place;
+ }
+
public static string[] format_address (PostalAddress addr) {
string[] lines = {};