#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"
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
struct _PositionPublisherPrivate
{
ConnectionWatcher *watcher;
+ LocationGPSDControl *gps_control;
LocationGPSDevice *gps_device;
GSList *connections;
GHashTable *location;
guint throttle_timeout;
/* TRUE if location has been modified while we were waiting */
gboolean modified;
+ gboolean blur;
+ gboolean start_gps;
gboolean dispose_has_run;
};
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",
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
priv->dispose_has_run = TRUE;
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))
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);
}