summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Van Hoof <philip@codeminded.be>2014-12-19 15:18:12 +0100
committerPhilip Van Hoof <philip@codeminded.be>2014-12-19 15:18:12 +0100
commit17ddb4b7c3ee8c413aa1ad1058671c37dccd77a9 (patch)
tree7f4059c257cd31f8c8c1835f278555c9dba65d7b
parent7160ae5cfe8da5074d73d38d8b62659b263b2b67 (diff)
downloadtracker-crawler-max-depth.tar.gz
Use crawler's max_depth param of start in file_system_traversecrawler-max-depth
-rw-r--r--src/libtracker-miner/tracker-crawler.c20
-rw-r--r--src/libtracker-miner/tracker-crawler.h1
-rw-r--r--src/libtracker-miner/tracker-file-notifier.c35
-rw-r--r--src/libtracker-miner/tracker-file-system.c3
-rw-r--r--src/libtracker-miner/tracker-file-system.h1
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,