[tracker] libtracker-miner: Add tracker_indexing_tree_notify_update()
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker] libtracker-miner: Add tracker_indexing_tree_notify_update()
- Date: Sat, 28 May 2016 22:15:54 +0000 (UTC)
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]