[tracker] libtracker-miner: Add tracker_indexing_tree_notify_update()



commit c0f0dba4f6a6cd669edd9f5ead0bf0a098888e3b
Author: Carlos Garnacho <carlosg gnome org>
Date:   Wed May 25 00:31:38 2016 +0200

    libtracker-miner: Add tracker_indexing_tree_notify_update()
    
    This function notifies about updates in either an indexing root,
    or a child of it. The typical reaction will be reindexing the
    element.
    
    This will replace the several ad-hoc emissions of
    ::directory-updated over the place.

 src/libtracker-miner/tracker-indexing-tree.c |   61 ++++++++++++++++++++++++++
 src/libtracker-miner/tracker-indexing-tree.h |    3 +
 2 files changed, 64 insertions(+), 0 deletions(-)
---
diff --git a/src/libtracker-miner/tracker-indexing-tree.c b/src/libtracker-miner/tracker-indexing-tree.c
index c95d3e8..42f6955 100644
--- a/src/libtracker-miner/tracker-indexing-tree.c
+++ b/src/libtracker-miner/tracker-indexing-tree.c
@@ -619,6 +619,67 @@ tracker_indexing_tree_remove (TrackerIndexingTree *tree,
 }
 
 /**
+ * tracker_indexing_tree_notify_update:
+ * @tree: a #TrackerIndexingTree
+ * @file: a #GFile
+ * @recursive: Whether contained indexing roots are affected by the update
+ *
+ * Signals either #TrackerIndexingTree::directory-updated or
+ * #TrackerIndexingTree::child-updated on the given file and
+ * returns #TRUE. If @file is not indexed according to the
+ * #TrackerIndexingTree, #FALSE is returned.
+ *
+ * If @recursive is #TRUE, #TrackerIndexingTree::directory-updated
+ * will be emitted on the indexing roots that are contained in @file.
+ *
+ * Returns: #TRUE if a signal is emitted.
+ *
+ * Since: 1.10
+ **/
+gboolean
+tracker_indexing_tree_notify_update (TrackerIndexingTree *tree,
+                                     GFile               *file,
+                                     gboolean             recursive)
+{
+       TrackerDirectoryFlags flags;
+       gboolean emitted = FALSE;
+       GFile *root;
+
+       g_return_val_if_fail (TRACKER_IS_INDEXING_TREE (tree), FALSE);
+       g_return_val_if_fail (G_IS_FILE (file), FALSE);
+
+       root = tracker_indexing_tree_get_root (tree, file, &flags);
+
+       if (tracker_indexing_tree_file_is_root (tree, file)) {
+               g_signal_emit (tree, signals[DIRECTORY_UPDATED], 0, root);
+               emitted = TRUE;
+       } else if (root &&
+                  ((flags & TRACKER_DIRECTORY_FLAG_RECURSE) ||
+                   g_file_has_parent (file, root))) {
+               g_signal_emit (tree, signals[CHILD_UPDATED], 0, root, file);
+               emitted = TRUE;
+       }
+
+       if (recursive) {
+               GList *roots, *l;
+
+               roots = tracker_indexing_tree_list_roots (tree);
+
+               for (l = roots; l; l = l->next) {
+                       if (!g_file_has_prefix (l->data, file))
+                               continue;
+
+                       g_signal_emit (tree, signals[DIRECTORY_UPDATED], 0, l->data);
+                       emitted = TRUE;
+               }
+
+               g_list_free (roots);
+       }
+
+       return emitted;
+}
+
+/**
  * tracker_indexing_tree_add_filter:
  * @tree: a #TrackerIndexingTree
  * @filter: filter type
diff --git a/src/libtracker-miner/tracker-indexing-tree.h b/src/libtracker-miner/tracker-indexing-tree.h
index ab4dc24..5b5ff4f 100644
--- a/src/libtracker-miner/tracker-indexing-tree.h
+++ b/src/libtracker-miner/tracker-indexing-tree.h
@@ -88,6 +88,9 @@ void      tracker_indexing_tree_add                  (TrackerIndexingTree   *tre
                                                       TrackerDirectoryFlags  flags);
 void      tracker_indexing_tree_remove               (TrackerIndexingTree   *tree,
                                                       GFile                 *directory);
+gboolean  tracker_indexing_tree_notify_update        (TrackerIndexingTree   *tree,
+                                                      GFile                 *root,
+                                                      gboolean               recursive);
 
 void      tracker_indexing_tree_add_filter           (TrackerIndexingTree  *tree,
                                                       TrackerFilterType     filter,


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