[tracker-miners/sam/optional-application-indexing: 11/12] miner-fs: Add an option to disable application indexing
- From: Sam Thursfield <sthursfield src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker-miners/sam/optional-application-indexing: 11/12] miner-fs: Add an option to disable application indexing
- Date: Mon, 16 Sep 2019 08:54:01 +0000 (UTC)
commit a258085bd38b409ff5ef78115c5133c5e740e580
Author: Sam Thursfield <sam afuera me uk>
Date: Wed Sep 4 16:32:35 2019 +0200
miner-fs: Add an option to disable application indexing
This is useful when testing and in deployments where application
indexing isn't needed.
...org.freedesktop.Tracker.Miner.Files.gschema.xml | 9 ++
src/miners/fs/tracker-config.c | 9 ++
src/miners/fs/tracker-config.h | 1 +
src/miners/fs/tracker-miner-files.c | 135 +++++++++++++++------
4 files changed, 116 insertions(+), 38 deletions(-)
---
diff --git a/data/org.freedesktop.Tracker.Miner.Files.gschema.xml
b/data/org.freedesktop.Tracker.Miner.Files.gschema.xml
index 4a3db49f0..ae2266519 100644
--- a/data/org.freedesktop.Tracker.Miner.Files.gschema.xml
+++ b/data/org.freedesktop.Tracker.Miner.Files.gschema.xml
@@ -141,6 +141,15 @@ Boston, MA 02110-1301, USA.
<default>[ '$HOME', '&DOWNLOAD' ]</default>
</key>
+ <key name="index-applications" type="b">
+ <summary>Index applications installed on the system</summary>
+ <description>
+ If this option is enabled, the filesystem miner will look for .desktop
+ files in the standard XDG system and user data directories.
+ </description>
+ <default>true</default>
+ </key>
+
<key name="ignored-files" type="as">
<summary>Ignored files</summary>
<description>List of file patterns to avoid</description>
diff --git a/src/miners/fs/tracker-config.c b/src/miners/fs/tracker-config.c
index 59ef77df8..5836214bf 100644
--- a/src/miners/fs/tracker-config.c
+++ b/src/miners/fs/tracker-config.c
@@ -44,6 +44,7 @@
#define DEFAULT_THROTTLE 0 /* 0->20 */
#define DEFAULT_INDEX_REMOVABLE_DEVICES FALSE
#define DEFAULT_INDEX_OPTICAL_DISCS FALSE
+#define DEFAULT_INDEX_APPLICATIONS TRUE
#define DEFAULT_INDEX_ON_BATTERY FALSE
#define DEFAULT_INDEX_ON_BATTERY_FIRST_TIME TRUE
#define DEFAULT_LOW_DISK_SPACE_LIMIT 1 /* 0->100 / -1 */
@@ -821,6 +822,14 @@ tracker_config_get_index_optical_discs (TrackerConfig *config)
return g_settings_get_boolean (G_SETTINGS (config), "index-optical-discs");
}
+gboolean
+tracker_config_get_index_applications (TrackerConfig *config)
+{
+ g_return_val_if_fail (TRACKER_IS_CONFIG (config), DEFAULT_INDEX_APPLICATIONS);
+
+ return g_settings_get_boolean (G_SETTINGS (config), "index-applications");
+}
+
gint
tracker_config_get_low_disk_space_limit (TrackerConfig *config)
{
diff --git a/src/miners/fs/tracker-config.h b/src/miners/fs/tracker-config.h
index 14961295b..78b9adab5 100644
--- a/src/miners/fs/tracker-config.h
+++ b/src/miners/fs/tracker-config.h
@@ -56,6 +56,7 @@ gboolean tracker_config_get_index_on_battery_first_time (TrackerConfi
gboolean tracker_config_get_index_removable_devices (TrackerConfig *config);
gboolean tracker_config_get_index_optical_discs (TrackerConfig *config);
gboolean tracker_config_get_index_mounted_directories (TrackerConfig *config);
+gboolean tracker_config_get_index_applications (TrackerConfig *config);
gint tracker_config_get_low_disk_space_limit (TrackerConfig *config);
GSList * tracker_config_get_index_recursive_directories (TrackerConfig *config);
GSList * tracker_config_get_index_single_directories (TrackerConfig *config);
diff --git a/src/miners/fs/tracker-miner-files.c b/src/miners/fs/tracker-miner-files.c
index 7d7c1d97e..e096a8a89 100644
--- a/src/miners/fs/tracker-miner-files.c
+++ b/src/miners/fs/tracker-miner-files.c
@@ -105,6 +105,9 @@ struct TrackerMinerFilesPrivate {
gboolean index_optical_discs;
guint volumes_changed_id;
+ GSList *application_dirs;
+ guint applications_changed_id;
+
gboolean mount_points_initialized;
guint stale_volumes_check_id;
@@ -196,6 +199,10 @@ static void trigger_recheck_cb (GObject *g
static void index_volumes_changed_cb (GObject *gobject,
GParamSpec *arg1,
gpointer user_data);
+static void set_up_application_indexing (TrackerMinerFiles *mf);
+static void index_applications_changed_cb (GObject *gobject,
+ GParamSpec *arg1,
+ gpointer user_data);
static gboolean miner_files_process_file (TrackerMinerFS *fs,
GFile *file,
GTask *task);
@@ -531,29 +538,6 @@ miner_files_initable_iface_init (GInitableIface *iface)
iface->init = miner_files_initable_init;
}
-static void
-miner_files_add_application_dir (TrackerMinerFiles *mf,
- const gchar *dir)
-{
- TrackerIndexingTree *indexing_tree;
- GFile *file;
- gchar *path;
-
- indexing_tree = tracker_miner_fs_get_indexing_tree (TRACKER_MINER_FS (mf));
-
- /* Add $dir/applications */
- path = g_build_filename (dir, "applications", NULL);
- file = g_file_new_for_path (path);
- g_message (" Adding:'%s'", path);
-
- tracker_indexing_tree_add (indexing_tree, file,
- TRACKER_DIRECTORY_FLAG_RECURSE |
- TRACKER_DIRECTORY_FLAG_MONITOR |
- TRACKER_DIRECTORY_FLAG_CHECK_MTIME);
- g_object_unref (file);
- g_free (path);
-}
-
static gboolean
miner_files_initable_init (GInitable *initable,
GCancellable *cancellable,
@@ -563,13 +547,10 @@ miner_files_initable_init (GInitable *initable,
TrackerMinerFS *fs;
TrackerIndexingTree *indexing_tree;
TrackerDirectoryFlags flags;
- const gchar *user_data_dir;
- const gchar * const *xdg_dirs;
GError *inner_error = NULL;
GSList *mounts = NULL;
GSList *dirs;
GSList *m;
- gint i;
/* Chain up parent's initable callback before calling child's one */
if (!miner_files_initable_parent_iface->init (initable, cancellable, &inner_error)) {
@@ -778,18 +759,8 @@ miner_files_initable_init (GInitable *initable,
NULL);
}
- /* Add application directories */
- g_message ("Setting up applications to iterate from XDG system directories");
- xdg_dirs = g_get_system_data_dirs ();
-
- for (i = 0; xdg_dirs[i]; i++) {
- miner_files_add_application_dir (mf, xdg_dirs[i]);
- }
-
- user_data_dir = g_get_user_data_dir ();
- if (user_data_dir) {
- miner_files_add_application_dir (mf, user_data_dir);
- }
+ /* Initialize application indexing */
+ set_up_application_indexing (mf);
/* We want to get notified when config changes */
@@ -820,6 +791,9 @@ miner_files_initable_init (GInitable *initable,
g_signal_connect (mf->private->config, "notify::index-optical-discs",
G_CALLBACK (index_volumes_changed_cb),
mf);
+ g_signal_connect (mf->private->config, "notify::index-applications",
+ G_CALLBACK (index_applications_changed_cb),
+ mf);
g_signal_connect (mf->private->config, "notify::removable-days-threshold",
G_CALLBACK (index_volumes_changed_cb),
mf);
@@ -2222,6 +2196,91 @@ index_volumes_changed_cb (GObject *gobject,
}
}
+static void
+miner_files_add_application_dir (TrackerMinerFiles *mf,
+ TrackerIndexingTree *indexing_tree,
+ const gchar *dir)
+{
+ GFile *file;
+ gchar *path;
+
+ /* Add $dir/applications */
+ path = g_build_filename (dir, "applications", NULL);
+ file = g_file_new_for_path (path);
+ g_message (" Adding:'%s'", path);
+
+ tracker_indexing_tree_add (indexing_tree, file,
+ TRACKER_DIRECTORY_FLAG_RECURSE |
+ TRACKER_DIRECTORY_FLAG_MONITOR |
+ TRACKER_DIRECTORY_FLAG_CHECK_MTIME);
+ g_free (path);
+
+ mf->private->application_dirs = g_slist_prepend(mf->private->application_dirs, file);
+}
+
+static void
+set_up_application_indexing (TrackerMinerFiles *mf)
+{
+ TrackerIndexingTree *indexing_tree;
+ const gchar *user_data_dir;
+ const gchar * const *xdg_dirs;
+ GSList *n;
+ int i;
+
+ indexing_tree = tracker_miner_fs_get_indexing_tree (TRACKER_MINER_FS (mf));
+
+ if (tracker_config_get_index_applications (mf->private->config)) {
+ g_message ("Setting up applications to iterate from XDG system directories");
+ xdg_dirs = g_get_system_data_dirs ();
+
+ for (i = 0; xdg_dirs[i]; i++) {
+ miner_files_add_application_dir (mf, indexing_tree, xdg_dirs[i]);
+ }
+
+ user_data_dir = g_get_user_data_dir ();
+ if (user_data_dir) {
+ miner_files_add_application_dir (mf, indexing_tree, user_data_dir);
+ }
+ } else {
+ g_message ("Removing configured application directories from indexing tree");
+
+ for (n = mf->private->application_dirs; n != NULL; n = n->next) {
+ tracker_indexing_tree_remove (indexing_tree, G_FILE (n->data));
+ };
+
+ g_slist_free_full (mf->private->application_dirs, g_object_unref);
+ mf->private->application_dirs = NULL;
+ }
+}
+
+static gboolean
+index_applications_changed_idle (gpointer user_data)
+{
+ TrackerMinerFiles *mf;
+
+ mf = TRACKER_MINER_FILES (user_data);
+
+ set_up_application_indexing (mf);
+
+ return FALSE;
+}
+
+static void
+index_applications_changed_cb (GObject *gobject,
+ GParamSpec *arg1,
+ gpointer user_data)
+{
+ TrackerMinerFiles *miner_files = user_data;
+
+ g_message ("Application related configuration changed, updating...");
+
+ if (miner_files->private->applications_changed_id == 0) {
+ /* Set idle so multiple changes in the config lead to one check */
+ miner_files->private->applications_changed_id =
+ g_idle_add (index_applications_changed_idle, miner_files);
+ }
+}
+
static const gchar *
miner_files_get_file_urn (TrackerMinerFiles *miner,
GFile *file,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]