diff options
author | Carlos Garnacho <carlosg@gnome.org> | 2014-05-08 12:53:28 +0200 |
---|---|---|
committer | Martyn Russell <martyn@lanedo.com> | 2014-05-08 12:46:50 +0100 |
commit | 8edf06bfe4e0658bffa6d0405afd11b2d3e0fd4a (patch) | |
tree | 4a710da9ac1617c7aff3e9f9704467fc46b597ee | |
parent | 67fd48a5c2c742986a1de20c5dfe3c4e6eb0696e (diff) | |
download | tracker-8edf06bfe4e0658bffa6d0405afd11b2d3e0fd4a.tar.gz |
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
-rw-r--r-- | 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 bd8b18322..b2087313d 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); |