[tracker/libtracker-miner] Don't allow an app to pause with the same reason more than once



commit 97598026da55f45ad706c6fe0d8d120049f84276
Author: Martyn Russell <martyn lanedo com>
Date:   Fri Aug 28 12:28:46 2009 +0100

    Don't allow an app to pause with the same reason more than once

 src/libtracker-miner/tracker-miner.c       |   25 +++++++++++----
 src/tracker-miner-fs/tracker-miner-files.c |   45 ++++++++++++++++-----------
 2 files changed, 45 insertions(+), 25 deletions(-)
---
diff --git a/src/libtracker-miner/tracker-miner.c b/src/libtracker-miner/tracker-miner.c
index 6422572..3baa976 100644
--- a/src/libtracker-miner/tracker-miner.c
+++ b/src/libtracker-miner/tracker-miner.c
@@ -561,11 +561,28 @@ tracker_miner_pause (TrackerMiner  *miner,
 		     GError       **error)
 {
 	PauseData *pd;
+	GHashTableIter iter;
+	gpointer key, value;
 
 	g_return_val_if_fail (TRACKER_IS_MINER (miner), -1);
 	g_return_val_if_fail (application != NULL, -1);
 	g_return_val_if_fail (reason != NULL, -1);
 
+	/* Check this is not a duplicate pause */
+	g_hash_table_iter_init (&iter, miner->private->pauses);
+	while (g_hash_table_iter_next (&iter, &key, &value)) {
+		PauseData *pd = value;
+
+		if (g_strcmp0 (application, pd->application) == 0 && 
+		    g_strcmp0 (reason, pd->reason) == 0) {
+			/* Can't use duplicate pauses */
+			g_set_error (error, TRACKER_MINER_ERROR, 0, 
+				     "%s",
+				     _("Pause application and reason match an already existing pause request"));
+			return -1;
+		}
+	}
+
 	pd = pause_data_new (application, reason);
 
 	g_hash_table_insert (miner->private->pauses, 
@@ -700,14 +717,8 @@ tracker_miner_dbus_get_pause_details (TrackerMiner           *miner,
 
 	g_hash_table_iter_init (&iter, miner->private->pauses);
 	while (g_hash_table_iter_next (&iter, &key, &value)) {
-		PauseData *pd;
+		PauseData *pd = value;
 
-		pd = value;
-
-		if (!pd) {
-			continue;
-		}
-		
 		applications = g_slist_prepend (applications, pd->application);
 		reasons = g_slist_prepend (reasons, pd->reason);
 	}
diff --git a/src/tracker-miner-fs/tracker-miner-files.c b/src/tracker-miner-fs/tracker-miner-files.c
index ea66463..124dbb7 100644
--- a/src/tracker-miner-fs/tracker-miner-files.c
+++ b/src/tracker-miner-fs/tracker-miner-files.c
@@ -377,29 +377,32 @@ on_low_battery_cb (GObject    *object,
 	TrackerMinerFiles *mf = user_data;
 	gboolean on_low_battery;
 	gboolean on_battery;
+	gboolean should_pause = FALSE;
 
 	on_low_battery = tracker_power_get_on_low_battery (mf->private->power);
 	on_battery = tracker_power_get_on_battery (mf->private->power);
 
-	if (on_battery) {
-		if (on_low_battery) {
-			/* Running on low batteries, stop indexing for now */
+	if (on_battery && on_low_battery) {
+		should_pause = TRUE;
+	}
+
+	if (should_pause) {
+		/* Don't try to pause again */
+		if (mf->private->low_battery_pause_cookie == 0) {
 			mf->private->low_battery_pause_cookie = 
 				tracker_miner_pause (TRACKER_MINER (mf),
 						     g_get_application_name (),
 						     _("Low battery"),
 						     NULL);
-		} else {
+		}
+	} else {
+		/* Don't try to resume again */
+		if (mf->private->low_battery_pause_cookie != 0) {
 			tracker_miner_resume (TRACKER_MINER (mf),
 					      mf->private->low_battery_pause_cookie,
 					      NULL);
 			mf->private->low_battery_pause_cookie = 0;
 		}
-	} else if (mf->private->low_battery_pause_cookie != 0) {
-		tracker_miner_resume (TRACKER_MINER (mf),
-				      mf->private->low_battery_pause_cookie,
-				      NULL);
-		mf->private->low_battery_pause_cookie = 0;
 	}
 
 	/* FIXME: Get this working again */
@@ -459,16 +462,22 @@ disk_space_check_cb (gpointer user_data)
 	TrackerMinerFiles *mf = user_data;
 	
 	if (disk_space_check (mf)) {
-		mf->private->disk_space_pause_cookie = 
-			tracker_miner_pause (TRACKER_MINER (mf),
-					     g_get_application_name (),
-					     _("Low disk space"),
-					     NULL);
+		/* Don't try to pause again */
+		if (mf->private->disk_space_pause_cookie == 0) {
+			mf->private->disk_space_pause_cookie = 
+				tracker_miner_pause (TRACKER_MINER (mf),
+						     g_get_application_name (),
+						     _("Low disk space"),
+						     NULL);
+		}
 	} else {
-		tracker_miner_resume (TRACKER_MINER (mf),
-				      mf->private->disk_space_pause_cookie,
-				      NULL);
-		mf->private->disk_space_pause_cookie = 0;
+		/* Don't try to resume again */
+		if (mf->private->disk_space_pause_cookie != 0) {
+			tracker_miner_resume (TRACKER_MINER (mf),
+					      mf->private->disk_space_pause_cookie,
+					      NULL);
+			mf->private->disk_space_pause_cookie = 0;
+		}
 	}
 
 	return TRUE;



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