From fa5e7f5c0c3934a6327261eff32fcbc18d9d2aab Mon Sep 17 00:00:00 2001 From: Michael Biebl Date: Wed, 14 Apr 2010 03:49:31 +0200 Subject: [PATCH] Port from libdevkit-power-gobject to libupower-glib --- configure.ac | 54 +++--- src/libtracker-common/Makefile.am | 11 +- src/libtracker-common/tracker-power-devicekit.c | 247 ----------------------- src/libtracker-common/tracker-power-upower.c | 247 +++++++++++++++++++++++ src/miners/fs/tracker-miner-files.c | 16 +- 5 files changed, 287 insertions(+), 288 deletions(-) delete mode 100644 src/libtracker-common/tracker-power-devicekit.c create mode 100644 src/libtracker-common/tracker-power-upower.c diff --git a/configure.ac b/configure.ac index f2745e3..b8796cc 100644 --- a/configure.ac +++ b/configure.ac @@ -139,7 +139,7 @@ GTK_REQUIRED=2.18.0 LIBXML2_REQUIRED=2.6 LIBNOTIFY_REQUIRED=0.4.3 HAL_REQUIRED=0.5 -DEVKIT_POWER_REQUIRED=007 +UPOWER_REQUIRED=0.9.2 GDKPIXBUF_REQUIRED=2.12.0 QUILL_REQUIRED=1.0.0 UNAC_REQUIRED=1.0.0 @@ -420,36 +420,36 @@ fi ################################################################## -# Check for DeviceKit-power +# Check for UPower ################################################################## -AC_ARG_ENABLE(devkit_power, - AS_HELP_STRING([--disable-devkit-power], - [disable DeviceKit-power support for AC power detection [[default=auto]]]),, - [enable_devkit_power=auto]) - -if test "x$enable_devkit_power" != "xno"; then - PKG_CHECK_MODULES(DEVKIT_POWER, - [devkit-power-gobject >= $DEVKIT_POWER_REQUIRED], - [have_devkit_power=yes] , - [have_devkit_power=no]) - AC_SUBST(DEVKIT_POWER_CFLAGS) - AC_SUBST(DEVKIT_POWER_LIBS) - - if test "x$have_devkit_power" = "xyes"; then - AC_DEFINE(HAVE_DEVKIT_POWER, [], [Define if we have DEVKIT_POWER]) +AC_ARG_ENABLE(upower, + AS_HELP_STRING([--disable-upower], + [disable UPower support for AC power detection [[default=auto]]]),, + [enable_upower=auto]) + +if test "x$enable_upower" != "xno"; then + PKG_CHECK_MODULES(UPOWER, + [upower-glib >= $UPOWER_REQUIRED], + [have_upower=yes] , + [have_upower=no]) + AC_SUBST(UPOWER_CFLAGS) + AC_SUBST(UPOWER_LIBS) + + if test "x$have_upower" = "xyes"; then + AC_DEFINE(HAVE_UPOWER, [], [Define if we have UPOWER]) fi else - have_devkit_power="no (disabled)" + have_upower="no (disabled)" fi -if test "x$enable_devkit_power" = "xyes"; then - if test "x$have_devkit_power" != "xyes"; then - AC_MSG_ERROR([Couldn't find devkit_power >= $DEVKIT_POWER_REQUIRED.]) +if test "x$enable_upower" = "xyes"; then + if test "x$have_upower" != "xyes"; then + AC_MSG_ERROR([Couldn't find upower >= $UPOWER_REQUIRED.]) fi fi -AM_CONDITIONAL(HAVE_DEVKIT_POWER, test "x$have_devkit_power" = "xyes") +AM_CONDITIONAL(HAVE_UPOWER, test "x$have_upower" = "xyes") ################################################################## # Check for HAL @@ -460,7 +460,7 @@ AC_ARG_ENABLE(hal, [disable HAL support for AC power detection [[default=auto]]]),, [enable_hal=auto]) -if test "x$have_devkit_power" != "xyes" && test "x$enable_hal" != "xno"; then +if test "x$have_upower" != "xyes" && test "x$enable_hal" != "xno"; then PKG_CHECK_MODULES(HAL, [hal >= $HAL_REQUIRED], [have_hal=yes] , @@ -476,8 +476,8 @@ else fi if test "x$enable_hal" = "xyes"; then - if test "x$have_devkit_power" = "xyes"; then - AC_MSG_ERROR([Only one of DeviceKit-power and HAL can be used.]) + if test "x$have_upower" = "xyes"; then + AC_MSG_ERROR([Only one of UPower and HAL can be used.]) elif test "x$have_hal" != "xyes"; then AC_MSG_ERROR([Couldn't find hal >= $HAL_REQUIRED.]) fi @@ -1767,8 +1767,8 @@ Build Configuration: Enable unit tests: $have_unit_tests Support for ioprio: $tracker_cv_have_ioprio - Support for HAL: $have_hal - Support for DeviceKit-power: $have_devkit_power + Support for HAL: $have_hal + Support for UPower: $have_upower Support for file monitoring: $have_file_monitor Support for accent stripping (unac): $have_unac Support for Cyrillic languages (enca): $have_enca diff --git a/src/libtracker-common/Makefile.am b/src/libtracker-common/Makefile.am index 5a3d33e..555fcff 100644 --- a/src/libtracker-common/Makefile.am +++ b/src/libtracker-common/Makefile.am @@ -4,14 +4,13 @@ INCLUDES = \ -DSHAREDIR=\""$(datadir)"\" \ -DG_LOG_DOMAIN=\"Tracker\" \ -DTRACKER_COMPILATION \ - -DI_KNOW_THE_DEVICEKIT_POWER_API_IS_SUBJECT_TO_CHANGE \ -I$(top_srcdir)/src \ $(WARN_CFLAGS) \ $(GLIB2_CFLAGS) \ $(GCOV_CFLAGS) \ $(GIO_CFLAGS) \ $(HAL_CFLAGS) \ - $(DEVKIT_POWER_CFLAGS) \ + $(UPOWER_CFLAGS) \ $(DBUS_CFLAGS) libtracker_commondir = $(libdir)/tracker-$(TRACKER_API_VERSION) @@ -23,12 +22,12 @@ else os_sources = tracker-os-dependant-unix.c endif -# Prefer DeviceKit-power for the power data if it's available, else fall back to HAL -if HAVE_DEVKIT_POWER +# Prefer UPower for the power data if it's available, else fall back to HAL +if HAVE_UPOWER power_headers = \ tracker-power.h power_sources = \ - tracker-power-devicekit.c + tracker-power-upower.c else if HAVE_HAL power_headers = \ @@ -77,7 +76,7 @@ libtracker_common_la_LDFLAGS = \ libtracker_common_la_LIBADD = \ $(top_builddir)/src/libstemmer/libstemmer.la \ $(HAL_LIBS) \ - $(DEVKIT_POWER_LIBS) \ + $(UPOWER_LIBS) \ $(DBUS_LIBS) \ $(GIO_LIBS) \ $(GCOV_LIBS) \ diff --git a/src/libtracker-common/tracker-power-devicekit.c b/src/libtracker-common/tracker-power-devicekit.c deleted file mode 100644 index 4022302..0000000 --- a/src/libtracker-common/tracker-power-devicekit.c +++ /dev/null @@ -1,247 +0,0 @@ -/* - * Copyright (C) 2006, Jamie McCracken - * Copyright (C) 2008, Nokia - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -#include "config.h" - -#ifdef HAVE_DEVKIT_POWER - -#include - -#include "tracker-power.h" - -#define GET_PRIV(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), TRACKER_TYPE_POWER, TrackerPowerPriv)) - -typedef struct { - DkpClient *client; - gboolean on_battery; - gboolean on_low_battery; -} TrackerPowerPriv; - -static void tracker_power_finalize (GObject *object); -static void tracker_power_get_property (GObject *object, - guint param_id, - GValue *value, - GParamSpec *pspec); -static void tracker_power_client_changed_cb (DkpClient *client, - TrackerPower *power); - -enum { - PROP_0, - PROP_ON_BATTERY, - PROP_ON_LOW_BATTERY, - PROP_BATTERY_PERCENTAGE -}; - -G_DEFINE_TYPE (TrackerPower, tracker_power, G_TYPE_OBJECT); - -static void -tracker_power_class_init (TrackerPowerClass *klass) -{ - GObjectClass *object_class; - - object_class = G_OBJECT_CLASS (klass); - - object_class->finalize = tracker_power_finalize; - object_class->get_property = tracker_power_get_property; - - g_object_class_install_property (object_class, - PROP_ON_BATTERY, - g_param_spec_boolean ("on-battery", - "Battery in use", - "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", - "Battery low", - "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)); -} - -static void -tracker_power_init (TrackerPower *power) -{ - TrackerPowerPriv *priv; - - g_message ("Initializing DeviceKit-power..."); - - priv = GET_PRIV (power); - - /* connect to a DeviceKit-power instance */ - priv->client = dkp_client_new (); - g_signal_connect (priv->client, "changed", - G_CALLBACK (tracker_power_client_changed_cb), power); - - /* coldplug */ - priv->on_battery = dkp_client_on_battery (priv->client); - priv->on_low_battery = dkp_client_on_low_battery (priv->client); -} - -static void -tracker_power_finalize (GObject *object) -{ - TrackerPowerPriv *priv; - - priv = GET_PRIV (object); - - g_object_unref (priv->client); - - (G_OBJECT_CLASS (tracker_power_parent_class)->finalize) (object); -} - -static void -tracker_power_get_property (GObject *object, - guint param_id, - GValue *value, - GParamSpec *pspec) -{ - TrackerPowerPriv *priv; - - priv = GET_PRIV (object); - - switch (param_id) { - case PROP_ON_BATTERY: - g_value_set_boolean (value, priv->on_battery); - break; - case PROP_ON_LOW_BATTERY: - g_value_set_boolean (value, priv->on_low_battery); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); - break; - }; -} - -/** - * tracker_power_client_changed_cb: - **/ -static void -tracker_power_client_changed_cb (DkpClient *client, TrackerPower *power) -{ - gboolean on_battery; - gboolean on_low_battery; - TrackerPowerPriv *priv; - - priv = GET_PRIV (power); - - /* get the on-battery state */ - on_battery = dkp_client_on_battery (priv->client); - if (on_battery != priv->on_battery) { - priv->on_battery = on_battery; - g_object_notify (G_OBJECT (power), "on-battery"); - } - - /* get the on-low-battery state */ - on_low_battery = dkp_client_on_low_battery (priv->client); - if (on_low_battery != priv->on_low_battery) { - priv->on_low_battery = on_low_battery; - g_object_notify (G_OBJECT (power), "on-low-battery"); - } -} - -/** - * tracker_power_new: - * - * Creates a new instance of #TrackerPower. - * - * Returns: The newly created #TrackerPower. - **/ -TrackerPower * -tracker_power_new () -{ - return g_object_new (TRACKER_TYPE_POWER, NULL); -} - -/** - * tracker_hal_get_on_battery: - * @power: A #TrackerPower. - * - * Returns whether the computer battery (if any) is currently in use. - * - * Returns: #TRUE if the computer is running on battery power. - **/ -gboolean -tracker_power_get_on_battery (TrackerPower *power) -{ - TrackerPowerPriv *priv; - - g_return_val_if_fail (TRACKER_IS_POWER (power), TRUE); - - priv = GET_PRIV (power); - - return priv->on_battery; -} - -/** - * tracker_power_get_on_low_battery: - * @power: A #TrackerPower - * - * Returns whether the computer has batteries. - * - * Returns: #TRUE if the computer has batteries available. - **/ -gboolean -tracker_power_get_on_low_battery (TrackerPower *power) -{ - TrackerPowerPriv *priv; - - g_return_val_if_fail (TRACKER_IS_POWER (power), TRUE); - - priv = GET_PRIV (power); - - return priv->on_low_battery; -} - -/** - * tracker_power_get_battery_percentage: - * @power: A #TrackerPower - * - * Returns the percentage of battery power available. - * - * Returns: #gdouble representing the percentage between 0.0 and 1.0. - **/ -gdouble -tracker_power_get_battery_percentage (TrackerPower *power) -{ - TrackerPowerPriv *priv; - - g_return_val_if_fail (TRACKER_IS_POWER (power), TRUE); - - priv = GET_PRIV (power); - - /* FIXME: Implement */ - return 0.5; -} - -#endif /* HAVE_DEVKIT_POWER */ diff --git a/src/libtracker-common/tracker-power-upower.c b/src/libtracker-common/tracker-power-upower.c new file mode 100644 index 0000000..8a1b71e --- /dev/null +++ b/src/libtracker-common/tracker-power-upower.c @@ -0,0 +1,247 @@ +/* + * Copyright (C) 2006, Jamie McCracken + * Copyright (C) 2008, Nokia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#include "config.h" + +#ifdef HAVE_UPOWER + +#include + +#include "tracker-power.h" + +#define GET_PRIV(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), TRACKER_TYPE_POWER, TrackerPowerPriv)) + +typedef struct { + UpClient *client; + gboolean on_battery; + gboolean on_low_battery; +} TrackerPowerPriv; + +static void tracker_power_finalize (GObject *object); +static void tracker_power_get_property (GObject *object, + guint param_id, + GValue *value, + GParamSpec *pspec); +static void tracker_power_client_changed_cb (UpClient *client, + TrackerPower *power); + +enum { + PROP_0, + PROP_ON_BATTERY, + PROP_ON_LOW_BATTERY, + PROP_BATTERY_PERCENTAGE +}; + +G_DEFINE_TYPE (TrackerPower, tracker_power, G_TYPE_OBJECT); + +static void +tracker_power_class_init (TrackerPowerClass *klass) +{ + GObjectClass *object_class; + + object_class = G_OBJECT_CLASS (klass); + + object_class->finalize = tracker_power_finalize; + object_class->get_property = tracker_power_get_property; + + g_object_class_install_property (object_class, + PROP_ON_BATTERY, + g_param_spec_boolean ("on-battery", + "Battery in use", + "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", + "Battery low", + "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)); +} + +static void +tracker_power_init (TrackerPower *power) +{ + TrackerPowerPriv *priv; + + g_message ("Initializing UPower..."); + + priv = GET_PRIV (power); + + /* connect to a UPower instance */ + priv->client = up_client_new (); + g_signal_connect (priv->client, "changed", + G_CALLBACK (tracker_power_client_changed_cb), power); + + /* coldplug */ + priv->on_battery = up_client_get_on_battery (priv->client); + priv->on_low_battery = up_client_get_on_low_battery (priv->client); +} + +static void +tracker_power_finalize (GObject *object) +{ + TrackerPowerPriv *priv; + + priv = GET_PRIV (object); + + g_object_unref (priv->client); + + (G_OBJECT_CLASS (tracker_power_parent_class)->finalize) (object); +} + +static void +tracker_power_get_property (GObject *object, + guint param_id, + GValue *value, + GParamSpec *pspec) +{ + TrackerPowerPriv *priv; + + priv = GET_PRIV (object); + + switch (param_id) { + case PROP_ON_BATTERY: + g_value_set_boolean (value, priv->on_battery); + break; + case PROP_ON_LOW_BATTERY: + g_value_set_boolean (value, priv->on_low_battery); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); + break; + }; +} + +/** + * tracker_power_client_changed_cb: + **/ +static void +tracker_power_client_changed_cb (UpClient *client, TrackerPower *power) +{ + gboolean on_battery; + gboolean on_low_battery; + TrackerPowerPriv *priv; + + priv = GET_PRIV (power); + + /* get the on-battery state */ + on_battery = up_client_get_on_battery (priv->client); + if (on_battery != priv->on_battery) { + priv->on_battery = on_battery; + g_object_notify (G_OBJECT (power), "on-battery"); + } + + /* get the on-low-battery state */ + on_low_battery = up_client_get_on_low_battery (priv->client); + if (on_low_battery != priv->on_low_battery) { + priv->on_low_battery = on_low_battery; + g_object_notify (G_OBJECT (power), "on-low-battery"); + } +} + +/** + * tracker_power_new: + * + * Creates a new instance of #TrackerPower. + * + * Returns: The newly created #TrackerPower. + **/ +TrackerPower * +tracker_power_new () +{ + return g_object_new (TRACKER_TYPE_POWER, NULL); +} + +/** + * tracker_power_get_on_battery: + * @power: A #TrackerPower. + * + * Returns whether the computer battery (if any) is currently in use. + * + * Returns: #TRUE if the computer is running on battery power. + **/ +gboolean +tracker_power_get_on_battery (TrackerPower *power) +{ + TrackerPowerPriv *priv; + + g_return_val_if_fail (TRACKER_IS_POWER (power), TRUE); + + priv = GET_PRIV (power); + + return priv->on_battery; +} + +/** + * tracker_power_get_on_low_battery: + * @power: A #TrackerPower + * + * Returns whether the computer has batteries. + * + * Returns: #TRUE if the computer has batteries available. + **/ +gboolean +tracker_power_get_on_low_battery (TrackerPower *power) +{ + TrackerPowerPriv *priv; + + g_return_val_if_fail (TRACKER_IS_POWER (power), TRUE); + + priv = GET_PRIV (power); + + return priv->on_low_battery; +} + +/** + * tracker_power_get_battery_percentage: + * @power: A #TrackerPower + * + * Returns the percentage of battery power available. + * + * Returns: #gdouble representing the percentage between 0.0 and 1.0. + **/ +gdouble +tracker_power_get_battery_percentage (TrackerPower *power) +{ + TrackerPowerPriv *priv; + + g_return_val_if_fail (TRACKER_IS_POWER (power), TRUE); + + priv = GET_PRIV (power); + + /* FIXME: Implement */ + return 0.5; +} + +#endif /* HAVE_UPOWER */ diff --git a/src/miners/fs/tracker-miner-files.c b/src/miners/fs/tracker-miner-files.c index 621895b..de95146 100644 --- a/src/miners/fs/tracker-miner-files.c +++ b/src/miners/fs/tracker-miner-files.c @@ -204,7 +204,7 @@ tracker_miner_files_init (TrackerMinerFiles *mf) G_CALLBACK (mount_point_removed_cb), mf); -#if defined(HAVE_DEVKIT_POWER) || defined(HAVE_HAL) +#if defined(HAVE_UPOWER) || defined(HAVE_HAL) priv->power = tracker_power_new (); g_signal_connect (priv->power, "notify::on-low-battery", @@ -213,7 +213,7 @@ tracker_miner_files_init (TrackerMinerFiles *mf) g_signal_connect (priv->power, "notify::on-battery", G_CALLBACK (battery_status_cb), mf); -#endif /* defined(HAVE_DEVKIT_POWER) || defined(HAVE_HAL) */ +#endif /* defined(HAVE_UPOWER) || defined(HAVE_HAL) */ priv->volume_monitor = g_volume_monitor_get (); g_signal_connect (priv->volume_monitor, "mount-pre-unmount", @@ -298,9 +298,9 @@ miner_files_finalize (GObject *object) g_slist_free (priv->index_single_directories); } -#if defined(HAVE_DEVKIT_POWER) || defined(HAVE_HAL) +#if defined(HAVE_UPOWER) || defined(HAVE_HAL) g_object_unref (priv->power); -#endif /* defined(HAVE_DEVKIT_POWER) || defined(HAVE_HAL) */ +#endif /* defined(HAVE_UPOWER) || defined(HAVE_HAL) */ g_object_unref (priv->storage); @@ -350,9 +350,9 @@ miner_files_constructed (GObject *object) mounts = tracker_storage_get_device_roots (mf->private->storage, type, TRUE); -#if defined(HAVE_DEVKIT_POWER) || defined(HAVE_HAL) +#if defined(HAVE_UPOWER) || defined(HAVE_HAL) check_battery_status (mf); -#endif /* defined(HAVE_DEVKIT_POWER) || defined(HAVE_HAL) */ +#endif /* defined(HAVE_UPOWER) || defined(HAVE_HAL) */ g_message ("Setting up directories to iterate from config (IndexSingleDirectory)"); @@ -840,7 +840,7 @@ mount_point_added_cb (TrackerStorage *storage, g_free (urn); } -#if defined(HAVE_DEVKIT_POWER) || defined(HAVE_HAL) +#if defined(HAVE_UPOWER) || defined(HAVE_HAL) static void set_up_throttle (TrackerMinerFiles *mf, @@ -918,7 +918,7 @@ battery_status_cb (GObject *object, check_battery_status (mf); } -#endif /* defined(HAVE_DEVKIT_POWER) || defined(HAVE_HAL) */ +#endif /* defined(HAVE_UPOWER) || defined(HAVE_HAL) */ static void mount_pre_unmount_cb (GVolumeMonitor *volume_monitor, -- 1.7.0.4