[tracker-miners/sam/file-processed-signal: 5/9] miners/fs: Send file-processed signal when a file is ignored by config



commit ab23c4d85ce439e6154c62c3475b881ea34f4239
Author: Sam Thursfield <sam afuera me uk>
Date:   Sat Mar 21 16:39:31 2020 +0100

    miners/fs: Send file-processed signal when a file is ignored by config
    
    Internally, this adds a ::file-ignored-during-crawl to
    TrackerFileNotifier. The miner-fs uses this to emit file-processed
    for files and directories that have been ignored at crawl time.
    
    This allows tools like `tracker index` to inform the user about the
    status of their request to index a file.

 src/libtracker-miner/tracker-file-notifier.c | 37 +++++++++++++++++++++++-----
 src/libtracker-miner/tracker-file-notifier.h |  3 +++
 src/libtracker-miner/tracker-miner-fs.c      | 16 ++++++++++++
 3 files changed, 50 insertions(+), 6 deletions(-)
---
diff --git a/src/libtracker-miner/tracker-file-notifier.c b/src/libtracker-miner/tracker-file-notifier.c
index eb745d265..a3f2bd7e6 100644
--- a/src/libtracker-miner/tracker-file-notifier.c
+++ b/src/libtracker-miner/tracker-file-notifier.c
@@ -49,6 +49,7 @@ enum {
        FILE_UPDATED,
        FILE_DELETED,
        FILE_MOVED,
+       FILE_IGNORED_DURING_CRAWL,
        DIRECTORY_STARTED,
        DIRECTORY_FINISHED,
        FINISHED,
@@ -197,12 +198,19 @@ crawler_check_file_cb (TrackerCrawler *crawler,
                        gpointer        user_data)
 {
        TrackerFileNotifierPrivate *priv;
+       gboolean use;
 
        priv = tracker_file_notifier_get_instance_private (user_data);
 
-       return tracker_indexing_tree_file_is_indexable (priv->indexing_tree,
-                                                       file,
-                                                       G_FILE_TYPE_REGULAR);
+       use = tracker_indexing_tree_file_is_indexable (priv->indexing_tree,
+                                                      file,
+                                                      G_FILE_TYPE_REGULAR);
+
+       if (!use) {
+               g_signal_emit (TRACKER_FILE_NOTIFIER (user_data), signals[FILE_IGNORED_DURING_CRAWL], 0, 
file);
+       }
+
+       return use;
 }
 
 static gboolean
@@ -212,6 +220,7 @@ crawler_check_directory_cb (TrackerCrawler *crawler,
 {
        TrackerFileNotifierPrivate *priv;
        GFile *root, *canonical;
+       gboolean use;
 
        priv = tracker_file_notifier_get_instance_private (user_data);
        g_assert (priv->current_index_root != NULL);
@@ -228,9 +237,15 @@ crawler_check_directory_cb (TrackerCrawler *crawler,
                return FALSE;
        }
 
-       return tracker_indexing_tree_file_is_indexable (priv->indexing_tree,
-                                                       directory,
-                                                       G_FILE_TYPE_DIRECTORY);
+       use = tracker_indexing_tree_file_is_indexable (priv->indexing_tree,
+                                                      directory,
+                                                      G_FILE_TYPE_DIRECTORY);
+
+       if (!use) {
+               g_signal_emit (TRACKER_FILE_NOTIFIER (user_data), signals[FILE_IGNORED_DURING_CRAWL], 0, 
directory);
+       }
+
+       return use;
 }
 
 static gboolean
@@ -1731,6 +1746,16 @@ tracker_file_notifier_class_init (TrackerFileNotifierClass *klass)
                              NULL,
                              G_TYPE_NONE,
                              2, G_TYPE_FILE, G_TYPE_FILE);
+       signals[FILE_IGNORED_DURING_CRAWL] =
+               g_signal_new ("file-ignored-during-crawl",
+                             G_TYPE_FROM_CLASS (klass),
+                             G_SIGNAL_RUN_LAST,
+                             G_STRUCT_OFFSET (TrackerFileNotifierClass,
+                                              file_ignored_during_crawl),
+                             NULL, NULL,
+                             NULL,
+                             G_TYPE_NONE,
+                             1, G_TYPE_FILE);
        signals[DIRECTORY_STARTED] =
                g_signal_new ("directory-started",
                              G_TYPE_FROM_CLASS (klass),
diff --git a/src/libtracker-miner/tracker-file-notifier.h b/src/libtracker-miner/tracker-file-notifier.h
index f9cd69202..c6cd359f8 100644
--- a/src/libtracker-miner/tracker-file-notifier.h
+++ b/src/libtracker-miner/tracker-file-notifier.h
@@ -61,6 +61,9 @@ struct _TrackerFileNotifierClass {
                               GFile               *from,
                               GFile               *to);
 
+       void (* file_ignored_during_crawl)   (TrackerFileNotifier *notifier,
+                                             GFile               *file);
+
        /* Directory notifications */
        void (* directory_started)  (TrackerFileNotifier *notifier,
                                     GFile               *directory);
diff --git a/src/libtracker-miner/tracker-miner-fs.c b/src/libtracker-miner/tracker-miner-fs.c
index d679a7bb8..9c7df6e98 100644
--- a/src/libtracker-miner/tracker-miner-fs.c
+++ b/src/libtracker-miner/tracker-miner-fs.c
@@ -217,6 +217,9 @@ static void           file_notifier_file_moved            (TrackerFileNotifier
                                                            GFile                *source,
                                                            GFile                *dest,
                                                            gpointer              user_data);
+static void           file_notifier_file_ignored_during_crawl (TrackerFileNotifier  *notifier,
+                                                               GFile                *file,
+                                                               gpointer              user_data);
 static void           file_notifier_directory_started     (TrackerFileNotifier *notifier,
                                                            GFile               *directory,
                                                            gpointer             user_data);
@@ -609,6 +612,9 @@ miner_fs_initable_init (GInitable     *initable,
        g_signal_connect (priv->file_notifier, "file-moved",
                          G_CALLBACK (file_notifier_file_moved),
                          initable);
+       g_signal_connect (priv->file_notifier, "file-ignored-during-crawl",
+                         G_CALLBACK (file_notifier_file_ignored_during_crawl),
+                         initable);
        g_signal_connect (priv->file_notifier, "directory-started",
                          G_CALLBACK (file_notifier_directory_started),
                          initable);
@@ -2079,6 +2085,16 @@ file_notifier_file_moved (TrackerFileNotifier *notifier,
        miner_fs_queue_event (fs, event, miner_fs_get_queue_priority (fs, source));
 }
 
+static void
+file_notifier_file_ignored_during_crawl (TrackerFileNotifier *notifier,
+                                         GFile               *file,
+                                         gpointer             user_data)
+{
+       TrackerMinerFS *fs = user_data;
+
+       tracker_miner_file_processed (TRACKER_MINER (fs), file, FALSE, "ignored by configuration");
+}
+
 static void
 file_notifier_directory_started (TrackerFileNotifier *notifier,
                                  GFile               *directory,


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