[tracker] libtracker-miner: Fallback to URN querying on UPDATE events and API requests



commit fa13d40db3b3e9865df90ce56ad179efb6b8f198
Author: Carlos Garnacho <carlosg gnome org>
Date:   Thu May 8 12:53:28 2014 +0200

    libtracker-miner: Fallback to URN querying on UPDATE events and API requests
    
    Otherwise the item is mistaken as new, which trigger warnings due to
    the duplicate insert.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=729708

 src/libtracker-miner/tracker-miner-fs.c |   32 ++++++++++++++++++++----------
 1 files changed, 21 insertions(+), 11 deletions(-)
---
diff --git a/src/libtracker-miner/tracker-miner-fs.c b/src/libtracker-miner/tracker-miner-fs.c
index bd8b183..b208731 100644
--- a/src/libtracker-miner/tracker-miner-fs.c
+++ b/src/libtracker-miner/tracker-miner-fs.c
@@ -2560,18 +2560,27 @@ miner_fs_get_queue_priority (TrackerMinerFS *fs,
 }
 
 static void
-miner_fs_queue_file (TrackerMinerFS       *fs,
-                    TrackerPriorityQueue *item_queue,
-                    GFile                *file)
+miner_fs_cache_file_urn (TrackerMinerFS *fs,
+                         GFile          *file,
+                         gboolean        query_urn)
 {
        const gchar *urn;
-       gint priority;
 
        /* Store urn as qdata */
-       urn = tracker_file_notifier_get_file_iri (fs->priv->file_notifier, file, FALSE);
+       urn = tracker_file_notifier_get_file_iri (fs->priv->file_notifier, file, query_urn);
        g_object_set_qdata_full (G_OBJECT (file), quark_file_iri,
                                 g_strdup (urn), (GDestroyNotify) g_free);
+}
+
+static void
+miner_fs_queue_file (TrackerMinerFS       *fs,
+                     TrackerPriorityQueue *item_queue,
+                     GFile                *file,
+                     gboolean              query_urn)
+{
+       gint priority;
 
+       miner_fs_cache_file_urn (fs, file, query_urn);
        priority = miner_fs_get_queue_priority (fs, file);
        tracker_priority_queue_add (item_queue, g_object_ref (file), priority);
 }
@@ -2702,7 +2711,7 @@ check_item_queues (TrackerMinerFS *fs,
                         */
                        g_debug ("  Found matching unhandled CREATED event "
                                 "for source file, merging both events together");
-                       miner_fs_queue_file (fs, fs->priv->items_created, other_file);
+                       miner_fs_queue_file (fs, fs->priv->items_created, other_file, FALSE);
 
                        return FALSE;
                }
@@ -2737,7 +2746,7 @@ file_notifier_file_created (TrackerFileNotifier  *notifier,
        TrackerMinerFS *fs = user_data;
 
        if (check_item_queues (fs, QUEUE_CREATED, file, NULL)) {
-               miner_fs_queue_file (fs, fs->priv->items_created, file);
+               miner_fs_queue_file (fs, fs->priv->items_created, file, FALSE);
                item_queue_handlers_set_up (fs);
        }
 }
@@ -2750,7 +2759,7 @@ file_notifier_file_deleted (TrackerFileNotifier  *notifier,
        TrackerMinerFS *fs = user_data;
 
        if (check_item_queues (fs, QUEUE_DELETED, file, NULL)) {
-               miner_fs_queue_file (fs, fs->priv->items_deleted, file);
+               miner_fs_queue_file (fs, fs->priv->items_deleted, file, FALSE);
                item_queue_handlers_set_up (fs);
        }
 }
@@ -2781,7 +2790,7 @@ file_notifier_file_updated (TrackerFileNotifier  *notifier,
                                            GINT_TO_POINTER (TRUE));
                }
 
-               miner_fs_queue_file (fs, fs->priv->items_updated, file);
+               miner_fs_queue_file (fs, fs->priv->items_updated, file, TRUE);
                item_queue_handlers_set_up (fs);
        }
 }
@@ -3104,7 +3113,7 @@ tracker_miner_fs_directory_remove_full (TrackerMinerFS *fs,
                         * to preserve remove_full() semantics.
                         */
                        trace_eq_push_tail ("DELETED", file, "on remove full");
-                       miner_fs_queue_file (fs, fs->priv->items_deleted, file);
+                       miner_fs_queue_file (fs, fs->priv->items_deleted, file, FALSE);
                        item_queue_handlers_set_up (fs);
                }
 
@@ -3148,7 +3157,7 @@ check_file_parents (TrackerMinerFS *fs,
 
        for (p = parents; p; p = p->next) {
                trace_eq_push_tail ("UPDATED", p->data, "checking file parents");
-               miner_fs_queue_file (fs, fs->priv->items_updated, p->data);
+               miner_fs_queue_file (fs, fs->priv->items_updated, p->data, TRUE);
                g_object_unref (p->data);
        }
 
@@ -3199,6 +3208,7 @@ tracker_miner_fs_check_file_with_priority (TrackerMinerFS *fs,
                }
 
                trace_eq_push_tail ("UPDATED", file, "Requested by application");
+               miner_fs_cache_file_urn (fs, file, TRUE);
                tracker_priority_queue_add (fs->priv->items_updated,
                                            g_object_ref (file),
                                            priority);


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