diff options
Diffstat (limited to 'src/contacts-contact.vala')
-rw-r--r-- | src/contacts-contact.vala | 34 |
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 = {}; |