--- /dev/null
+import gobject
+import location
+
+class LocationUpdater:
+
+ def __init__(self):
+ self.lat = None
+ self.long = None
+ self.loop = gobject.MainLoop()
+
+ self.control = location.GPSDControl.get_default()
+ self.control.set_properties(preferred_method=location.METHOD_AGNSS,
+ preferred_interval=location.INTERVAL_DEFAULT)
+ self.control.connect("error-verbose", self.on_error, self.loop)
+ self.control.connect("gpsd-stopped", self.on_stop, self.loop)
+
+ self.device = location.GPSDevice()
+ self.device.connect("changed", self.on_changed, self.control)
+
+ def update_location(self):
+ """ Run the loop and update lat and long """
+ self.reset()
+ gobject.idle_add(self.start_location, self.control)
+ self.loop.run()
+
+ def on_error(self, control, error, data):
+ """ Handle errors """
+ print "location error: %d... quitting" % error
+ data.quit()
+
+ def on_changed(self, device, data):
+ """ Set long and lat """
+ if not device:
+ return
+ if device.fix:
+ # once fix is found and long, lat available set long lat
+ if device.fix[1] & location.GPS_DEVICE_LATLONG_SET:
+ self.lat, self.long = device.fix[4:6]
+ data.stop()
+
+ def on_stop(self, control, data):
+ """ Stop the location service """
+ print "quitting"
+ data.quit()
+
+ def start_location(self, data):
+ """ Start the location service """
+ data.start()
+ return False
+
+ def reset(self):
+ """ Reset coordinates """
+ self.lat = None
+ self.long = None
+ self.device.reset_last_known()
+