[tracker/libtracker-miner] TrackerMinerFS: Implement pause() and resume().



commit 421515730eef1b828d83453e6dece7323ef7517b
Author: Carlos Garnacho <carlos lanedo com>
Date:   Mon Aug 31 16:53:11 2009 +0200

    TrackerMinerFS: Implement pause() and resume().

 src/libtracker-miner/tracker-miner-fs.c |   46 ++++++++++++++++++++++++++-----
 1 files changed, 39 insertions(+), 7 deletions(-)
---
diff --git a/src/libtracker-miner/tracker-miner-fs.c b/src/libtracker-miner/tracker-miner-fs.c
index bada6fa..fd327f8 100644
--- a/src/libtracker-miner/tracker-miner-fs.c
+++ b/src/libtracker-miner/tracker-miner-fs.c
@@ -67,6 +67,7 @@ struct TrackerMinerFSPrivate {
 	guint           been_started : 1;
 	guint           been_crawled : 1;
 	guint           shown_totals : 1;
+	guint           paused : 1;
 
 	/* Statistics */
 	guint		total_directories_found;
@@ -101,6 +102,9 @@ static gboolean       fs_defaults                  (TrackerMinerFS *fs,
 						    GFile          *file);
 static void           miner_started                (TrackerMiner   *miner);
 static void           miner_stopped                (TrackerMiner   *miner);
+static void           miner_paused                 (TrackerMiner   *miner);
+static void           miner_resumed                (TrackerMiner   *miner);
+
 static DirectoryData *directory_data_new           (GFile          *file,
 						    gboolean        recurse);
 static void           directory_data_free          (DirectoryData  *dd);
@@ -160,17 +164,13 @@ tracker_miner_fs_class_init (TrackerMinerFSClass *klass)
 
         miner_class->started = miner_started;
         miner_class->stopped = miner_stopped;
+	miner_class->paused  = miner_paused;
+	miner_class->resumed = miner_resumed;
 
 	fs_class->check_file        = fs_defaults;
 	fs_class->check_directory   = fs_defaults;
 	fs_class->monitor_directory = fs_defaults;
 
-	/*
-	  miner_class->stopped = miner_crawler_stopped;
-	  miner_class->paused  = miner_crawler_paused;
-	  miner_class->resumed = miner_crawler_resumed;
-	*/
-
 	signals[CHECK_FILE] =
 		g_signal_new ("check-file",
 			      G_OBJECT_CLASS_TYPE (object_class),
@@ -346,6 +346,34 @@ miner_stopped (TrackerMiner *miner)
 		      NULL);
 }
 
+static void
+miner_paused (TrackerMiner *miner)
+{
+	TrackerMinerFSPrivate *priv;
+
+	priv = TRACKER_MINER_FS (miner)->private;
+
+	priv->paused = TRUE;
+
+	/* FIXME: also pause crawler, if running */
+
+	if (priv->item_queues_handler_id) {
+		g_source_remove (priv->item_queues_handler_id);
+		priv->item_queues_handler_id = 0;
+	}
+}
+
+static void
+miner_resumed (TrackerMiner *miner)
+{
+	TrackerMinerFSPrivate *priv;
+
+	priv = TRACKER_MINER_FS (miner)->private;
+
+	priv->paused = FALSE;
+	item_queue_handlers_set_up (TRACKER_MINER_FS (miner));
+}
+
 static DirectoryData *
 directory_data_new (GFile    *file,
 		    gboolean  recurse)
@@ -831,7 +859,11 @@ item_queue_handlers_set_up (TrackerMinerFS *fs)
 	if (fs->private->item_queues_handler_id != 0) {
 		return;
 	}
-	
+
+	if (fs->private->paused) {
+		return;
+	}
+
 	g_object_get (fs, "status", &status, NULL);
 	if (g_strcmp0 (status, _("Processing files")) != 0) {
 		/* Don't spam this */



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