[tracker/removable-opticals] Fixes GB#621110: Remove resources from store if directory no longer indexed after conf change
- From: Aleksander Morgado <aleksm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/removable-opticals] Fixes GB#621110: Remove resources from store if directory no longer indexed after conf change
- Date: Wed, 16 Jun 2010 16:29:57 +0000 (UTC)
commit 53839a91273ee050a0cab530e78ea4fc27add98c
Author: Aleksander Morgado <aleksander lanedo com>
Date: Wed Jun 16 11:26:10 2010 +0200
Fixes GB#621110: Remove resources from store if directory no longer indexed after conf change
.../libtracker-miner/libtracker-miner-sections.txt | 1 +
src/libtracker-miner/tracker-miner-fs.c | 38 ++++++++++++++-
src/libtracker-miner/tracker-miner-fs.h | 48 ++++++++++---------
src/miners/fs/tracker-miner-files.c | 5 +-
4 files changed, 64 insertions(+), 28 deletions(-)
---
diff --git a/docs/reference/libtracker-miner/libtracker-miner-sections.txt b/docs/reference/libtracker-miner/libtracker-miner-sections.txt
index fa5f637..459ea3b 100644
--- a/docs/reference/libtracker-miner/libtracker-miner-sections.txt
+++ b/docs/reference/libtracker-miner/libtracker-miner-sections.txt
@@ -69,6 +69,7 @@ TrackerMinerFS
TrackerMinerFSClass
tracker_miner_fs_directory_add
tracker_miner_fs_directory_remove
+tracker_miner_fs_directory_remove_full
tracker_miner_fs_file_add
tracker_miner_fs_file_notify
tracker_miner_fs_set_throttle
diff --git a/src/libtracker-miner/tracker-miner-fs.c b/src/libtracker-miner/tracker-miner-fs.c
index 8244304..553da50 100644
--- a/src/libtracker-miner/tracker-miner-fs.c
+++ b/src/libtracker-miner/tracker-miner-fs.c
@@ -1496,7 +1496,7 @@ item_remove (TrackerMinerFS *fs,
iri_cache_invalidate (fs, file);
uri = g_file_get_uri (file);
- g_debug ("Removing item: '%s' (Deleted from filesystem)",
+ g_debug ("Removing item: '%s' (Deleted from filesystem or no longer monitored)",
uri);
if (!item_query_exists (fs, file, NULL, &mime)) {
@@ -2271,7 +2271,7 @@ remove_unexisting_file_cb (gpointer key,
TrackerMinerFS *fs = user_data;
GFile *file = key;
- /* If file no longer exists, remove it from the store*/
+ /* If file no longer exists, remove it from the store */
if (!g_file_query_exists (file, NULL)) {
gchar *uri;
@@ -3181,7 +3181,8 @@ check_files_removal (GQueue *queue,
* @fs: a #TrackerMinerFS
* @file: #GFile for the directory to be removed
*
- * Removes a directory from being inspected by @fs.
+ * Removes a directory from being inspected by @fs. Note that only directory
+ * watches are removed.
*
* Returns: %TRUE if the directory was successfully removed.
**/
@@ -3268,6 +3269,37 @@ tracker_miner_fs_directory_remove (TrackerMinerFS *fs,
return return_val;
}
+
+/**
+ * tracker_miner_fs_directory_remove_full:
+ * @fs: a #TrackerMinerFS
+ * @file: #GFile for the directory to be removed
+ *
+ * Removes a directory from being inspected by @fs, and removes all
+ * associated metadata from the store.
+ *
+ * Returns: %TRUE if the directory was successfully removed.
+ **/
+gboolean
+tracker_miner_fs_directory_remove_full (TrackerMinerFS *fs,
+ GFile *file)
+{
+ g_return_val_if_fail (TRACKER_IS_MINER_FS (fs), FALSE);
+ g_return_val_if_fail (G_IS_FILE (file), FALSE);
+
+ /* Tell miner not to keep on inspecting the directory... */
+ if (tracker_miner_fs_directory_remove (fs, file)) {
+ /* And remove all info about the directory from the store... */
+ g_queue_push_tail (fs->private->items_deleted,
+ g_object_ref (file));
+ item_queue_handlers_set_up (fs);
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
/**
* tracker_miner_fs_file_add:
* @fs: a #TrackerMinerFS
diff --git a/src/libtracker-miner/tracker-miner-fs.h b/src/libtracker-miner/tracker-miner-fs.h
index 7eda517..45f376e 100644
--- a/src/libtracker-miner/tracker-miner-fs.h
+++ b/src/libtracker-miner/tracker-miner-fs.h
@@ -94,29 +94,31 @@ typedef struct {
void (* finished) (TrackerMinerFS *fs);
} TrackerMinerFSClass;
-GType tracker_miner_fs_get_type (void) G_GNUC_CONST;
-void tracker_miner_fs_directory_add (TrackerMinerFS *fs,
- GFile *file,
- gboolean recurse);
-gboolean tracker_miner_fs_directory_remove (TrackerMinerFS *fs,
- GFile *file);
-void tracker_miner_fs_file_add (TrackerMinerFS *fs,
- GFile *file);
-void tracker_miner_fs_file_notify (TrackerMinerFS *fs,
- GFile *file,
- const GError *error);
-void tracker_miner_fs_set_throttle (TrackerMinerFS *fs,
- gdouble throttle);
-gdouble tracker_miner_fs_get_throttle (TrackerMinerFS *fs);
-G_CONST_RETURN gchar *tracker_miner_fs_get_urn (TrackerMinerFS *fs,
- GFile *file);
-G_CONST_RETURN gchar *tracker_miner_fs_get_parent_urn (TrackerMinerFS *fs,
- GFile *file);
-void tracker_miner_fs_force_recheck (TrackerMinerFS *fs);
-
-void tracker_miner_fs_set_initial_crawling (TrackerMinerFS *fs,
- gboolean do_initial_crawling);
-gboolean tracker_miner_fs_get_initial_crawling (TrackerMinerFS *fs);
+GType tracker_miner_fs_get_type (void) G_GNUC_CONST;
+void tracker_miner_fs_directory_add (TrackerMinerFS *fs,
+ GFile *file,
+ gboolean recurse);
+gboolean tracker_miner_fs_directory_remove (TrackerMinerFS *fs,
+ GFile *file);
+gboolean tracker_miner_fs_directory_remove_full (TrackerMinerFS *fs,
+ GFile *file);
+void tracker_miner_fs_file_add (TrackerMinerFS *fs,
+ GFile *file);
+void tracker_miner_fs_file_notify (TrackerMinerFS *fs,
+ GFile *file,
+ const GError *error);
+void tracker_miner_fs_set_throttle (TrackerMinerFS *fs,
+ gdouble throttle);
+gdouble tracker_miner_fs_get_throttle (TrackerMinerFS *fs);
+G_CONST_RETURN gchar *tracker_miner_fs_get_urn (TrackerMinerFS *fs,
+ GFile *file);
+G_CONST_RETURN gchar *tracker_miner_fs_get_parent_urn (TrackerMinerFS *fs,
+ GFile *file);
+void tracker_miner_fs_force_recheck (TrackerMinerFS *fs);
+
+void tracker_miner_fs_set_initial_crawling (TrackerMinerFS *fs,
+ gboolean do_initial_crawling);
+gboolean tracker_miner_fs_get_initial_crawling (TrackerMinerFS *fs);
G_END_DECLS
diff --git a/src/miners/fs/tracker-miner-files.c b/src/miners/fs/tracker-miner-files.c
index 1611a5a..34d736e 100644
--- a/src/miners/fs/tracker-miner-files.c
+++ b/src/miners/fs/tracker-miner-files.c
@@ -1246,10 +1246,11 @@ update_directories_from_new_config (TrackerMinerFS *mf,
if (!tracker_string_in_gslist (path, new_dirs)) {
GFile *file;
- g_message (" Removing directory:'%s'", path);
+ g_message (" Removing directory: '%s'", path);
file = g_file_new_for_path (path);
- tracker_miner_fs_directory_remove (TRACKER_MINER_FS (mf), file);
+ /* Fully remove item (monitors and from store) */
+ tracker_miner_fs_directory_remove_full (TRACKER_MINER_FS (mf), file);
g_object_unref (file);
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]