[tracker/urn-cache: 4/5] TrackerMinerFiles: Use existing URN in inserts if any.
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/urn-cache: 4/5] TrackerMinerFiles: Use existing URN in inserts if any.
- Date: Tue, 16 Feb 2010 16:18:55 +0000 (UTC)
commit 369652e6fcb8fb7988810581b836e46c03e5cc5e
Author: Carlos Garnacho <carlos lanedo com>
Date: Tue Feb 16 15:15:16 2010 +0100
TrackerMinerFiles: Use existing URN in inserts if any.
if the GFile already has an assigned URN in the store,
use that one when composing the insert.
src/tracker-miner-fs/tracker-miner-files.c | 46 +++++++++++++++++++++++++---
1 files changed, 41 insertions(+), 5 deletions(-)
---
diff --git a/src/tracker-miner-fs/tracker-miner-files.c b/src/tracker-miner-fs/tracker-miner-files.c
index 1a7f01b..048ce57 100644
--- a/src/tracker-miner-fs/tracker-miner-files.c
+++ b/src/tracker-miner-fs/tracker-miner-files.c
@@ -54,6 +54,7 @@ struct ProcessFileData {
TrackerSparqlBuilder *sparql;
GCancellable *cancellable;
GFile *file;
+ gchar *urn;
DBusGProxyCall *call;
};
@@ -1326,6 +1327,7 @@ miner_files_monitor_directory (TrackerMinerFS *fs,
static void
miner_files_add_to_datasource (TrackerMinerFiles *mf,
GFile *file,
+ const gchar *urn,
TrackerSparqlBuilder *sparql)
{
TrackerMinerFilesPrivate *priv;
@@ -1348,7 +1350,12 @@ miner_files_add_to_datasource (TrackerMinerFiles *mf,
removable_device_urn = g_strdup (TRACKER_NON_REMOVABLE_MEDIA_DATASOURCE_URN);
}
- tracker_sparql_builder_subject (sparql, "_:file");
+ if (urn) {
+ tracker_sparql_builder_subject_iri (sparql, urn);
+ } else {
+ tracker_sparql_builder_subject (sparql, "_:file");
+ }
+
tracker_sparql_builder_predicate (sparql, "a");
tracker_sparql_builder_object (sparql, "nfo:FileDataObject");
@@ -1369,6 +1376,7 @@ process_file_data_free (ProcessFileData *data)
g_object_unref (data->sparql);
g_object_unref (data->cancellable);
g_object_unref (data->file);
+ g_free (data->urn);
g_slice_free (ProcessFileData, data);
}
@@ -1423,8 +1431,17 @@ extractor_get_embedded_metadata_cb (DBusGProxy *proxy,
}
if (sparql && *sparql) {
- tracker_sparql_builder_append (data->sparql, "\n");
+ gchar *subject_str;
+
+ if (data->urn) {
+ subject_str = g_strdup_printf ("<%s> ", data->urn);
+ } else {
+ subject_str = g_strdup ("_:file ");
+ }
+
+ tracker_sparql_builder_append (data->sparql, subject_str);
tracker_sparql_builder_append (data->sparql, sparql);
+ g_free (subject_str);
}
tracker_sparql_builder_insert_close (data->sparql);
@@ -1549,6 +1566,7 @@ process_file_cb (GObject *object,
GFile *file, *parent;
gchar *uri;
GError *error = NULL;
+ const gchar *urn;
data = user_data;
file = G_FILE (object);
@@ -1567,9 +1585,23 @@ process_file_cb (GObject *object,
uri = g_file_get_uri (file);
mime_type = g_file_info_get_content_type (file_info);
+ urn = tracker_miner_fs_get_urn (TRACKER_MINER_FS (data->miner), file);
+
+ if (urn) {
+ data->urn = g_strdup (urn);
+ } else {
+ data->urn = NULL;
+ }
+
tracker_sparql_builder_insert_open (sparql, uri);
- tracker_sparql_builder_subject (sparql, "_:file");
+ if (data->urn) {
+ /* Item already exists and has an URN */
+ tracker_sparql_builder_subject_iri (sparql, data->urn);
+ } else {
+ /* No URN assigned, create one */
+ tracker_sparql_builder_subject (sparql, "_:file");
+ }
tracker_sparql_builder_predicate (sparql, "a");
tracker_sparql_builder_object (sparql, "nfo:FileDataObject");
@@ -1606,7 +1638,11 @@ process_file_cb (GObject *object,
/* Laying the link between the IE and the DO. We use IE = DO */
tracker_sparql_builder_predicate (sparql, "nie:isStoredAs");
- tracker_sparql_builder_object (sparql, "_:file");
+ if (data->urn) {
+ tracker_sparql_builder_object_iri (sparql, data->urn);
+ } else {
+ tracker_sparql_builder_object (sparql, "_:file");
+ }
/* The URL of the DataObject (because IE = DO, this is correct) */
tracker_sparql_builder_predicate (sparql, "nie:url");
@@ -1615,7 +1651,7 @@ process_file_cb (GObject *object,
tracker_sparql_builder_predicate (sparql, "nie:mimeType");
tracker_sparql_builder_object_string (sparql, mime_type);
- miner_files_add_to_datasource (data->miner, file, sparql);
+ miner_files_add_to_datasource (data->miner, file, data->urn, sparql);
/* Next step, getting embedded metadata */
extractor_get_embedded_metadata (data, uri, mime_type);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]