[tracker] libtracker-miner: if CREATED event is received from the monitor, force IRI cache update



commit 0581f684fed10fc478321146d27a833643f299ba
Author: Aleksander Morgado <aleksander lanedo com>
Date:   Mon Aug 30 12:06:58 2010 +0200

    libtracker-miner: if CREATED event is received from the monitor, force IRI cache update
    
     * The issue comes from NB#188494, but it doesn't fully fix it. The issue seems
       to be that the camera application is also inserting a new element in the store
       and doesn't check if it already exists before.

 src/libtracker-miner/tracker-miner-fs.c |   32 +++++++++++++++++++++++++++---
 1 files changed, 28 insertions(+), 4 deletions(-)
---
diff --git a/src/libtracker-miner/tracker-miner-fs.c b/src/libtracker-miner/tracker-miner-fs.c
index a9f27d0..a593885 100644
--- a/src/libtracker-miner/tracker-miner-fs.c
+++ b/src/libtracker-miner/tracker-miner-fs.c
@@ -1517,7 +1517,8 @@ item_add_or_update_cb (TrackerMinerFS *fs,
 
 static gboolean
 item_add_or_update (TrackerMinerFS *fs,
-                    GFile          *file)
+                    GFile          *file,
+                    gboolean        force_cache_update)
 {
 	TrackerMinerFSPrivate *priv;
 	TrackerSparqlBuilder *sparql;
@@ -1538,7 +1539,8 @@ item_add_or_update (TrackerMinerFS *fs,
 	parent = g_file_get_parent (file);
 
 	if (parent) {
-		if (!fs->private->current_iri_cache_parent ||
+		if (force_cache_update ||
+		    !fs->private->current_iri_cache_parent ||
 		    !g_file_equal (parent, fs->private->current_iri_cache_parent)) {
 			/* Cache the URN for the new current parent, processing
 			 * order guarantees that all contents for a folder are
@@ -1592,6 +1594,26 @@ item_add_or_update (TrackerMinerFS *fs,
 }
 
 static gboolean
+item_add (TrackerMinerFS *fs,
+          GFile          *file)
+{
+	/* We force cache update when new item creations, so that we try to
+	 * avoid duplicates if the item was already created in the store by
+	 * an external application */
+	return item_add_or_update (fs, file, TRUE);
+}
+
+static gboolean
+item_update (TrackerMinerFS *fs,
+             GFile          *file)
+{
+	/* When getting UPDATE events, don't force cache updates, just follow
+	 * the standard rules. */
+	return item_add_or_update (fs, file, FALSE);
+}
+
+
+static gboolean
 item_remove (TrackerMinerFS *fs,
              GFile          *file)
 {
@@ -1887,7 +1909,7 @@ item_move (TrackerMinerFS *fs,
 			tracker_miner_fs_directory_add_internal (fs, file);
 			retval = TRUE;
 		} else {
-			retval = item_add_or_update (fs, file);
+			retval = item_add (fs, file);
 		}
 
 		g_free (source_uri);
@@ -2373,8 +2395,10 @@ item_queue_handlers_cb (gpointer user_data)
 		keep_processing = item_remove (fs, file);
 		break;
 	case QUEUE_CREATED:
+		keep_processing = item_add (fs, file);
+		break;
 	case QUEUE_UPDATED:
-		keep_processing = item_add_or_update (fs, file);
+		keep_processing = item_update (fs, file);
 		break;
 	case QUEUE_IGNORE_NEXT_UPDATE:
 		keep_processing = item_ignore_next_update (fs, file, source_file);



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