summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2014-05-08 12:53:28 +0200
committerMartyn Russell <martyn@lanedo.com>2014-05-08 12:46:50 +0100
commit8edf06bfe4e0658bffa6d0405afd11b2d3e0fd4a (patch)
tree4a710da9ac1617c7aff3e9f9704467fc46b597ee
parent67fd48a5c2c742986a1de20c5dfe3c4e6eb0696e (diff)
downloadtracker-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.c32
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);