Imitiating buttfly in being explicitly typed
[theonering] / src / location.py
index 4151b9c..32b5823 100644 (file)
@@ -2,17 +2,18 @@ import logging
 
 import telepathy
 
-import gtk_toolbox
+import util.misc as misc_utils
+import handle
 
 
-_moduleLogger = logging.getLogger('location')
+_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
@@ -22,23 +23,48 @@ class LocationMixin(object):
                """
                raise NotImplementedError("Abstract property called")
 
-       @gtk_toolbox.log_exception(_moduleLogger)
+       @misc_utils.log_exception(_moduleLogger)
        def GetLocations(self, contacts):
                """
                @returns {Contact: {Location Type: Location}}
                """
-               raise telepathy.NotImplemented("Yet")
+               contactLocation = (
+                       (contact, self._get_location(contact))
+                       for contact in contacts
+               )
+               return dict(
+                       (contact, location)
+                       for (contact, location) in contactLocation
+                       if location
+               )
 
-       @gtk_toolbox.log_exception(_moduleLogger)
+       @misc_utils.log_exception(_moduleLogger)
        def RequestLocation(self, contact):
                """
                @returns {Location Type: Location}
                """
-               raise telepathy.NotImplemented("Yet")
+               return self._get_location(contact)
 
-       @gtk_toolbox.log_exception(_moduleLogger)
+       @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"],
+               }