X-Git-Url: http://git.maemo.org/git/?p=theonering;a=blobdiff_plain;f=src%2Flocation.py;h=32b582340723edabe8c811469952b7c66a136f72;hp=54f6d8608c1a058c44ffd216180f61842ef1397c;hb=8894c48314aa35230635af3f4ae8814234ae3fa1;hpb=613ba869ba587b74ec66c0dfd0e30978ddd11cf7 diff --git a/src/location.py b/src/location.py index 54f6d86..32b5823 100644 --- a/src/location.py +++ b/src/location.py @@ -1,11 +1,19 @@ +import logging + import telepathy +import util.misc as misc_utils +import handle + + +_moduleLogger = logging.getLogger(__name__) + -#class LocationMixin(telepathy.server.ConnectionInterfaceLocation): +#class LocationMixin(tp.ConnectionInterfaceLocation): class LocationMixin(object): def __init__(self): - #telepathy.server.ConnectionInterfaceLocation.__init__(self) + #tp.ConnectionInterfaceLocation.__init__(self) pass @property @@ -13,22 +21,50 @@ class LocationMixin(object): """ @abstract """ - raise NotImplementedError() + raise NotImplementedError("Abstract property called") + @misc_utils.log_exception(_moduleLogger) def GetLocations(self, contacts): """ @returns {Contact: {Location Type: Location}} """ - raise NotImplementedError() + contactLocation = ( + (contact, self._get_location(contact)) + for contact in contacts + ) + return dict( + (contact, location) + for (contact, location) in contactLocation + if location + ) + @misc_utils.log_exception(_moduleLogger) def RequestLocation(self, contact): """ @returns {Location Type: Location} """ - raise NotImplementedError() + return self._get_location(contact) + @misc_utils.log_exception(_moduleLogger) def SetLocation(self, location): """ Since presence is based off of phone numbers, not allowing the client to change it """ raise telepathy.errors.PermissionDenied() + + def _get_location(self, contact): + h = self.get_handle_by_id(telepathy.HANDLE_TYPE_CONTACT, contact) + if isinstance(h, handle.ConnectionHandle): + number = self.session.backend.get_callback_number() + else: + number = h.phoneNumber + + rawData = self.session.location.request_location(number) + if rawData is None: + return {} + + data = { + "country": rawData["country"], + "city": rawData["city"], + "region": rawData["region"], + }