Add 2 properties to PositionPublisher: blur and start-gps
authorAlban Crequy <alban.crequy@collabora.co.uk>
Mon, 3 May 2010 16:09:15 +0000 (17:09 +0100)
committerAlban Crequy <alban.crequy@collabora.co.uk>
Mon, 3 May 2010 16:40:15 +0000 (17:40 +0100)
src/azimuth.c
src/position-publisher.c
src/position-publisher.h

index bc3445a..5c1337d 100644 (file)
@@ -55,7 +55,7 @@ enabled_changed (Azimuth *self,
       if (priv->publisher != NULL)
         return;
 
-      priv->publisher = position_publisher_new ();
+      priv->publisher = position_publisher_new (TRUE, FALSE);
     }
   else
     {
@@ -161,7 +161,7 @@ azimuth_run (Azimuth *self)
     {
       g_print ("publishing is enabled\n");
       g_assert (priv->publisher == NULL);
-      priv->publisher = position_publisher_new ();
+      priv->publisher = position_publisher_new (TRUE, FALSE);
     }
   else
     {
index c6351c0..77e6ab3 100644 (file)
 
 G_DEFINE_TYPE(PositionPublisher, position_publisher, G_TYPE_OBJECT)
 
+/* properties */
+enum
+{
+  PROP_START_GPS = 1,
+  PROP_BLUR,
+  LAST_PROPERTY
+};
+
 /* Minimum time before 2 publishing (in seconds) */
 #define PUBLISH_THROTTLE 10
 
@@ -50,6 +58,8 @@ struct _PositionPublisherPrivate
   guint throttle_timeout;
   /* TRUE if location has been modified while we were waiting */
   gboolean modified;
+  gboolean blur;
+  gboolean start_gps;
 
   gboolean dispose_has_run;
 };
@@ -272,18 +282,37 @@ position_publisher_constructed (GObject *object)
 
 static void position_publisher_dispose (GObject *object);
 static void position_publisher_finalize (GObject *object);
+static void position_publisher_get_property (GObject *object,
+    guint property_id, GValue *value, GParamSpec *pspec);
+static void position_publisher_set_property (GObject *object,
+    guint property_id, const GValue *value, GParamSpec *pspec);
 
 static void
 position_publisher_class_init (PositionPublisherClass *position_publisher_class)
 {
   GObjectClass *object_class = G_OBJECT_CLASS (position_publisher_class);
+  GParamSpec *param_spec;
 
   g_type_class_add_private (position_publisher_class, sizeof (PositionPublisherPrivate));
 
   object_class->dispose = position_publisher_dispose;
   object_class->finalize = position_publisher_finalize;
+  object_class->get_property = position_publisher_get_property;
+  object_class->set_property = position_publisher_set_property;
 
   object_class->constructed = position_publisher_constructed;
+
+  param_spec = g_param_spec_boolean ("blur", "Blur?",
+      "Whether the real GPS position is truncated for privacy concerns.", TRUE,
+      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,9 +356,55 @@ position_publisher_finalize (GObject *object)
   G_OBJECT_CLASS (position_publisher_parent_class)->finalize (object);
 }
 
+static void
+position_publisher_get_property (GObject *object,
+                                 guint property_id,
+                                 GValue *value,
+                                 GParamSpec *pspec)
+{
+  PositionPublisher *self = POSITION_PUBLISHER (object);
+  PositionPublisherPrivate *priv = POSITION_PUBLISHER_GET_PRIVATE (self);
+
+  switch (property_id) {
+    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;
+  }
+}
+
+static void
+position_publisher_set_property (GObject *object,
+                                 guint property_id,
+                                 const GValue *value,
+                                 GParamSpec *pspec)
+{
+  PositionPublisher *self = POSITION_PUBLISHER (object);
+  PositionPublisherPrivate *priv = POSITION_PUBLISHER_GET_PRIVATE (self);
+
+  switch (property_id) {
+    case PROP_BLUR:
+      priv->blur = g_value_get_boolean (value);
+      break;
+    case PROP_START_GPS:
+      priv->blur = g_value_get_boolean (value);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+      break;
+  }
+}
+
 PositionPublisher *
-position_publisher_new (void)
+position_publisher_new (gboolean blur, gboolean start_gps)
 {
   return g_object_new (POSITION_PUBLISHER_TYPE,
+      "blur", blur,
+      "start-gps", start_gps,
       NULL);
 }
index c391bef..a5837da 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 (void);
+PositionPublisher * position_publisher_new (gboolean blur, gboolean start_gps);
 
 G_END_DECLS