[tracker/libtracker-miner] Make battery percentage a property and notify on when it changes



commit 781a8df601defccf2f2db803ea2c3acb08e36893
Author: Martyn Russell <martyn lanedo com>
Date:   Fri Aug 28 13:45:13 2009 +0100

    Make battery percentage a property and notify on when it changes

 src/libtracker-common/tracker-power-hal.c  |   20 +++++++++++++++-
 src/tracker-miner-fs/tracker-miner-files.c |   32 ++++++++++++++++++++-------
 2 files changed, 41 insertions(+), 11 deletions(-)
---
diff --git a/src/libtracker-common/tracker-power-hal.c b/src/libtracker-common/tracker-power-hal.c
index bf6537f..111f6b6 100644
--- a/src/libtracker-common/tracker-power-hal.c
+++ b/src/libtracker-common/tracker-power-hal.c
@@ -81,7 +81,8 @@ static void	hal_device_property_modified_cb (LibHalContext	 *context,
 enum {
 	PROP_0,
 	PROP_ON_BATTERY,
-	PROP_ON_LOW_BATTERY
+	PROP_ON_LOW_BATTERY,
+	PROP_BATTERY_PERCENTAGE
 };
 
 G_DEFINE_TYPE (TrackerPower, tracker_power, G_TYPE_OBJECT);
@@ -103,7 +104,6 @@ tracker_power_class_init (TrackerPowerClass *klass)
 							       "Whether the battery is being used",
 							       FALSE,
 							       G_PARAM_READABLE));
-
 	g_object_class_install_property (object_class,
 					 PROP_ON_LOW_BATTERY,
 					 g_param_spec_boolean ("on-low-battery",
@@ -111,6 +111,15 @@ tracker_power_class_init (TrackerPowerClass *klass)
 							      "Whether the battery is low",
 							      FALSE,
 							      G_PARAM_READABLE));
+	g_object_class_install_property (object_class,
+					 PROP_BATTERY_PERCENTAGE,
+					 g_param_spec_double ("battery-percentage",
+							      "Battery percentage",
+							      "Current battery percentage left",
+							      0.0,
+							      1.0,
+							      0.0,
+							      G_PARAM_READABLE));
 
 	g_type_class_add_private (object_class, sizeof (TrackerPowerPriv));
 }
@@ -230,6 +239,9 @@ hal_get_property (GObject    *object,
 		/* hardcoded to 5% */
 		g_value_set_boolean (value, priv->battery_percentage < BATTERY_LOW_THRESHOLD);
 		break;
+	case PROP_BATTERY_PERCENTAGE:
+		g_value_set_double (value, priv->battery_percentage);
+		break;
 	default:
 		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
 		break;
@@ -396,6 +408,10 @@ hal_battery_notify (TrackerPower *power)
 		    g_object_notify (G_OBJECT (power), "on-low-battery");
 	}
 
+	if (old_percentage != priv->battery_percentage) {
+		g_object_notify (G_OBJECT (power), "battery-percentage");
+	}
+	
 	g_list_free (values);
 }
 
diff --git a/src/tracker-miner-fs/tracker-miner-files.c b/src/tracker-miner-fs/tracker-miner-files.c
index 747b1b5..267dc92 100644
--- a/src/tracker-miner-fs/tracker-miner-files.c
+++ b/src/tracker-miner-fs/tracker-miner-files.c
@@ -99,6 +99,9 @@ static void     on_battery_cb                 (GObject              *gobject,
 static void     on_low_battery_cb             (GObject              *object,
 					       GParamSpec           *pspec,
 					       gpointer              user_data);
+static void     on_battery_percentage_cb      (GObject              *gobject,
+					       GParamSpec           *arg1,
+					       gpointer              user_data);
 static void     disk_space_check_start        (TrackerMinerFiles    *mf);
 static void     disk_space_check_stop         (TrackerMinerFiles    *mf);
 static void     low_disk_space_limit_cb       (GObject              *gobject,
@@ -173,6 +176,9 @@ tracker_miner_files_init (TrackerMinerFiles *mf)
 	g_signal_connect (priv->power, "notify::on-battery",
 			  G_CALLBACK (on_battery_cb),
 			  mf);
+	g_signal_connect (priv->power, "notify::battery-percentage",
+			  G_CALLBACK (on_battery_percentage_cb),
+			  mf);
 #endif /* HAVE_HAL */
 
 	priv->volume_monitor = g_volume_monitor_get ();
@@ -242,12 +248,14 @@ miner_files_finalize (GObject *object)
 
 #ifdef HAVE_HAL
 	g_signal_handlers_disconnect_by_func (priv->power,
+					      on_battery_percentage_cb,
+					      mf);
+	g_signal_handlers_disconnect_by_func (priv->power,
 					      on_battery_cb,
 					      mf);
 	g_signal_handlers_disconnect_by_func (priv->power,
 					      on_low_battery_cb,
 					      mf);
-
         g_object_unref (priv->power);
 
 	g_signal_handlers_disconnect_by_func (priv->storage,
@@ -393,14 +401,6 @@ on_battery_cb (GObject    *gobject,
 	       GParamSpec *arg1,
 	       gpointer    user_data)
 {
-	TrackerMinerFiles *mf = user_data;
-	gdouble percentage;
-
-	percentage = tracker_power_get_battery_percentage (mf->private->power);
-
-	g_message ("Battery percentage is now %.0f%%",
-		   percentage * 100);
-
 	/* FIXME: Get this working again */
 	/* set_up_throttle (TRUE); */
 }
@@ -451,6 +451,20 @@ on_low_battery_cb (GObject    *object,
 	/* set_up_throttle (FALSE); */
 }
 
+static void
+on_battery_percentage_cb (GObject    *gobject,
+			  GParamSpec *arg1,
+			  gpointer    user_data)
+{
+	TrackerMinerFiles *mf = user_data;
+	gdouble percentage;
+
+	percentage = tracker_power_get_battery_percentage (mf->private->power);
+
+	g_message ("Battery percentage is now %.0f%%",
+		   percentage * 100);
+}
+
 #endif /* HAVE_HAL */
 
 static void



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]