[tracker/external-crawler: 34/41] libtracker-miner: Added tracker_indexing_tree_get_master_root() and set in constructed()



commit 2a4284f890306997cbac4f6db69db04f51eb9185
Author: Martyn Russell <martyn lanedo com>
Date:   Tue Jul 1 10:42:31 2014 +0100

    libtracker-miner: Added tracker_indexing_tree_get_master_root() and set in constructed()
    
    This function gets the top level root for all roots, e.g. file:///
    
    We also create the root nodes in constructed() not init() because then the
    root GFile has been set in the properties when the object is initiated

 .../libtracker-miner/libtracker-miner-sections.txt |    1 +
 src/libtracker-miner/tracker-indexing-tree.c       |   68 +++++++++++++++++---
 src/libtracker-miner/tracker-indexing-tree.h       |    2 +
 3 files changed, 61 insertions(+), 10 deletions(-)
---
diff --git a/docs/reference/libtracker-miner/libtracker-miner-sections.txt 
b/docs/reference/libtracker-miner/libtracker-miner-sections.txt
index 906dfa4..965d8df 100644
--- a/docs/reference/libtracker-miner/libtracker-miner-sections.txt
+++ b/docs/reference/libtracker-miner/libtracker-miner-sections.txt
@@ -11,6 +11,7 @@ tracker_indexing_tree_file_is_root
 tracker_indexing_tree_file_matches_filter
 tracker_indexing_tree_get_default_policy
 tracker_indexing_tree_get_filter_hidden
+tracker_indexing_tree_get_master_root
 tracker_indexing_tree_get_root
 tracker_indexing_tree_list_roots
 tracker_indexing_tree_new
diff --git a/src/libtracker-miner/tracker-indexing-tree.c b/src/libtracker-miner/tracker-indexing-tree.c
index 63b881d..79a9c9d 100644
--- a/src/libtracker-miner/tracker-indexing-tree.c
+++ b/src/libtracker-miner/tracker-indexing-tree.c
@@ -190,6 +190,29 @@ tracker_indexing_tree_set_property (GObject      *object,
 }
 
 static void
+tracker_indexing_tree_constructed (GObject *object)
+{
+       TrackerIndexingTree *tree;
+       TrackerIndexingTreePrivate *priv;
+       NodeData *data;
+
+       G_OBJECT_CLASS (tracker_indexing_tree_parent_class)->constructed (object);
+
+       tree = TRACKER_INDEXING_TREE (object);
+       priv = tree->priv;
+
+       /* Add a shallow root node */
+       if (priv->root == NULL) {
+               priv->root = g_file_new_for_uri ("file:///");
+       }
+
+       data = node_data_new (priv->root, 0);
+       data->shallow = TRUE;
+
+       priv->config_tree = g_node_new (data);
+}
+
+static void
 tracker_indexing_tree_finalize (GObject *object)
 {
        TrackerIndexingTreePrivate *priv;
@@ -222,6 +245,7 @@ tracker_indexing_tree_class_init (TrackerIndexingTreeClass *klass)
        GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
        object_class->finalize = tracker_indexing_tree_finalize;
+       object_class->constructed = tracker_indexing_tree_constructed;
        object_class->set_property = tracker_indexing_tree_set_property;
        object_class->get_property = tracker_indexing_tree_get_property;
 
@@ -276,21 +300,11 @@ static void
 tracker_indexing_tree_init (TrackerIndexingTree *tree)
 {
        TrackerIndexingTreePrivate *priv;
-       NodeData *data;
        gint i;
 
        priv = tree->priv = G_TYPE_INSTANCE_GET_PRIVATE (tree,
                                                         TRACKER_TYPE_INDEXING_TREE,
                                                         TrackerIndexingTreePrivate);
-       /* Add a shallow root node */
-       if (priv->root == NULL) {
-               priv->root = g_file_new_for_uri ("file:///");
-       }
-
-       data = node_data_new (priv->root, 0);
-       data->shallow = TRUE;
-
-       priv->config_tree = g_node_new (data);
 
        for (i = TRACKER_FILTER_FILE; i <= TRACKER_FILTER_PARENT_DIRECTORY; i++) {
                priv->policies[i] = TRACKER_FILTER_POLICY_ACCEPT;
@@ -866,6 +880,40 @@ tracker_indexing_tree_get_root (TrackerIndexingTree   *tree,
        return NULL;
 }
 
+/**
+ * tracker_indexing_tree_get_master_root:
+ * @tree: a #TrackerIndexingTree
+ *
+ * Returns the #GFile that represents the master root location for all
+ * indexing locations. For example, if
+ * <filename>file:///etc</filename> is an indexed path and so was
+ * <filename>file:///home/user</filename>, the master root is
+ * <filename>file:///</filename>. Only one scheme per @tree can be
+ * used, so you can not mix <filename>http</filename> and
+ * <filename>file</filename> roots in @tree.
+ *
+ * The return value should <emphasis>NEVER</emphasis> be %NULL. In
+ * cases where no root is given, we fallback to
+ * <filename>file:///</filename>.
+ *
+ * Returns: (transfer none): the effective root for all locations, or
+ * %NULL on error. The root is owned by @tree and should not be freed.
+ * It can be referenced using g_object_ref().
+ *
+ * Since: 1.2.
+ **/
+GFile *
+tracker_indexing_tree_get_master_root (TrackerIndexingTree *tree)
+{
+       TrackerIndexingTreePrivate *priv;
+
+       g_return_val_if_fail (TRACKER_IS_INDEXING_TREE (tree), NULL);
+
+       priv = tree->priv;
+
+       return priv->root;
+}
+
 gboolean
 tracker_indexing_tree_file_is_root (TrackerIndexingTree *tree,
                                     GFile               *file)
diff --git a/src/libtracker-miner/tracker-indexing-tree.h b/src/libtracker-miner/tracker-indexing-tree.h
index 87b98c8..1f6533c 100644
--- a/src/libtracker-miner/tracker-indexing-tree.h
+++ b/src/libtracker-miner/tracker-indexing-tree.h
@@ -114,6 +114,8 @@ void                tracker_indexing_tree_set_default_policy (TrackerIndexingTre
 GFile *   tracker_indexing_tree_get_root             (TrackerIndexingTree   *tree,
                                                       GFile                 *file,
                                                       TrackerDirectoryFlags *directory_flags);
+GFile *   tracker_indexing_tree_get_master_root      (TrackerIndexingTree   *tree);
+
 gboolean  tracker_indexing_tree_file_is_root         (TrackerIndexingTree   *tree,
                                                       GFile                 *file);
 


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