summaryrefslogtreecommitdiff
path: root/src/libtracker-miner/tracker-miner-fs.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libtracker-miner/tracker-miner-fs.c')
-rw-r--r--src/libtracker-miner/tracker-miner-fs.c72
1 files changed, 47 insertions, 25 deletions
diff --git a/src/libtracker-miner/tracker-miner-fs.c b/src/libtracker-miner/tracker-miner-fs.c
index fc7a0da9e..1bf742e33 100644
--- a/src/libtracker-miner/tracker-miner-fs.c
+++ b/src/libtracker-miner/tracker-miner-fs.c
@@ -2508,6 +2508,30 @@ cancel_writeback_task (TrackerMinerFS *fs,
}
}
+static gint
+miner_fs_get_queue_priority (TrackerMinerFS *fs,
+ GFile *file)
+{
+ TrackerDirectoryFlags flags;
+
+ tracker_indexing_tree_get_root (fs->priv->indexing_tree,
+ file, &flags);
+
+ return (flags & TRACKER_DIRECTORY_FLAG_PRIORITY) ?
+ G_PRIORITY_HIGH : G_PRIORITY_DEFAULT;
+}
+
+static void
+miner_fs_queue_file (TrackerMinerFS *fs,
+ TrackerPriorityQueue *item_queue,
+ GFile *file)
+{
+ gint priority;
+
+ priority = miner_fs_get_queue_priority (fs, file);
+ tracker_priority_queue_add (item_queue, g_object_ref (file), priority);
+}
+
/* Checks previous created/updated/deleted/moved/writeback queues for
* monitor events. Returns TRUE if the item should still
* be added to the queue.
@@ -2634,9 +2658,7 @@ check_item_queues (TrackerMinerFS *fs,
*/
g_debug (" Found matching unhandled CREATED event "
"for source file, merging both events together");
- tracker_priority_queue_add (fs->priv->items_created,
- g_object_ref (other_file),
- G_PRIORITY_DEFAULT);
+ miner_fs_queue_file (fs, fs->priv->items_created, other_file);
return FALSE;
}
@@ -2671,9 +2693,7 @@ file_notifier_file_created (TrackerFileNotifier *notifier,
TrackerMinerFS *fs = user_data;
if (check_item_queues (fs, QUEUE_CREATED, file, NULL)) {
- tracker_priority_queue_add (fs->priv->items_created,
- g_object_ref (file),
- G_PRIORITY_DEFAULT);
+ miner_fs_queue_file (fs, fs->priv->items_created, file);
item_queue_handlers_set_up (fs);
}
}
@@ -2686,9 +2706,7 @@ file_notifier_file_deleted (TrackerFileNotifier *notifier,
TrackerMinerFS *fs = user_data;
if (check_item_queues (fs, QUEUE_DELETED, file, NULL)) {
- tracker_priority_queue_add (fs->priv->items_deleted,
- g_object_ref (file),
- G_PRIORITY_DEFAULT);
+ miner_fs_queue_file (fs, fs->priv->items_deleted, file);
item_queue_handlers_set_up (fs);
}
}
@@ -2719,9 +2737,7 @@ file_notifier_file_updated (TrackerFileNotifier *notifier,
GINT_TO_POINTER (TRUE));
}
- tracker_priority_queue_add (fs->priv->items_updated,
- g_object_ref (file),
- G_PRIORITY_DEFAULT);
+ miner_fs_queue_file (fs, fs->priv->items_updated, file);
item_queue_handlers_set_up (fs);
}
}
@@ -2735,9 +2751,12 @@ file_notifier_file_moved (TrackerFileNotifier *notifier,
TrackerMinerFS *fs = user_data;
if (check_item_queues (fs, QUEUE_MOVED, source, dest)) {
+ gint priority;
+
+ priority = miner_fs_get_queue_priority (fs, dest);
tracker_priority_queue_add (fs->priv->items_moved,
item_moved_data_new (dest, source),
- G_PRIORITY_DEFAULT);
+ priority);
item_queue_handlers_set_up (fs);
}
}
@@ -3041,9 +3060,7 @@ tracker_miner_fs_directory_remove_full (TrackerMinerFS *fs,
* to preserve remove_full() semantics.
*/
trace_eq_push_tail ("DELETED", file, "on remove full");
- tracker_priority_queue_add (fs->priv->items_deleted,
- g_object_ref (file),
- G_PRIORITY_DEFAULT);
+ miner_fs_queue_file (fs, fs->priv->items_deleted, file);
item_queue_handlers_set_up (fs);
}
@@ -3087,9 +3104,8 @@ check_file_parents (TrackerMinerFS *fs,
for (p = parents; p; p = p->next) {
trace_eq_push_tail ("UPDATED", p->data, "checking file parents");
- tracker_priority_queue_add (fs->priv->items_updated,
- p->data,
- G_PRIORITY_DEFAULT);
+ miner_fs_queue_file (fs, fs->priv->items_updated, p->data);
+ g_object_unref (p->data);
}
g_list_free (parents);
@@ -3313,16 +3329,22 @@ tracker_miner_fs_check_directory_with_priority (TrackerMinerFS *fs,
path);
if (should_process) {
+ TrackerDirectoryFlags flags;
+
if (check_parents && !check_file_parents (fs, file)) {
return;
}
- /* FIXME: Apply priority */
+ flags = TRACKER_DIRECTORY_FLAG_RECURSE |
+ TRACKER_DIRECTORY_FLAG_CHECK_MTIME |
+ TRACKER_DIRECTORY_FLAG_MONITOR;
+
+ /* Priorities run from positive to negative */
+ if (priority < G_PRIORITY_DEFAULT)
+ flags |= TRACKER_DIRECTORY_FLAG_PRIORITY;
+
tracker_indexing_tree_add (fs->priv->indexing_tree,
- file,
- TRACKER_DIRECTORY_FLAG_RECURSE |
- TRACKER_DIRECTORY_FLAG_CHECK_MTIME |
- TRACKER_DIRECTORY_FLAG_MONITOR);
+ file, flags);
}
g_free (path);
@@ -3346,7 +3368,7 @@ tracker_miner_fs_check_directory (TrackerMinerFS *fs,
gboolean check_parents)
{
tracker_miner_fs_check_directory_with_priority (fs, file,
- G_PRIORITY_DEFAULT,
+ G_PRIORITY_HIGH,
check_parents);
}