[tracker/crawler-max-depth] Use crawler's max_depth param of start in file_system_traverse



commit 17ddb4b7c3ee8c413aa1ad1058671c37dccd77a9
Author: Philip Van Hoof <philip codeminded be>
Date:   Fri Dec 19 15:18:12 2014 +0100

    Use crawler's max_depth param of start in file_system_traverse

 src/libtracker-miner/tracker-crawler.c       |   20 ++++++++++++++
 src/libtracker-miner/tracker-crawler.h       |    1 +
 src/libtracker-miner/tracker-file-notifier.c |   35 +++++++++++++++++++------
 src/libtracker-miner/tracker-file-system.c   |    3 +-
 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 e5f2082..4b5da1e 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 0991fa1..1395e3a 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 dc1abb2..1cddc56 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 72943b0..696f482 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 a27a449..fe83c5f 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,


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