[tracker/libtracker-miner] Fix processor/crawler so they can include/exclude files/directories
- From: Martyn James Russell <mr src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [tracker/libtracker-miner] Fix processor/crawler so they can include/exclude files/directories
- Date: Tue, 4 Aug 2009 14:59:18 +0000 (UTC)
commit 83412c4779a2a1f942e6eff1a82430c42dad0e0a
Author: Martyn Russell <martyn imendio com>
Date: Mon Aug 3 17:59:07 2009 +0100
Fix processor/crawler so they can include/exclude files/directories
src/libtracker-miner/tracker-crawler.c | 120 ++++++++++++++----------------
src/libtracker-miner/tracker-processor.c | 38 +++++----
2 files changed, 78 insertions(+), 80 deletions(-)
---
diff --git a/src/libtracker-miner/tracker-crawler.c b/src/libtracker-miner/tracker-crawler.c
index ef24339..2ecdb8e 100644
--- a/src/libtracker-miner/tracker-crawler.c
+++ b/src/libtracker-miner/tracker-crawler.c
@@ -108,8 +108,8 @@ struct _TrackerCrawlerPrivate {
};
enum {
- PROCESSING_DIRECTORY,
- PROCESSING_FILE,
+ PROCESS_DIRECTORY,
+ PROCESS_FILE,
FINISHED,
LAST_SIGNAL
};
@@ -144,24 +144,24 @@ tracker_crawler_class_init (TrackerCrawlerClass *klass)
object_class->finalize = tracker_crawler_finalize;
- signals[PROCESSING_DIRECTORY] =
- g_signal_new ("processing-directory",
+ signals[PROCESS_DIRECTORY] =
+ g_signal_new ("process-directory",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
0,
NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT,
- G_TYPE_NONE,
+ tracker_marshal_BOOLEAN__OBJECT,
+ G_TYPE_BOOLEAN,
1,
G_TYPE_OBJECT);
- signals[PROCESSING_FILE] =
- g_signal_new ("processing-file",
+ signals[PROCESS_FILE] =
+ g_signal_new ("process-file",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
0,
NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT,
- G_TYPE_NONE,
+ tracker_marshal_BOOLEAN__OBJECT,
+ G_TYPE_BOOLEAN,
1,
G_TYPE_OBJECT);
signals[FINISHED] =
@@ -400,76 +400,84 @@ static void
add_file (TrackerCrawler *crawler,
GFile *file)
{
- gchar *path;
+ g_return_if_fail (G_IS_FILE (file));
+ g_queue_push_tail (crawler->private->files, g_object_ref (file));
+}
+
+static void
+add_directory (TrackerCrawler *crawler,
+ GFile *file,
+ gboolean override)
+{
g_return_if_fail (G_IS_FILE (file));
+ if (crawler->private->recurse || override) {
+ g_queue_push_tail (crawler->private->directories, g_object_ref (file));
+ }
+}
+
+static gboolean
+process_file (TrackerCrawler *crawler,
+ GFile *file)
+{
+ gchar *path;
+ gboolean should_process = TRUE;
+
+ g_signal_emit (crawler, signals[PROCESS_FILE], 0, file, &should_process);
+
path = g_file_get_path (file);
-#ifdef FIX
- if (is_path_ignored (crawler, path, FALSE)) {
- crawler->private->files_ignored++;
+ crawler->private->files_found++;
- g_debug ("Ignored:'%s' (%d)",
+ if (should_process) {
+ g_debug ("Found :'%s' (%d)",
path,
crawler->private->enumerations);
- } else
-#endif
- {
- crawler->private->files_found++;
- g_debug ("Found :'%s' (%d)",
+ } else {
+ g_debug ("Ignored:'%s' (%d)",
path,
crawler->private->enumerations);
- g_queue_push_tail (crawler->private->files, g_object_ref (file));
+ crawler->private->files_ignored++;
}
g_free (path);
+
+ return should_process;
}
-static void
-add_directory (TrackerCrawler *crawler,
- GFile *file)
+static gboolean
+process_directory (TrackerCrawler *crawler,
+ GFile *file)
{
gchar *path;
+ gboolean should_process = TRUE;
- g_return_if_fail (G_IS_FILE (file));
+ g_signal_emit (crawler, signals[PROCESS_DIRECTORY], 0, file, &should_process);
path = g_file_get_path (file);
-#ifdef FIX
- if (is_path_ignored (crawler, path, TRUE)) {
- crawler->private->directories_ignored++;
+ crawler->private->directories_found++;
- g_debug ("Ignored:'%s' (%d)",
+ if (should_process) {
+ g_debug ("Found :'%s' (%d)",
path,
crawler->private->enumerations);
- } else
-#endif
- {
- g_debug ("Found :'%s' (%d)",
+
+ file_enumerate_children (crawler, file);
+ } else {
+ g_debug ("Ignored:'%s' (%d)",
path,
crawler->private->enumerations);
- g_queue_push_tail (crawler->private->directories, g_object_ref (file));
+ crawler->private->directories_ignored++;
}
g_free (path);
-}
-static void
-process_file (TrackerCrawler *crawler,
- GFile *file)
-{
- g_signal_emit (crawler, signals[PROCESSING_FILE], 0, file);
-}
-
-static void
-process_directory (TrackerCrawler *crawler,
- GFile *file)
-{
- file_enumerate_children (crawler, file);
+ return should_process;
}
static gboolean
@@ -693,25 +701,11 @@ enumerator_data_process (EnumeratorData *ed)
}
#endif
- crawler->private->directories_found++;
- g_signal_emit (crawler, signals[PROCESSING_DIRECTORY], 0, ed->parent);
-
g_hash_table_iter_init (&iter, ed->children);
while (g_hash_table_iter_next (&iter, NULL, (gpointer *) &cd)) {
if (cd->is_dir) {
- /* This is a bit of a hack, but we assume this is a
- * recursive lookup because the current non-recursive
- * path is NULL, meaning they have all been traversed
- * already.
- */
-#ifdef FIX
- if (crawler->private->paths_are_done) {
-#endif
- add_directory (crawler, cd->child);
-#ifdef FIX
- }
-#endif
+ add_directory (crawler, cd->child, FALSE);
} else {
add_file (crawler, cd->child);
}
@@ -1107,7 +1101,7 @@ tracker_crawler_start (TrackerCrawler *crawler,
priv->idle_id = g_idle_add (process_func, crawler);
/* Start things off */
- add_directory (crawler, file);
+ add_directory (crawler, file, TRUE);
g_object_unref (file);
return TRUE;
diff --git a/src/libtracker-miner/tracker-processor.c b/src/libtracker-miner/tracker-processor.c
index 32ec530..e67ea18 100644
--- a/src/libtracker-miner/tracker-processor.c
+++ b/src/libtracker-miner/tracker-processor.c
@@ -128,10 +128,10 @@ static void monitor_item_moved_cb (TrackerMonitor *monitor,
gboolean is_directory,
gboolean is_source_monitored,
gpointer user_data);
-static void crawler_processing_file_cb (TrackerCrawler *crawler,
+static gboolean crawler_process_file_cb (TrackerCrawler *crawler,
GFile *file,
gpointer user_data);
-static void crawler_processing_directory_cb (TrackerCrawler *crawler,
+static gboolean crawler_process_directory_cb (TrackerCrawler *crawler,
GFile *file,
gpointer user_data);
static void crawler_finished_cb (TrackerCrawler *crawler,
@@ -229,14 +229,14 @@ tracker_processor_finalize (GObject *object)
0,
0,
NULL,
- G_CALLBACK (crawler_processing_file_cb),
+ G_CALLBACK (crawler_process_file_cb),
NULL);
lsignals = g_signal_handlers_disconnect_matched (priv->crawler,
G_SIGNAL_MATCH_FUNC,
0,
0,
NULL,
- G_CALLBACK (crawler_processing_directory_cb),
+ G_CALLBACK (crawler_process_directory_cb),
NULL);
lsignals = g_signal_handlers_disconnect_matched (priv->crawler,
G_SIGNAL_MATCH_FUNC,
@@ -798,7 +798,7 @@ process_files_start (TrackerProcessor *processor)
/* Gets all files and directories */
tracker_status_set_and_signal (TRACKER_STATUS_PENDING);
- tracker_crawler_start (processor->private->crawler, g_get_home_dir (), TRUE);
+ tracker_crawler_start (processor->private->crawler, g_get_home_dir (), FALSE);
}
static void
@@ -1227,10 +1227,10 @@ monitor_item_moved_cb (TrackerMonitor *monitor,
}
}
-static void
-crawler_processing_file_cb (TrackerCrawler *crawler,
- GFile *file,
- gpointer user_data)
+static gboolean
+crawler_process_file_cb (TrackerCrawler *crawler,
+ GFile *file,
+ gpointer user_data)
{
TrackerProcessor *processor;
@@ -1241,12 +1241,14 @@ crawler_processing_file_cb (TrackerCrawler *crawler,
g_object_ref (file));
item_queue_handlers_set_up (processor);
+
+ return TRUE;
}
-static void
-crawler_processing_directory_cb (TrackerCrawler *crawler,
- GFile *file,
- gpointer user_data)
+static gboolean
+crawler_process_directory_cb (TrackerCrawler *crawler,
+ GFile *file,
+ gpointer user_data)
{
TrackerProcessor *processor;
gboolean add_monitor;
@@ -1269,6 +1271,8 @@ crawler_processing_directory_cb (TrackerCrawler *crawler,
g_object_ref (file));
item_queue_handlers_set_up (processor);
+
+ return TRUE;
}
static void
@@ -1428,11 +1432,11 @@ tracker_processor_new (TrackerStorage *storage)
/* Set up the crawlers now we have config and hal */
priv->crawler = tracker_crawler_new ();
- g_signal_connect (priv->crawler, "processing-file",
- G_CALLBACK (crawler_processing_file_cb),
+ g_signal_connect (priv->crawler, "process-file",
+ G_CALLBACK (crawler_process_file_cb),
processor);
- g_signal_connect (priv->crawler, "processing-directory",
- G_CALLBACK (crawler_processing_directory_cb),
+ g_signal_connect (priv->crawler, "process-directory",
+ G_CALLBACK (crawler_process_directory_cb),
processor);
g_signal_connect (priv->crawler, "finished",
G_CALLBACK (crawler_finished_cb),
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]