[tracker-miners/wip/carlosg/speed-track: 13/22] libtracker-miner: Avoid extra file queries to find hidden files




commit 9487ced526e2ea579f637eb139162b3f483d891f
Author: Carlos Garnacho <carlosg gnome org>
Date:   Sat Oct 17 14:01:46 2020 +0200

    libtracker-miner: Avoid extra file queries to find hidden files
    
    Delegate this (for the most part) on TrackerCrawler, as it is already
    in the business of fetching GFileInfos for inspected files. This avoids
    one extra stat() per folder.

 src/libtracker-miner/tracker-crawler.c       | 3 ++-
 src/libtracker-miner/tracker-file-notifier.c | 8 +++++++-
 src/libtracker-miner/tracker-indexing-tree.c | 2 +-
 src/miners/fs/tracker-main.c                 | 6 ++++--
 4 files changed, 14 insertions(+), 5 deletions(-)
---
diff --git a/src/libtracker-miner/tracker-crawler.c b/src/libtracker-miner/tracker-crawler.c
index 26b2d3f54..1a89254e6 100644
--- a/src/libtracker-miner/tracker-crawler.c
+++ b/src/libtracker-miner/tracker-crawler.c
@@ -27,7 +27,8 @@
 
 #define FILE_ATTRIBUTES          \
        G_FILE_ATTRIBUTE_STANDARD_NAME "," \
-       G_FILE_ATTRIBUTE_STANDARD_TYPE
+       G_FILE_ATTRIBUTE_STANDARD_TYPE "," \
+       G_FILE_ATTRIBUTE_STANDARD_IS_HIDDEN
 
 #define FILES_QUEUE_PROCESS_INTERVAL 2000
 #define FILES_QUEUE_PROCESS_MAX      5000
diff --git a/src/libtracker-miner/tracker-file-notifier.c b/src/libtracker-miner/tracker-file-notifier.c
index f3f1895fe..aeee44430 100644
--- a/src/libtracker-miner/tracker-file-notifier.c
+++ b/src/libtracker-miner/tracker-file-notifier.c
@@ -845,11 +845,16 @@ create_shallow_file_info (GFile    *file,
                           gboolean  is_directory)
 {
        GFileInfo *file_info;
+       gchar *basename;
 
        file_info = g_file_info_new ();
        g_file_info_set_file_type (file_info,
                                   is_directory ?
                                   G_FILE_TYPE_DIRECTORY : G_FILE_TYPE_REGULAR);
+       basename = g_file_get_basename (file);
+       g_file_info_set_is_hidden (file_info, basename[0] == '.');
+       g_free (basename);
+
        return file_info;
 }
 
@@ -1283,7 +1288,8 @@ indexing_tree_child_updated (TrackerIndexingTree *indexing_tree,
        priv = tracker_file_notifier_get_instance_private (notifier);
 
        child_info = g_file_query_info (child,
-                                       G_FILE_ATTRIBUTE_STANDARD_TYPE,
+                                       G_FILE_ATTRIBUTE_STANDARD_TYPE ","
+                                       G_FILE_ATTRIBUTE_STANDARD_IS_HIDDEN,
                                        G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
                                        NULL, NULL);
        if (!child_info)
diff --git a/src/libtracker-miner/tracker-indexing-tree.c b/src/libtracker-miner/tracker-indexing-tree.c
index 62ea105bb..58338449f 100644
--- a/src/libtracker-miner/tracker-indexing-tree.c
+++ b/src/libtracker-miner/tracker-indexing-tree.c
@@ -892,7 +892,7 @@ tracker_indexing_tree_file_is_indexable (TrackerIndexingTree *tree,
                }
 
                if (tracker_indexing_tree_get_filter_hidden (tree) &&
-                   tracker_file_is_hidden (file)) {
+                   info && g_file_info_get_is_hidden (info)) {
                        return FALSE;
                }
 
diff --git a/src/miners/fs/tracker-main.c b/src/miners/fs/tracker-main.c
index 077a6dbe3..8ae7e321d 100644
--- a/src/miners/fs/tracker-main.c
+++ b/src/miners/fs/tracker-main.c
@@ -596,7 +596,8 @@ check_eligible (void)
        /* Start check */
        file = g_file_new_for_commandline_arg (eligible);
        info = g_file_query_info (file,
-                                 G_FILE_ATTRIBUTE_STANDARD_TYPE,
+                                 G_FILE_ATTRIBUTE_STANDARD_TYPE ","
+                                 G_FILE_ATTRIBUTE_STANDARD_IS_HIDDEN,
                                  G_FILE_QUERY_INFO_NONE,
                                  NULL,
                                  &error);
@@ -883,7 +884,8 @@ update_indexed_files_from_proxy (TrackerMinerFiles *miner,
                }
 
                file_info = g_file_query_info (file,
-                                              G_FILE_ATTRIBUTE_STANDARD_TYPE,
+                                              G_FILE_ATTRIBUTE_STANDARD_TYPE ","
+                                              G_FILE_ATTRIBUTE_STANDARD_IS_HIDDEN,
                                               G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
                                               NULL, NULL);
 


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