diff options
author | Philip Van Hoof <philip@codeminded.be> | 2014-12-19 15:18:12 +0100 |
---|---|---|
committer | Philip Van Hoof <philip@codeminded.be> | 2014-12-22 13:38:13 +0100 |
commit | 41e6ab84e7a540b20f8173c2bbaee11de6ef381f (patch) | |
tree | 31e836f1a434031a57f45008cca2edfc99281b87 | |
parent | 50dc59e060b11a94e5cdbb9859c15da9a0531738 (diff) | |
download | tracker-41e6ab84e7a540b20f8173c2bbaee11de6ef381f.tar.gz |
Use crawler's max_depth param of start in file_system_traverse
-rw-r--r-- | src/libtracker-miner/tracker-crawler.c | 20 | ||||
-rw-r--r-- | src/libtracker-miner/tracker-crawler.h | 1 | ||||
-rw-r--r-- | src/libtracker-miner/tracker-file-notifier.c | 35 | ||||
-rw-r--r-- | src/libtracker-miner/tracker-file-system.c | 3 | ||||
-rw-r--r-- | src/libtracker-miner/tracker-file-system.h | 1 |
5 files changed, 50 insertions, 10 deletions
diff --git a/src/libtracker-miner/tracker-crawler.c b/src/libtracker-miner/tracker-crawler.c index e5f208276..4b5da1e80 100644 --- a/src/libtracker-miner/tracker-crawler.c +++ b/src/libtracker-miner/tracker-crawler.c @@ -106,6 +106,8 @@ struct TrackerCrawlerPrivate { gboolean is_finished; gboolean is_paused; gboolean was_started; + + gint max_depth; }; enum { @@ -245,6 +247,7 @@ tracker_crawler_init (TrackerCrawler *object) priv = object->priv; + priv->max_depth = -1; priv->directories = g_queue_new (); } @@ -1098,6 +1101,7 @@ tracker_crawler_start (TrackerCrawler *crawler, /* Set as running now */ priv->is_running = TRUE; priv->is_finished = FALSE; + priv->max_depth = max_depth; info = directory_root_info_new (file, max_depth, priv->file_attributes, flags); @@ -1250,6 +1254,22 @@ tracker_crawler_get_file_attributes (TrackerCrawler *crawler) } /** + * tracker_crawler_get_max_depth: + * @crawler: a #TrackerCrawler + * + * Returns the max depth that @crawler got passed on tracker_crawler_start + * + * Returns: the max depth + **/ + +gint +tracker_crawler_get_max_depth (TrackerCrawler *crawler) +{ + g_return_val_if_fail (TRACKER_IS_CRAWLER (crawler), NULL); + return crawler->priv->max_depth; +} + +/** * tracker_crawler_get_file_info: * @crawler: a #TrackerCrawler * @file: a #GFile returned by @crawler diff --git a/src/libtracker-miner/tracker-crawler.h b/src/libtracker-miner/tracker-crawler.h index 0991fa184..1395e3a80 100644 --- a/src/libtracker-miner/tracker-crawler.h +++ b/src/libtracker-miner/tracker-crawler.h @@ -89,6 +89,7 @@ const gchar * tracker_crawler_get_file_attributes (TrackerCrawler *crawler); GFileInfo * tracker_crawler_get_file_info (TrackerCrawler *crawler, GFile *file); +gint tracker_crawler_get_max_depth (TrackerCrawler *crawler); G_END_DECLS diff --git a/src/libtracker-miner/tracker-file-notifier.c b/src/libtracker-miner/tracker-file-notifier.c index dc1abb26a..1cddc5600 100644 --- a/src/libtracker-miner/tracker-file-notifier.c +++ b/src/libtracker-miner/tracker-file-notifier.c @@ -96,6 +96,11 @@ typedef struct { GFile *cur_parent; } DirectoryCrawledData; +typedef struct { + TrackerFileNotifier *notifier; + gint max_depth; +} SparqlStartData; + static gboolean crawl_directories_start (TrackerFileNotifier *notifier); G_DEFINE_TYPE (TrackerFileNotifier, tracker_file_notifier, G_TYPE_OBJECT) @@ -342,7 +347,7 @@ notifier_check_next_root (TrackerFileNotifier *notifier) } static void -file_notifier_traverse_tree (TrackerFileNotifier *notifier) +file_notifier_traverse_tree (TrackerFileNotifier *notifier, gint max_depth) { TrackerFileNotifierPrivate *priv; GFile *config_root, *directory; @@ -361,6 +366,7 @@ file_notifier_traverse_tree (TrackerFileNotifier *notifier) directory, G_LEVEL_ORDER, file_notifier_traverse_tree_foreach, + max_depth, notifier); } } @@ -721,12 +727,13 @@ sparql_files_query_cb (GObject *object, GAsyncResult *result, gpointer user_data) { + SparqlStartData *data = user_data; TrackerFileNotifierPrivate *priv; TrackerFileNotifier *notifier; TrackerSparqlCursor *cursor; GError *error = NULL; - notifier = user_data; + notifier = data->notifier; priv = notifier->priv; cursor = tracker_sparql_connection_query_finish (TRACKER_SPARQL_CONNECTION (object), @@ -739,7 +746,7 @@ sparql_files_query_cb (GObject *object, g_object_unref (cursor); } - file_notifier_traverse_tree (notifier); + file_notifier_traverse_tree (notifier, data->max_depth); if (priv->current_index_root->updated_dirs->len > 0) { /* Updated directories have been found, check for deleted contents in those */ @@ -750,6 +757,8 @@ sparql_files_query_cb (GObject *object, } else { finish_current_directory (notifier); } + + g_free (data); } static gchar * @@ -779,11 +788,16 @@ sparql_files_compose_query (GFile **files, static void sparql_files_query_start (TrackerFileNotifier *notifier, - GFile **files, - guint n_files) + GFile **files, + guint n_files, + gint max_depth) { TrackerFileNotifierPrivate *priv; gchar *sparql; + SparqlStartData *data = g_new (SparqlStartData, 1); + + data->notifier = notifier; + data->max_depth = max_depth; priv = notifier->priv; sparql = sparql_files_compose_query (files, n_files); @@ -791,7 +805,7 @@ sparql_files_query_start (TrackerFileNotifier *notifier, sparql, priv->cancellable, sparql_files_query_cb, - notifier); + data); g_free (sparql); } @@ -862,6 +876,7 @@ crawler_finished_cb (TrackerCrawler *crawler, TrackerFileNotifier *notifier = user_data; TrackerFileNotifierPrivate *priv = notifier->priv; GFile *directory; + gint max_depth = -1; g_assert (priv->current_index_root != NULL); @@ -870,6 +885,8 @@ crawler_finished_cb (TrackerCrawler *crawler, return; } + max_depth = tracker_crawler_get_max_depth (crawler); + directory = g_queue_peek_head (priv->current_index_root->pending_dirs); if (priv->current_index_root->query_files->len > 0 && @@ -877,11 +894,11 @@ crawler_finished_cb (TrackerCrawler *crawler, tracker_file_system_get_property (priv->file_system, directory, quark_property_iri))) { sparql_files_query_start (notifier, - (GFile**) priv->current_index_root->query_files->pdata, - priv->current_index_root->query_files->len); + (GFile**) priv->current_index_root->query_files->pdata, + priv->current_index_root->query_files->len, max_depth); g_ptr_array_set_size (priv->current_index_root->query_files, 0); } else { - file_notifier_traverse_tree (notifier); + file_notifier_traverse_tree (notifier, max_depth); finish_current_directory (notifier); } } diff --git a/src/libtracker-miner/tracker-file-system.c b/src/libtracker-miner/tracker-file-system.c index 72943b03b..696f48275 100644 --- a/src/libtracker-miner/tracker-file-system.c +++ b/src/libtracker-miner/tracker-file-system.c @@ -705,6 +705,7 @@ tracker_file_system_traverse (TrackerFileSystem *file_system, GFile *root, GTraverseType order, TrackerFileSystemTraverseFunc func, + gint max_depth, gpointer user_data) { TrackerFileSystemPrivate *priv; @@ -729,7 +730,7 @@ tracker_file_system_traverse (TrackerFileSystem *file_system, g_node_traverse (node, order, G_TRAVERSE_ALL, - -1, + max_depth, traverse_filesystem_func, &data); diff --git a/src/libtracker-miner/tracker-file-system.h b/src/libtracker-miner/tracker-file-system.h index a27a44937..fe83c5f26 100644 --- a/src/libtracker-miner/tracker-file-system.h +++ b/src/libtracker-miner/tracker-file-system.h @@ -70,6 +70,7 @@ void tracker_file_system_traverse (TrackerFileSystem GFile *root, GTraverseType order, TrackerFileSystemTraverseFunc func, + gint max_depth, gpointer user_data); void tracker_file_system_forget_files (TrackerFileSystem *file_system, |