[tracker-miners/wip/carlosg/parallel-installable: 32/36] tracker-miner-fs: Make all cache paths dependent on the domain ontology



commit 3d0d44fe059c54e5492838a6c643539a54b918f2
Author: Carlos Garnacho <carlosg gnome org>
Date:   Sun Mar 8 11:52:00 2020 +0100

    tracker-miner-fs: Make all cache paths dependent on the domain ontology
    
    This wasn't the case for misc files.

 src/miners/fs/tracker-main.c        |  58 ++++++++++++++------
 src/miners/fs/tracker-miner-files.c | 104 +++++++++++++++++++++++++++---------
 src/miners/fs/tracker-miner-files.h |  15 +++---
 3 files changed, 128 insertions(+), 49 deletions(-)
---
diff --git a/src/miners/fs/tracker-main.c b/src/miners/fs/tracker-main.c
index 77d93ba79..0fb080753 100644
--- a/src/miners/fs/tracker-main.c
+++ b/src/miners/fs/tracker-main.c
@@ -151,12 +151,26 @@ miner_reset_applications (TrackerMiner *miner)
        }
 }
 
+static GFile *
+get_cache_dir (TrackerDomainOntology *domain_ontology)
+{
+       GFile *cache;
+
+       cache = tracker_domain_ontology_get_cache (domain_ontology);
+       return g_object_ref (cache);
+}
+
 static void
-save_current_locale (void)
+save_current_locale (TrackerDomainOntology *domain_ontology)
 {
        GError *error = NULL;
        gchar *locale = tracker_locale_get (TRACKER_LOCALE_LANGUAGE);
-       gchar *locale_file = g_build_filename (g_get_user_cache_dir (), "tracker", LOCALE_FILENAME, NULL);
+       GFile *cache = get_cache_dir (domain_ontology);
+       gchar *cache_path = g_file_get_path (cache);
+       gchar *locale_file;
+
+       locale_file = g_build_filename (cache_path, LOCALE_FILENAME, NULL);
+       g_free (cache_path);
 
        g_message ("Saving locale used to index applications");
        g_message ("  Creating locale file '%s'", locale_file);
@@ -176,14 +190,20 @@ save_current_locale (void)
 }
 
 static gboolean
-detect_locale_changed (TrackerMiner *miner)
+detect_locale_changed (TrackerMiner          *miner,
+                      TrackerDomainOntology *domain_ontology)
 {
+       GFile *cache;
+       gchar *cache_path;
        gchar *locale_file;
        gchar *previous_locale = NULL;
        gchar *current_locale;
        gboolean changed;
 
-       locale_file = g_build_filename (g_get_user_cache_dir (), "tracker", LOCALE_FILENAME, NULL);
+       cache = get_cache_dir (domain_ontology);
+       cache_path = g_file_get_path (cache);
+       locale_file = g_build_filename (cache_path, LOCALE_FILENAME, NULL);
+       g_free (cache_path);
 
        if (G_LIKELY (g_file_test (locale_file, G_FILE_TEST_EXISTS))) {
                gchar *contents;
@@ -300,8 +320,9 @@ initialize_priority_and_scheduling (void)
 }
 
 static gboolean
-should_crawl (TrackerConfig *config,
-              gboolean      *forced)
+should_crawl (TrackerMinerFiles *miner_files,
+              TrackerConfig     *config,
+              gboolean          *forced)
 {
        gint crawling_interval;
 
@@ -326,7 +347,7 @@ should_crawl (TrackerConfig *config,
        } else {
                guint64 then, now;
 
-               then = tracker_miner_files_get_last_crawl_done ();
+               then = tracker_miner_files_get_last_crawl_done (miner_files);
 
                if (then < 1) {
                        return TRUE;
@@ -412,7 +433,8 @@ miner_finished_cb (TrackerMinerFS *fs,
                total_files_found);
 
        if (do_crawling) {
-               tracker_miner_files_set_last_crawl_done (TRUE);
+               tracker_miner_files_set_last_crawl_done (TRACKER_MINER_FILES (fs),
+                                                        TRUE);
        }
 
        /* We're not sticking around for file updates, so stop
@@ -737,16 +759,17 @@ setup_connection_and_endpoint (TrackerDomainOntology    *domain,
                                TrackerEndpointDBus     **endpoint,
                                GError                  **error)
 {
-       GFile *store;
-       GFile *ontology;
+       GFile *store, *ontology;
 
-       store = tracker_domain_ontology_get_cache (domain);
+       store = get_cache_dir (domain);
        ontology = tracker_domain_ontology_get_ontology (domain);
        *sparql_conn = tracker_sparql_connection_new (get_fts_connection_flags (),
                                                      store,
                                                      ontology,
                                                      NULL,
                                                      error);
+       g_object_unref (store);
+
        if (!*sparql_conn)
                return FALSE;
 
@@ -900,7 +923,7 @@ main (gint argc, gchar *argv[])
        }
 
        /* If the locales changed, we need to reset some things first */
-       detect_locale_changed (TRACKER_MINER (miner_files));
+       detect_locale_changed (TRACKER_MINER (miner_files), domain_ontology);
 
        proxy = tracker_miner_proxy_new (miner_files, connection, DBUS_PATH, NULL, &error);
        if (error) {
@@ -951,7 +974,8 @@ main (gint argc, gchar *argv[])
        /* Check if we should crawl and if we should force mtime
         * checking based on the config.
         */
-       do_crawling = should_crawl (config, &force_mtime_checking);
+       do_crawling = should_crawl (TRACKER_MINER_FILES (miner_files),
+                                   config, &force_mtime_checking);
 
        /* Get the last shutdown state to see if we need to perform a
         * full mtime check against the db or not.
@@ -965,7 +989,7 @@ main (gint argc, gchar *argv[])
        if (force_mtime_checking) {
                do_mtime_checking = TRUE;
        } else {
-               do_mtime_checking = tracker_miner_files_get_need_mtime_check ();
+               do_mtime_checking = tracker_miner_files_get_need_mtime_check (TRACKER_MINER_FILES 
(miner_files));
        }
 
        g_message ("  %s %s",
@@ -976,7 +1000,7 @@ main (gint argc, gchar *argv[])
         * event of a crash, this is changed back on shutdown if
         * everything appears to be fine.
         */
-       tracker_miner_files_set_need_mtime_check (TRUE);
+       tracker_miner_files_set_need_mtime_check (TRACKER_MINER_FILES (miner_files), TRUE);
 
        /* Configure files miner */
        tracker_miner_files_set_mtime_checking (TRACKER_MINER_FILES (miner_files), do_mtime_checking);
@@ -995,8 +1019,8 @@ main (gint argc, gchar *argv[])
        g_message ("Shutdown started");
 
        if (miners_timeout_id == 0 && !miner_needs_check (miner_files)) {
-               tracker_miner_files_set_need_mtime_check (FALSE);
-               save_current_locale ();
+               tracker_miner_files_set_need_mtime_check (TRACKER_MINER_FILES (miner_files), FALSE);
+               save_current_locale (domain_ontology);
        }
 
        g_main_loop_unref (main_loop);
diff --git a/src/miners/fs/tracker-miner-files.c b/src/miners/fs/tracker-miner-files.c
index 1408fab0d..206fb324c 100644
--- a/src/miners/fs/tracker-miner-files.c
+++ b/src/miners/fs/tracker-miner-files.c
@@ -86,6 +86,7 @@ struct TrackerMinerFilesPrivate {
        GSList *index_single_directories;
 
        gchar *domain;
+       TrackerDomainOntology *domain_ontology;
 
        guint disk_space_check_id;
        gboolean disk_space_pause;
@@ -578,6 +579,12 @@ miner_files_initable_init (GInitable     *initable,
 
        miner_files_update_filters (mf);
 
+       mf->private->domain_ontology = tracker_domain_ontology_new (mf->private->domain, NULL, &inner_error);
+       if (!mf->private->domain_ontology) {
+               g_propagate_error (error, inner_error);
+               return FALSE;
+       }
+
        /* Set up extractor and signals */
        mf->private->connection =  g_bus_get_sync (TRACKER_IPC_BUS, NULL, &inner_error);
        if (!mf->private->connection) {
@@ -929,6 +936,8 @@ miner_files_finalize (GObject *object)
        }
 #endif /* defined(HAVE_UPOWER) || defined(HAVE_HAL) */
 
+       tracker_domain_ontology_unref (priv->domain_ontology);
+
        if (priv->storage) {
                g_object_unref (priv->storage);
        }
@@ -1647,7 +1656,7 @@ check_battery_status (TrackerMinerFiles *mf)
                        if (!tracker_config_get_index_on_battery_first_time (mf->private->config)) {
                                g_message ("Running on battery, but not enabled, pausing");
                                should_pause = TRUE;
-                       } else if (tracker_miner_files_get_first_index_done ()) {
+                       } else if (tracker_miner_files_get_first_index_done (mf)) {
                                g_message ("Running on battery and first-time index "
                                           "already done, pausing");
                                should_pause = TRUE;
@@ -1714,8 +1723,8 @@ miner_finished_cb (TrackerMinerFS *fs,
        TrackerMinerFiles *mf = TRACKER_MINER_FILES (fs);
 
        /* Create stamp file if not already there */
-       if (!tracker_miner_files_get_first_index_done ()) {
-               tracker_miner_files_set_first_index_done (TRUE);
+       if (!tracker_miner_files_get_first_index_done (mf)) {
+               tracker_miner_files_set_first_index_done (mf, TRUE);
        }
 
        /* And remove the signal handler so that it's not
@@ -1750,9 +1759,20 @@ mount_pre_unmount_cb (GVolumeMonitor    *volume_monitor,
        g_free (uri);
 }
 
+static GFile *
+get_cache_dir (TrackerMinerFiles *mf)
+{
+       GFile *cache;
+
+       cache = tracker_domain_ontology_get_cache (mf->private->domain_ontology);
+       return g_object_ref (cache);
+}
+
+
 static gboolean
 disk_space_check (TrackerMinerFiles *mf)
 {
+       GFile *file;
        gint limit;
        gchar *data_dir;
        gdouble remaining;
@@ -1764,9 +1784,11 @@ disk_space_check (TrackerMinerFiles *mf)
        }
 
        /* Get % of remaining space in the partition where the cache is */
-       data_dir = g_build_filename (g_get_user_cache_dir (), "tracker", NULL);
+       file = get_cache_dir (mf);
+       data_dir = g_file_get_path (file);
        remaining = tracker_file_system_get_remaining_space_percentage (data_dir);
        g_free (data_dir);
+       g_object_unref (file);
 
        if (remaining <= limit) {
                g_message ("WARNING: Available disk space (%lf%%) is below "
@@ -2722,7 +2744,7 @@ miner_files_finished (TrackerMinerFS *fs,
        if (priv->thumbnailer)
                tracker_thumbnailer_send (priv->thumbnailer);
 
-       tracker_miner_files_set_last_crawl_done (TRUE);
+       tracker_miner_files_set_last_crawl_done (TRACKER_MINER_FILES (fs), TRUE);
 
        tracker_miner_files_check_unextracted (TRACKER_MINER_FILES (fs));
 }
@@ -3398,12 +3420,21 @@ tracker_miner_files_is_file_eligible (TrackerMinerFiles *miner,
 }
 
 inline static gchar *
-get_first_index_filename (void)
+get_first_index_filename (TrackerMinerFiles *mf)
 {
-       return g_build_filename (g_get_user_cache_dir (),
-                                "tracker",
+       GFile *file;
+       gchar *prefix, *path;
+
+       file = get_cache_dir (mf);
+       prefix = g_file_get_path (file);
+
+       path = g_build_filename (prefix,
                                 FIRST_INDEX_FILENAME,
                                 NULL);
+       g_free (prefix);
+       g_object_unref (file);
+
+       return path;
 }
 
 /**
@@ -3414,12 +3445,12 @@ get_first_index_filename (void)
  * Returns: %TRUE if a first full index have been done, %FALSE otherwise.
  **/
 gboolean
-tracker_miner_files_get_first_index_done (void)
+tracker_miner_files_get_first_index_done (TrackerMinerFiles *mf)
 {
        gboolean exists;
        gchar *filename;
 
-       filename = get_first_index_filename ();
+       filename = get_first_index_filename (mf);
        exists = g_file_test (filename, G_FILE_TEST_EXISTS);
        g_free (filename);
 
@@ -3434,12 +3465,13 @@ tracker_miner_files_get_first_index_done (void)
  *  the index is completed, should be set to %TRUE.
  **/
 void
-tracker_miner_files_set_first_index_done (gboolean done)
+tracker_miner_files_set_first_index_done (TrackerMinerFiles *mf,
+                                         gboolean           done)
 {
        gboolean already_exists;
        gchar *filename;
 
-       filename = get_first_index_filename ();
+       filename = get_first_index_filename (mf);
        already_exists = g_file_test (filename, G_FILE_TEST_EXISTS);
 
        if (done && !already_exists) {
@@ -3468,12 +3500,21 @@ tracker_miner_files_set_first_index_done (gboolean done)
 }
 
 static inline gchar *
-get_last_crawl_filename (void)
+get_last_crawl_filename (TrackerMinerFiles *mf)
 {
-       return g_build_filename (g_get_user_cache_dir (),
-                                "tracker",
+       GFile *file;
+       gchar *prefix, *path;
+
+       file = get_cache_dir (mf);
+       prefix = g_file_get_path (file);
+
+       path = g_build_filename (prefix,
                                 LAST_CRAWL_FILENAME,
                                 NULL);
+       g_free (prefix);
+       g_object_unref (file);
+
+       return path;
 }
 
 /**
@@ -3484,13 +3525,13 @@ get_last_crawl_filename (void)
  * Returns: time_t() value when last crawl occurred, otherwise 0.
  **/
 guint64
-tracker_miner_files_get_last_crawl_done (void)
+tracker_miner_files_get_last_crawl_done (TrackerMinerFiles *mf)
 {
        gchar *filename;
        gchar *content;
        guint64 then;
 
-       filename = get_last_crawl_filename ();
+       filename = get_last_crawl_filename (mf);
 
        if (!g_file_get_contents (filename, &content, NULL, NULL)) {
                g_info ("  No previous timestamp, crawling forced");
@@ -3509,12 +3550,13 @@ tracker_miner_files_get_last_crawl_done (void)
  * Set the time stamp of the last full index of files.
  **/
 void
-tracker_miner_files_set_last_crawl_done (gboolean done)
+tracker_miner_files_set_last_crawl_done (TrackerMinerFiles *mf,
+                                        gboolean           done)
 {
        gboolean already_exists;
        gchar *filename;
 
-       filename = get_last_crawl_filename ();
+       filename = get_last_crawl_filename (mf);
        already_exists = g_file_test (filename, G_FILE_TEST_EXISTS);
 
        if (done) {
@@ -3544,12 +3586,21 @@ tracker_miner_files_set_last_crawl_done (gboolean done)
 }
 
 inline static gchar *
-get_need_mtime_check_filename (void)
+get_need_mtime_check_filename (TrackerMinerFiles *mf)
 {
-       return g_build_filename (g_get_user_cache_dir (),
-                                "tracker",
+       GFile *file;
+       gchar *prefix, *path;
+
+       file = get_cache_dir (mf);
+       prefix = g_file_get_path (file);
+
+       path = g_build_filename (prefix,
                                 NEED_MTIME_CHECK_FILENAME,
                                 NULL);
+       g_free (prefix);
+       g_object_unref (file);
+
+       return path;
 }
 
 /**
@@ -3561,12 +3612,12 @@ get_need_mtime_check_filename (void)
  * the database on the next start for the miner-fs, %FALSE otherwise.
  **/
 gboolean
-tracker_miner_files_get_need_mtime_check (void)
+tracker_miner_files_get_need_mtime_check (TrackerMinerFiles *mf)
 {
        gboolean exists;
        gchar *filename;
 
-       filename = get_need_mtime_check_filename ();
+       filename = get_need_mtime_check_filename (mf);
        exists = g_file_test (filename, G_FILE_TEST_EXISTS);
        g_free (filename);
 
@@ -3591,12 +3642,13 @@ tracker_miner_files_get_need_mtime_check (void)
  * other uncontrolled shutdown reason).
  **/
 void
-tracker_miner_files_set_need_mtime_check (gboolean needed)
+tracker_miner_files_set_need_mtime_check (TrackerMinerFiles *mf,
+                                         gboolean           needed)
 {
        gboolean already_exists;
        gchar *filename;
 
-       filename = get_need_mtime_check_filename ();
+       filename = get_need_mtime_check_filename (mf);
        already_exists = g_file_test (filename, G_FILE_TEST_EXISTS);
 
        /* !needed = add file
diff --git a/src/miners/fs/tracker-miner-files.h b/src/miners/fs/tracker-miner-files.h
index 648c025cd..79a7bd79d 100644
--- a/src/miners/fs/tracker-miner-files.h
+++ b/src/miners/fs/tracker-miner-files.h
@@ -72,14 +72,17 @@ gboolean      tracker_miner_files_is_file_eligible         (TrackerMinerFiles *m
                                                             GFile             *file);
 
 /* Global functions to handle timestamp files */
-gboolean tracker_miner_files_get_first_index_done (void);
-void     tracker_miner_files_set_first_index_done (gboolean done);
+gboolean tracker_miner_files_get_first_index_done (TrackerMinerFiles *mf);
+void     tracker_miner_files_set_first_index_done (TrackerMinerFiles *mf,
+                                                   gboolean           done);
 
-guint64  tracker_miner_files_get_last_crawl_done  (void);
-void     tracker_miner_files_set_last_crawl_done  (gboolean done);
+guint64  tracker_miner_files_get_last_crawl_done  (TrackerMinerFiles *mf);
+void     tracker_miner_files_set_last_crawl_done  (TrackerMinerFiles *mf,
+                                                   gboolean           done);
 
-gboolean tracker_miner_files_get_need_mtime_check (void);
-void     tracker_miner_files_set_need_mtime_check (gboolean needed);
+gboolean tracker_miner_files_get_need_mtime_check (TrackerMinerFiles *mf);
+void     tracker_miner_files_set_need_mtime_check (TrackerMinerFiles *mf,
+                                                   gboolean           needed);
 
 void     tracker_miner_files_set_mtime_checking   (TrackerMinerFiles *miner,
                                                    gboolean           mtime_checking);


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