Move GPS code to Azimuth
authorGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>
Tue, 18 May 2010 19:42:14 +0000 (21:42 +0200)
committerGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>
Tue, 18 May 2010 20:01:57 +0000 (22:01 +0200)
The publisher is only about publishing.

src/azimuth.c
src/position-publisher.c
src/position-publisher.h

index 57d3a76..392805c 100644 (file)
@@ -25,6 +25,8 @@
 #include <gconf/gconf-client.h>
 #include <telepathy-glib/util.h>
 
+#include <location/location-gpsd-control.h>
+
 #include "azimuth.h"
 #include "azimuth-gconf.h"
 #include "position-publisher.h"
@@ -39,11 +41,33 @@ struct _AzimuthPrivate
   GMainLoop *loop;
   PositionPublisher *publisher;
   GConfClient *gconf;
+  LocationGPSDControl *gps_control;
 };
 
 #define AZIMUTH_GET_PRIVATE(o)     (G_TYPE_INSTANCE_GET_PRIVATE ((o), AZIMUTH_TYPE, AzimuthPrivate))
 
 static void
+update_gps (Azimuth *self)
+{
+  AzimuthPrivate *priv = AZIMUTH_GET_PRIVATE (self);
+  gboolean start_gps;
+
+  start_gps = gconf_client_get_bool (priv->gconf,
+      AZIMUTH_GCONF_KEY_START_GPS, NULL);
+
+  if (priv->publisher != NULL && start_gps)
+    {
+      g_print ("starting GPS\n");
+      location_gpsd_control_start (priv->gps_control);
+    }
+  else
+    {
+      g_print ("stopping GPS\n");
+      location_gpsd_control_stop (priv->gps_control);
+    }
+}
+
+static void
 enabled_changed (Azimuth *self,
     gboolean enabled)
 {
@@ -51,15 +75,11 @@ enabled_changed (Azimuth *self,
 
   if (enabled)
     {
-      gboolean start_gps;
       if (priv->publisher != NULL)
         return;
 
-      start_gps = gconf_client_get_bool (priv->gconf,
-          AZIMUTH_GCONF_KEY_START_GPS, NULL);
-      g_print ("enable publishing (start gps: %s)\n",
-          start_gps ? "yes" : "no");
-      priv->publisher = position_publisher_new (TRUE, start_gps);
+      g_print ("enable publishing\n");
+      priv->publisher = position_publisher_new (TRUE);
     }
   else
     {
@@ -70,19 +90,8 @@ enabled_changed (Azimuth *self,
       g_object_unref (priv->publisher);
       priv->publisher = NULL;
     }
-}
 
-static void
-start_gps_changed (Azimuth *self,
-    gboolean start_gps)
-{
-  AzimuthPrivate *priv = AZIMUTH_GET_PRIVATE (self);
-
-  if (priv->publisher)
-    {
-      g_print ("%s GPS\n", start_gps ? "Start" : "Stop");
-      g_object_set (priv->publisher, "start-gps", start_gps, NULL);
-    }
+  update_gps (self);
 }
 
 static void
@@ -106,9 +115,7 @@ gconf_notification_cb (GConfClient *client,
   if (!tp_strdiff (key, AZIMUTH_GCONF_KEY_START_GPS) &&
       value->type == GCONF_VALUE_BOOL)
     {
-      gboolean start_gps = gconf_value_get_bool (value);
-
-      start_gps_changed (self, start_gps);
+      update_gps (self);
     }
 }
 
@@ -127,6 +134,14 @@ azimuth_init (Azimuth *self)
 
   gconf_client_notify_add (priv->gconf, AZIMUTH_GCONF_SECTION,
       gconf_notification_cb, self, NULL, NULL);
+
+  /* GPS controller */
+  priv->gps_control = location_gpsd_control_get_default();
+
+  g_object_set (G_OBJECT(priv->gps_control),
+    "preferred-method", LOCATION_METHOD_USER_SELECTED,
+    "preferred-interval", LOCATION_INTERVAL_120S,
+    NULL);
 }
 
 static void
@@ -153,6 +168,13 @@ azimuth_dispose (GObject *object)
       priv->gconf = NULL;
     }
 
+  if (priv->gps_control != NULL)
+    {
+      location_gpsd_control_stop (priv->gps_control);
+      g_object_unref (priv->gps_control);
+      priv->gps_control = NULL;
+    }
+
   if (G_OBJECT_CLASS (azimuth_parent_class)->dispose)
     G_OBJECT_CLASS (azimuth_parent_class)->dispose (object);
 }
@@ -179,18 +201,16 @@ azimuth_run (Azimuth *self)
 {
   AzimuthPrivate *priv = AZIMUTH_GET_PRIVATE (self);
   gboolean enabled;
-  gboolean start_gps;
 
   enabled = gconf_client_get_bool (priv->gconf, AZIMUTH_GCONF_KEY_ENABLED,
       NULL);
-  start_gps = gconf_client_get_bool (priv->gconf, AZIMUTH_GCONF_KEY_START_GPS,
-      NULL);
   if (enabled)
     {
-      g_print ("publishing is enabled (start gps: %s)\n",
-          start_gps ? "yes" : "no");
+      g_print ("publishing is enabled\n");
       g_assert (priv->publisher == NULL);
-      priv->publisher = position_publisher_new (TRUE, start_gps);
+      priv->publisher = position_publisher_new (TRUE);
+
+      update_gps (self);
     }
   else
     {
index 361c770..332c8d0 100644 (file)
@@ -26,7 +26,6 @@
 #include <telepathy-glib/interfaces.h>
 
 #include <location/location-gps-device.h>
-#include <location/location-gpsd-control.h>
 
 #include "connection-watcher.h"
 #include "position-publisher.h"
@@ -36,8 +35,7 @@ G_DEFINE_TYPE(PositionPublisher, position_publisher, G_TYPE_OBJECT)
 /* properties */
 enum
 {
-  PROP_START_GPS = 1,
-  PROP_BLUR,
+  PROP_BLUR = 1,
   LAST_PROPERTY
 };
 
@@ -50,7 +48,6 @@ typedef struct _PositionPublisherPrivate PositionPublisherPrivate;
 struct _PositionPublisherPrivate
 {
   ConnectionWatcher *watcher;
-  LocationGPSDControl *gps_control;
   LocationGPSDevice *gps_device;
   GSList *connections;
   GHashTable *location;
@@ -59,7 +56,6 @@ struct _PositionPublisherPrivate
   /* TRUE if location has been modified while we were waiting */
   gboolean modified;
   gboolean blur;
-  gboolean start_gps;
 
   gboolean dispose_has_run;
 };
@@ -253,13 +249,6 @@ position_publisher_init (PositionPublisher *obj)
   g_signal_connect (priv->watcher, "connection-added",
       G_CALLBACK (connection_added_cb), obj);
 
-  priv->gps_control = location_gpsd_control_get_default();
-
-  g_object_set (G_OBJECT(priv->gps_control),
-    "preferred-method", LOCATION_METHOD_USER_SELECTED,
-    "preferred-interval", LOCATION_INTERVAL_120S,
-    NULL);
-
   priv->gps_device = g_object_new (LOCATION_TYPE_GPS_DEVICE, NULL);
 
   g_signal_connect (priv->gps_device, "changed",
@@ -307,12 +296,6 @@ position_publisher_class_init (PositionPublisherClass *position_publisher_class)
       G_PARAM_CONSTRUCT | G_PARAM_WRITABLE | G_PARAM_READABLE
       | G_PARAM_STATIC_STRINGS);
   g_object_class_install_property (object_class, PROP_BLUR, param_spec);
-
-  param_spec = g_param_spec_boolean ("start-gps", "Start GPS?",
-      "Whether the publisher starts the GPS.", FALSE,
-      G_PARAM_CONSTRUCT | G_PARAM_WRITABLE | G_PARAM_READABLE
-      | G_PARAM_STATIC_STRINGS);
-  g_object_class_install_property (object_class, PROP_START_GPS, param_spec);
 }
 
 void
@@ -327,14 +310,7 @@ position_publisher_dispose (GObject *object)
 
   priv->dispose_has_run = TRUE;
 
-  if (priv->start_gps)
-    {
-      location_gpsd_control_stop (priv->gps_control);
-      priv->start_gps = FALSE;
-    }
-
   g_object_unref (priv->watcher);
-  g_object_unref (priv->gps_control);
   g_object_unref (priv->gps_device);
 
   for (l = priv->connections; l != NULL; l = g_slist_next (l))
@@ -375,9 +351,6 @@ position_publisher_get_property (GObject *object,
     case PROP_BLUR:
       g_value_set_boolean (value, priv->blur);
       break;
-    case PROP_START_GPS:
-      g_value_set_boolean (value, priv->start_gps);
-      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
       break;
@@ -397,12 +370,6 @@ position_publisher_set_property (GObject *object,
     case PROP_BLUR:
       priv->blur = g_value_get_boolean (value);
       break;
-    case PROP_START_GPS:
-      priv->start_gps = g_value_get_boolean (value);
-      if (priv->start_gps)
-        location_gpsd_control_start (priv->gps_control);
-      else
-        location_gpsd_control_stop (priv->gps_control);
 
       break;
     default:
@@ -412,10 +379,9 @@ position_publisher_set_property (GObject *object,
 }
 
 PositionPublisher *
-position_publisher_new (gboolean blur, gboolean start_gps)
+position_publisher_new (gboolean blur)
 {
   return g_object_new (POSITION_PUBLISHER_TYPE,
       "blur", blur,
-      "start-gps", start_gps,
       NULL);
 }
index a5837da..97b1e9f 100644 (file)
@@ -52,7 +52,7 @@ GType position_publisher_get_type (void);
 #define POSITION_PUBLISHER_GET_CLASS(obj) \
   (G_TYPE_INSTANCE_GET_CLASS ((obj), POSITION_PUBLISHER_TYPE, PositionPublisherClass))
 
-PositionPublisher * position_publisher_new (gboolean blur, gboolean start_gps);
+PositionPublisher * position_publisher_new (gboolean start_gps);
 
 G_END_DECLS