[tracker/mounts-without-volumes: 1/23] Fixes NB#172818: Tracker is not indexing new content on EMMC
- From: Martyn James Russell <mr src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/mounts-without-volumes: 1/23] Fixes NB#172818: Tracker is not indexing new content on EMMC
- Date: Tue, 15 Jun 2010 08:57:27 +0000 (UTC)
commit 9b090f28614a7e0d27af77a21944f3a96034501f
Author: Aleksander Morgado <aleksander lanedo com>
Date: Tue Jun 8 11:09:42 2010 +0200
Fixes NB#172818: Tracker is not indexing new content on EMMC
* If the mount point detected doesn't setup a GVolume (as it
is in fstab), then just force a re-check of the directories
indexed to see if anything changed.
src/libtracker-miner/tracker-storage.c | 45 +++++++++++---------
src/miners/fs/tracker-miner-files.c | 72 ++++++++++++++++++--------------
2 files changed, 65 insertions(+), 52 deletions(-)
---
diff --git a/src/libtracker-miner/tracker-storage.c b/src/libtracker-miner/tracker-storage.c
index 90a9b13..d5f40d0 100644
--- a/src/libtracker-miner/tracker-storage.c
+++ b/src/libtracker-miner/tracker-storage.c
@@ -337,11 +337,13 @@ mount_add (TrackerStorage *storage,
priv = TRACKER_STORAGE_GET_PRIVATE (storage);
- node = mount_add_hierarchy (priv->mounts, uuid, mount_point, removable_device, optical_disc);
- g_hash_table_insert (priv->mounts_by_uuid, g_strdup (uuid), node);
+ if (uuid) {
+ node = mount_add_hierarchy (priv->mounts, uuid, mount_point, removable_device, optical_disc);
+ g_hash_table_insert (priv->mounts_by_uuid, g_strdup (uuid), node);
+ }
- g_signal_emit (storage,
- signals[MOUNT_POINT_ADDED],
+ g_signal_emit (storage,
+ signals[MOUNT_POINT_ADDED],
0,
uuid,
mount_point,
@@ -366,9 +368,9 @@ mount_guess_content_type (GFile *mount_root,
} else {
gchar **guess_type;
gint i;
-
+
guess_type = g_content_type_guess_for_tree (mount_root);
-
+
for (i = 0; guess_type && guess_type[i]; i++) {
if (!g_strcmp0 (guess_type[i], "x-content/image-picturecd")) {
/* Images */
@@ -411,7 +413,7 @@ mount_guess_content_type (GFile *mount_root,
break;
}
}
-
+
if (guess_type) {
g_strfreev (guess_type);
}
@@ -449,7 +451,7 @@ volume_add (TrackerStorage *storage,
name = g_volume_get_name (volume);
g_debug (" Volume:'%s' found", name);
-
+
if (!g_volume_should_automount (volume) ||
!g_volume_can_mount (volume)) {
g_debug (" Ignoring, volume can not be automatically mounted or mounted at all");
@@ -463,8 +465,8 @@ volume_add (TrackerStorage *storage,
gchar *content_type;
gboolean is_multimedia;
- mount = g_volume_get_mount (volume);
-
+ mount = g_volume_get_mount (volume);
+
if (mount) {
file = g_mount_get_root (mount);
g_object_unref (mount);
@@ -507,26 +509,26 @@ volume_add (TrackerStorage *storage,
device_file = g_volume_get_identifier (volume, G_VOLUME_IDENTIFIER_KIND_UNIX_DEVICE);
g_debug (" Device file : %s", device_file);
-
- mount = g_volume_get_mount (volume);
+
+ mount = g_volume_get_mount (volume);
if (mount) {
GFile *file;
-
+
file = g_mount_get_root (mount);
-
+
mount_point = g_file_get_path (file);
g_debug (" Mount point : %s", mount_point);
-
+
g_object_unref (file);
g_object_unref (mount);
-
+
is_mounted = TRUE;
} else {
mount_point = NULL;
is_mounted = FALSE;
}
-
+
g_debug (" UUID : %s", uuid);
g_debug (" Mounted : %s", is_mounted ? "yes" : "no");
@@ -566,7 +568,7 @@ drives_setup (TrackerStorage *storage)
if (!drive) {
continue;
}
-
+
volumes = g_drive_get_volumes (drive);
name = g_drive_get_name (drive);
@@ -658,7 +660,8 @@ mount_added_cb (GVolumeMonitor *monitor,
g_free (device_file);
g_object_unref (volume);
} else {
- g_message (" Being ignored because we have no GVolume");
+ g_message (" Non-Volume mount detected, forcing re-check");
+ mount_add (storage, NULL, mount_point, FALSE, FALSE);
}
g_free (mount_point);
@@ -700,7 +703,7 @@ mount_removed_cb (GVolumeMonitor *monitor,
mount_point);
g_signal_emit (storage, signals[MOUNT_POINT_REMOVED], 0, info->uuid, mount_point, NULL);
-
+
g_hash_table_remove (priv->mounts_by_uuid, info->uuid);
mount_node_free (node);
} else {
@@ -811,7 +814,7 @@ tracker_storage_get_device_roots (TrackerStorage *storage,
*
* Returns: a #GSList of strings containing the UUID for devices with
* @type based on @exact_match. Each element must be freed using
- * g_free() and the list itself through g_slist_free().
+ * g_free() and the list itself through g_slist_free().
**/
GSList *
tracker_storage_get_device_uuids (TrackerStorage *storage,
diff --git a/src/miners/fs/tracker-miner-files.c b/src/miners/fs/tracker-miner-files.c
index 0fdca5f..5043356 100644
--- a/src/miners/fs/tracker-miner-files.c
+++ b/src/miners/fs/tracker-miner-files.c
@@ -140,6 +140,7 @@ static void index_recursive_directories_cb (GObject *g
static void index_single_directories_cb (GObject *gobject,
GParamSpec *arg1,
gpointer user_data);
+static gboolean miner_files_force_recheck_idle (gpointer user_data);
static void ignore_directories_cb (GObject *gobject,
GParamSpec *arg1,
gpointer user_data);
@@ -841,7 +842,6 @@ mount_point_added_cb (TrackerStorage *storage,
gchar *urn;
gboolean index_removable_devices;
gboolean index_optical_discs;
- gboolean should_crawl;
priv = TRACKER_MINER_FILES_GET_PRIVATE (miner);
@@ -850,40 +850,50 @@ mount_point_added_cb (TrackerStorage *storage,
g_message ("Added mount point '%s'", mount_point);
- should_crawl = TRUE;
+ if (uuid) {
+ /* We only get UUID if this mount point was actually coming from a
+ * proper GVolume (user-mountable). */
- if (removable && !tracker_config_get_index_removable_devices (priv->config)) {
- g_message (" Not crawling, removable devices disabled in config");
- should_crawl = FALSE;
- }
+ if (removable && !tracker_config_get_index_removable_devices (priv->config)) {
+ g_message (" Not crawling, removable devices disabled in config");
+ } else if (optical && !tracker_config_get_index_optical_discs (priv->config)) {
+ g_message (" Not crawling, optical devices discs disabled in config");
+ } else {
+ g_message (" Adding directory to crawler's queue");
- if (optical && !tracker_config_get_index_optical_discs (priv->config)) {
- g_message (" Not crawling, optical devices discs disabled in config");
- should_crawl = FALSE;
- }
+ file = g_file_new_for_path (mount_point);
+ g_object_set_qdata_full (G_OBJECT (file),
+ priv->quark_mount_point_uuid,
+ g_strdup (uuid),
+ (GDestroyNotify) g_free);
- if (should_crawl) {
- g_message (" Adding directory to crawler's queue");
+ g_object_set_qdata (G_OBJECT (file),
+ priv->quark_directory_config_root,
+ GINT_TO_POINTER (TRUE));
- file = g_file_new_for_path (mount_point);
- g_object_set_qdata_full (G_OBJECT (file),
- priv->quark_mount_point_uuid,
- g_strdup (uuid),
- (GDestroyNotify) g_free);
+ tracker_miner_fs_directory_add (TRACKER_MINER_FS (user_data),
+ file,
+ TRUE);
+ g_object_unref (file);
+ }
- g_object_set_qdata (G_OBJECT (file),
- priv->quark_directory_config_root,
- GINT_TO_POINTER (TRUE));
+ urn = g_strdup_printf (TRACKER_DATASOURCE_URN_PREFIX "%s", uuid);
+ set_up_mount_point (miner, urn, mount_point, TRUE, NULL);
+ g_free (urn);
+ } else {
+ /* If we don't get a UUID, it probably is because the mount point
+ * was not really user-mountable (so also not a removable media or
+ * optical disk). In this case, we just force a re-check as if the
+ * conf had changed, so that if any path inside the mount was
+ * configured to be indexed, it's properly updated.
+ */
- tracker_miner_fs_directory_add (TRACKER_MINER_FS (user_data),
- file,
- TRUE);
- g_object_unref (file);
+ if (miner->private->force_recheck_id == 0) {
+ /* Set idle so multiple changes in the config lead to one recheck */
+ miner->private->force_recheck_id =
+ g_idle_add (miner_files_force_recheck_idle, miner);
+ }
}
-
- urn = g_strdup_printf (TRACKER_DATASOURCE_URN_PREFIX "%s", uuid);
- set_up_mount_point (miner, urn, mount_point, TRUE, NULL);
- g_free (urn);
}
#if defined(HAVE_UPOWER) || defined(HAVE_HAL)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]