summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2017-10-09 23:07:11 +0200
committerCarlos Garnacho <carlosg@gnome.org>2017-11-14 22:45:26 +0100
commit76805bfdd9c0ef5d30d89746f6e5a053eaa557f2 (patch)
tree168f3d25aff9081b2771398b90991c39e356cc2e
parent827f3e5d08e24195ff616765d5c980671a4e5578 (diff)
downloadtracker-76805bfdd9c0ef5d30d89746f6e5a053eaa557f2.tar.gz
libtracker-miner: Properly honor TRACKER_DIRECTORY_FLAG_CHECK_MTIME
TrackerFileNotifier actually triggered mtime checks more often than necessary. All of the sparql queries can be skip, also storing the filesystem mtimes (because no sparql mtimes will be queried to compare with). We just need setting up our TrackerFileSystem tree, and adding directory monitors, so do this bare minimum.
-rw-r--r--src/libtracker-miner/tracker-file-notifier.c42
1 files changed, 21 insertions, 21 deletions
diff --git a/src/libtracker-miner/tracker-file-notifier.c b/src/libtracker-miner/tracker-file-notifier.c
index eb05e6133..69758136f 100644
--- a/src/libtracker-miner/tracker-file-notifier.c
+++ b/src/libtracker-miner/tracker-file-notifier.c
@@ -356,25 +356,19 @@ static void
file_notifier_traverse_tree (TrackerFileNotifier *notifier)
{
TrackerFileNotifierPrivate *priv;
- GFile *config_root, *directory;
- TrackerDirectoryFlags flags;
+ GFile *directory;
priv = notifier->priv;
g_assert (priv->current_index_root != NULL);
directory = priv->current_index_root->current_dir;
- config_root = tracker_indexing_tree_get_root (priv->indexing_tree,
- directory, &flags);
/* We want the directory and its direct contents, hence depth=2 */
- if (config_root != directory ||
- flags & TRACKER_DIRECTORY_FLAG_CHECK_MTIME) {
- tracker_file_system_traverse (priv->file_system,
- directory,
- G_LEVEL_ORDER,
- file_notifier_traverse_tree_foreach,
- 2, notifier);
- }
+ tracker_file_system_traverse (priv->file_system,
+ directory,
+ G_LEVEL_ORDER,
+ file_notifier_traverse_tree_foreach,
+ 2, notifier);
}
static gboolean
@@ -431,15 +425,18 @@ file_notifier_add_node_foreach (GNode *node,
file, file_type,
data->cur_parent);
- time = g_file_info_get_attribute_uint64 (file_info,
- G_FILE_ATTRIBUTE_TIME_MODIFIED);
+ if (priv->current_index_root->flags & TRACKER_DIRECTORY_FLAG_CHECK_MTIME) {
+ time = g_file_info_get_attribute_uint64 (file_info,
+ G_FILE_ATTRIBUTE_TIME_MODIFIED);
- time_ptr = g_new (guint64, 1);
- *time_ptr = time;
+ time_ptr = g_new (guint64, 1);
+ *time_ptr = time;
+
+ tracker_file_system_set_property (priv->file_system, canonical,
+ quark_property_filesystem_mtime,
+ time_ptr);
+ }
- tracker_file_system_set_property (priv->file_system, canonical,
- quark_property_filesystem_mtime,
- time_ptr);
g_object_unref (file_info);
if (file_type == G_FILE_TYPE_DIRECTORY && !G_NODE_IS_ROOT (node)) {
@@ -983,6 +980,7 @@ crawler_finished_cb (TrackerCrawler *crawler,
TrackerFileNotifier *notifier = user_data;
TrackerFileNotifierPrivate *priv = notifier->priv;
GFile *directory;
+ gboolean check_mtime;
g_assert (priv->current_index_root != NULL);
@@ -992,8 +990,9 @@ crawler_finished_cb (TrackerCrawler *crawler,
}
directory = priv->current_index_root->current_dir;
+ check_mtime = (priv->current_index_root->flags & TRACKER_DIRECTORY_FLAG_CHECK_MTIME);
- if (priv->current_index_root->query_files->len > 0 &&
+ if (priv->current_index_root->query_files->len > 0 && check_mtime &&
(directory == priv->current_index_root->root ||
tracker_file_system_get_property (priv->file_system,
directory, quark_property_iri))) {
@@ -1003,7 +1002,8 @@ crawler_finished_cb (TrackerCrawler *crawler,
g_ptr_array_set_size (priv->current_index_root->query_files, 0);
} else {
g_ptr_array_set_size (priv->current_index_root->query_files, 0);
- file_notifier_traverse_tree (notifier);
+ if (check_mtime)
+ file_notifier_traverse_tree (notifier);
finish_current_directory (notifier, FALSE);
}
}