summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartyn Russell <martyn@lanedo.com>2009-10-08 17:32:20 +0100
committerMartyn Russell <martyn@lanedo.com>2009-10-08 17:32:41 +0100
commit6642942b8a6b7a9d8da55a6ac14db25c9a963f6b (patch)
tree5b9dabdc7121d5566421c313ab91d103a5ec3fe9
parentd1e45ffdadb532d0c67e190b8ac44f0c343d9b0c (diff)
downloadtracker-6642942b8a6b7a9d8da55a6ac14db25c9a963f6b.tar.gz
tracker-miner-fs: Don't index duplicate MMC and config paths
Previously, if a removable device was mounted on $HOME/foo and $HOME/foo was in tracker-miner-fs.cfg, it would be iterated twice. Now we check for this and drop the .cfg version in favour of the removable device mount point.
-rw-r--r--src/tracker-miner-fs/tracker-miner-files.c97
1 files changed, 60 insertions, 37 deletions
diff --git a/src/tracker-miner-fs/tracker-miner-files.c b/src/tracker-miner-fs/tracker-miner-files.c
index 27bc8356d..751a94662 100644
--- a/src/tracker-miner-fs/tracker-miner-files.c
+++ b/src/tracker-miner-fs/tracker-miner-files.c
@@ -103,8 +103,6 @@ static void mount_point_removed_cb (TrackerStorage *storage,
const gchar *udi,
const gchar *mount_point,
gpointer user_data);
-static void initialize_removable_devices (TrackerMinerFiles *mf);
-
static void on_battery_cb (GObject *gobject,
GParamSpec *arg1,
gpointer user_data);
@@ -328,6 +326,7 @@ miner_files_constructed (GObject *object)
TrackerMinerFiles *mf;
TrackerMinerFS *fs;
GSList *dirs;
+ GSList *mounts = NULL, *m;
gint throttle;
G_OBJECT_CLASS (tracker_miner_files_parent_class)->constructed (object);
@@ -340,10 +339,18 @@ miner_files_constructed (GObject *object)
g_assert_not_reached ();
}
+#ifdef HAVE_HAL
+ if (tracker_config_get_index_removable_devices (mf->private->config)) {
+ mounts = tracker_storage_get_removable_device_roots (mf->private->storage);
+ }
+#endif /* HAVE_HAL */
+
+ g_message ("Setting up directories to iterate from config (IndexSingleDirectory)");
+
/* Fill in directories to inspect */
dirs = tracker_config_get_index_single_directories (mf->private->config);
- while (dirs) {
+ for (; dirs; dirs = dirs->next) {
GFile *file;
/* Do some simple checks for silly locations */
@@ -358,16 +365,32 @@ miner_files_constructed (GObject *object)
continue;
}
+ /* Make sure we don't crawl volumes. */
+ if (mounts) {
+ gboolean found = FALSE;
+
+ for (m = mounts; m && !found; m = m->next) {
+ found = strcmp (m->data, dirs->data) == 0;
+ }
+
+ if (found) {
+ g_message (" Duplicate found:'%s' - same as removable device path",
+ (gchar*) dirs->data);
+ continue;
+ }
+ }
+
+ g_message (" Adding:'%s'", (gchar*) dirs->data);
file = g_file_new_for_path (dirs->data);
tracker_miner_fs_add_directory (fs, file, FALSE);
g_object_unref (file);
-
- dirs = dirs->next;
}
+ g_message ("Setting up directories to iterate from config (IndexRecursiveDirectory)");
+
dirs = tracker_config_get_index_recursive_directories (mf->private->config);
- while (dirs) {
+ for (; dirs; dirs = dirs->next) {
GFile *file;
/* Do some simple checks for silly locations */
@@ -382,11 +405,25 @@ miner_files_constructed (GObject *object)
continue;
}
+ /* Make sure we don't crawl volumes. */
+ if (mounts) {
+ gboolean found = FALSE;
+
+ for (m = mounts; m && !found; m = m->next) {
+ found = strcmp (m->data, dirs->data) == 0;
+ }
+
+ if (found) {
+ g_message (" Duplicate found:'%s' - same as removable device path",
+ (gchar*) dirs->data);
+ continue;
+ }
+ }
+
+ g_message (" Adding:'%s'", (gchar*) dirs->data);
file = g_file_new_for_path (dirs->data);
tracker_miner_fs_add_directory (fs, file, TRUE);
g_object_unref (file);
-
- dirs = dirs->next;
}
throttle = tracker_config_get_throttle (mf->private->config);
@@ -394,14 +431,26 @@ miner_files_constructed (GObject *object)
/* Throttle in config goes from 0 to 20, translate to 0.0 -> 1.0 */
tracker_miner_fs_set_throttle (TRACKER_MINER_FS (mf), (1.0 / 20) * throttle);
-#ifdef HAVE_HAL
- initialize_removable_devices (mf);
-#endif /* HAVE_HAL */
+ /* Add removable media */
+ g_message ("Setting up directories to iterate which are removable devices");
+
+ for (m = mounts; m; m = m->next) {
+ GFile *file = g_file_new_for_path (m->data);
+
+ g_message (" Adding:'%s'", (gchar*) m->data);
+ tracker_miner_fs_add_directory (TRACKER_MINER_FS (mf),
+ file,
+ TRUE);
+ g_object_unref (file);
+ }
g_signal_connect (mf->private->config, "notify::low-disk-space-limit",
G_CALLBACK (low_disk_space_limit_cb),
mf);
+ g_slist_foreach (mounts, (GFunc) g_free, NULL);
+ g_slist_free (mounts);
+
disk_space_check_start (mf);
}
@@ -664,32 +713,6 @@ mount_point_added_cb (TrackerStorage *storage,
}
static void
-initialize_removable_devices (TrackerMinerFiles *mf)
-{
- TrackerMinerFilesPrivate *priv;
-
- priv = TRACKER_MINER_FILES_GET_PRIVATE (mf);
-
- if (tracker_config_get_index_removable_devices (priv->config)) {
- GSList *mounts, *m;
-
- mounts = tracker_storage_get_removable_device_roots (priv->storage);
-
- for (m = mounts; m; m = m->next) {
- GFile *file = g_file_new_for_path (m->data);
-
- tracker_miner_fs_add_directory (TRACKER_MINER_FS (mf),
- file,
- TRUE);
- g_object_unref (file);
- }
-
- g_slist_foreach (mounts, (GFunc) g_free, NULL);
- g_slist_free (mounts);
- }
-}
-
-static void
set_up_throttle (TrackerMinerFiles *mf,
gboolean enable)
{