summaryrefslogtreecommitdiff
path: root/src/libtracker-miner/tracker-miner-fs.c
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2017-07-02 13:05:31 +0200
committerCarlos Garnacho <carlosg@gnome.org>2017-07-02 20:59:23 +0200
commit379b27a868d8fbd7e67b8df7bfd6f6304fd124f4 (patch)
tree65b7db1505b29689676253b0db3a16d5361a8bb7 /src/libtracker-miner/tracker-miner-fs.c
parentce93198ba84d3f8f45e33212c4e746d1ff798670 (diff)
downloadtracker-379b27a868d8fbd7e67b8df7bfd6f6304fd124f4.tar.gz
libtracker-miner: Add filter_event vmethod
This is not a signal because external users of a TrackerMiner have no business in modifying behavior at this level, this is reserved for subclasses that presumably know what they are doing. This vmethod is toggled for every event that gets received from the TrackerFileNotifier, before the file gets to hit any processing queue.
Diffstat (limited to 'src/libtracker-miner/tracker-miner-fs.c')
-rw-r--r--src/libtracker-miner/tracker-miner-fs.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/libtracker-miner/tracker-miner-fs.c b/src/libtracker-miner/tracker-miner-fs.c
index 294409039..deef0d101 100644
--- a/src/libtracker-miner/tracker-miner-fs.c
+++ b/src/libtracker-miner/tracker-miner-fs.c
@@ -2472,6 +2472,20 @@ check_item_queues (TrackerMinerFS *fs,
return TRUE;
}
+static gboolean
+filter_event (TrackerMinerFS *fs,
+ TrackerMinerFSEventType type,
+ GFile *file,
+ GFile *source_file)
+{
+ TrackerMinerFSClass *klass = TRACKER_MINER_FS_GET_CLASS (fs);
+
+ if (!klass->filter_event)
+ return FALSE;
+
+ return klass->filter_event (fs, type, file, source_file);
+}
+
static void
file_notifier_file_created (TrackerFileNotifier *notifier,
GFile *file,
@@ -2479,6 +2493,9 @@ file_notifier_file_created (TrackerFileNotifier *notifier,
{
TrackerMinerFS *fs = user_data;
+ if (filter_event (fs, TRACKER_MINER_FS_EVENT_CREATED, file, NULL))
+ return;
+
if (check_item_queues (fs, QUEUE_CREATED, file, NULL)) {
miner_fs_queue_file (fs, fs->priv->items_created, file, FALSE);
item_queue_handlers_set_up (fs);
@@ -2492,6 +2509,9 @@ file_notifier_file_deleted (TrackerFileNotifier *notifier,
{
TrackerMinerFS *fs = user_data;
+ if (filter_event (fs, TRACKER_MINER_FS_EVENT_DELETED, file, NULL))
+ return;
+
if (tracker_file_notifier_get_file_type (notifier, file) == G_FILE_TYPE_DIRECTORY) {
/* Cancel all pending tasks on files inside the path given by file */
tracker_task_pool_foreach (fs->priv->task_pool,
@@ -2516,6 +2536,10 @@ file_notifier_file_updated (TrackerFileNotifier *notifier,
{
TrackerMinerFS *fs = user_data;
+ if (!attributes_only &&
+ filter_event (fs, TRACKER_MINER_FS_EVENT_UPDATED, file, NULL))
+ return;
+
/* Writeback tasks would receive an updated after move,
* consequence of the data being written back in the
* copy, and its monitor events being propagated to
@@ -2547,6 +2571,9 @@ file_notifier_file_moved (TrackerFileNotifier *notifier,
{
TrackerMinerFS *fs = user_data;
+ if (filter_event (fs, TRACKER_MINER_FS_EVENT_MOVED, dest, source))
+ return;
+
if (check_item_queues (fs, QUEUE_MOVED, source, dest)) {
gint priority;