summaryrefslogtreecommitdiff
path: root/src/contacts-contact.vala
diff options
context:
space:
mode:
Diffstat (limited to 'src/contacts-contact.vala')
-rw-r--r--src/contacts-contact.vala34
1 files changed, 34 insertions, 0 deletions
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 = {};