[tracker/hierarchical-indexing] TrackerMinerFiles: Use TrackerMinerFS API to get URNs.



commit 7224e7f3d338ab9ccc3cc68e3821fe89a8edb551
Author: Carlos Garnacho <carlos lanedo com>
Date:   Thu Feb 18 13:37:56 2010 +0100

    TrackerMinerFiles: Use TrackerMinerFS API to get URNs.
    
    Now both file and parent URNs are taken from TrackerMinerFS if
    any. In the case a file doesn't exist (i.e. doesn't have an URN
    yet) an anonymous URN will be used as usual.

 src/libtracker-miner/tracker-miner-fs.c    |    4 -
 src/tracker-miner-fs/tracker-miner-files.c |   99 +++++++++++++++++-----------
 2 files changed, 61 insertions(+), 42 deletions(-)
---
diff --git a/src/libtracker-miner/tracker-miner-fs.c b/src/libtracker-miner/tracker-miner-fs.c
index 801dd4d..9b2537a 100644
--- a/src/libtracker-miner/tracker-miner-fs.c
+++ b/src/libtracker-miner/tracker-miner-fs.c
@@ -2279,7 +2279,6 @@ crawler_check_directory_contents_cb (TrackerCrawler *crawler,
 	return process;
 }
 
-#if 0
 static gboolean
 print_file_tree (GNode    *node,
 		 gpointer  user_data)
@@ -2299,7 +2298,6 @@ print_file_tree (GNode    *node,
 
 	return FALSE;
 }
-#endif
 
 static CrawledDirectoryData *
 crawled_directory_data_new (GNode *tree)
@@ -2348,11 +2346,9 @@ crawler_directory_crawled_cb (TrackerCrawler *crawler,
 	TrackerMinerFS *fs = user_data;
 	CrawledDirectoryData *dir_data;
 
-#if 0
 	/* Debug printing of the directory tree */
 	g_node_traverse (tree, G_PRE_ORDER, G_TRAVERSE_ALL, -1,
 			 print_file_tree, NULL);
-#endif
 
 	/* Add tree to the crawled directories queue, this queue
 	 * will be used to fill priv->items_created in when no
diff --git a/src/tracker-miner-fs/tracker-miner-files.c b/src/tracker-miner-fs/tracker-miner-files.c
index 1a7f01b..4fcd3e8 100644
--- a/src/tracker-miner-fs/tracker-miner-files.c
+++ b/src/tracker-miner-fs/tracker-miner-files.c
@@ -1323,6 +1323,25 @@ miner_files_monitor_directory (TrackerMinerFS *fs,
 	return miner_files_check_directory (fs, file);
 }
 
+static const gchar *
+miner_files_get_file_urn (TrackerMinerFiles *miner,
+                          GFile             *file,
+			  gboolean          *is_iri)
+{
+	const gchar *urn;
+
+	urn = tracker_miner_fs_get_urn (TRACKER_MINER_FS (miner), file);
+	*is_iri = TRUE;
+
+	if (!urn) {
+		/* This is a new insertion, use anonymous URNs to store files */
+		urn = "_:file";
+		*is_iri = FALSE;
+	}
+
+	return urn;
+}
+
 static void
 miner_files_add_to_datasource (TrackerMinerFiles    *mf,
                                GFile                *file,
@@ -1331,6 +1350,8 @@ miner_files_add_to_datasource (TrackerMinerFiles    *mf,
 	TrackerMinerFilesPrivate *priv;
 	const gchar *removable_device_udi;
 	gchar *removable_device_urn, *uri;
+	const gchar *urn;
+	gboolean is_iri;
 
 	priv = TRACKER_MINER_FILES_GET_PRIVATE (mf);
 	uri = g_file_get_uri (file);
@@ -1348,7 +1369,14 @@ miner_files_add_to_datasource (TrackerMinerFiles    *mf,
 		removable_device_urn = g_strdup (TRACKER_NON_REMOVABLE_MEDIA_DATASOURCE_URN);
 	}
 
-	tracker_sparql_builder_subject (sparql, "_:file");
+	urn = miner_files_get_file_urn (mf, file, &is_iri);
+
+	if (is_iri) {
+		tracker_sparql_builder_subject_iri (sparql, urn);
+	} else {
+		tracker_sparql_builder_subject (sparql, urn);
+	}
+
 	tracker_sparql_builder_predicate (sparql, "a");
 	tracker_sparql_builder_object (sparql, "nfo:FileDataObject");
 
@@ -1423,37 +1451,26 @@ extractor_get_embedded_metadata_cb (DBusGProxy *proxy,
 	}
 
 	if (sparql && *sparql) {
-		tracker_sparql_builder_append (data->sparql, "\n");
-		tracker_sparql_builder_append (data->sparql, sparql);
-	}
-
-	tracker_sparql_builder_insert_close (data->sparql);
-
-	if (g_object_get_qdata (G_OBJECT (data->file),
-	                        priv->quark_directory_config_root) == NULL) {
-		GFile *parent;
+		gboolean is_iri;
+		const gchar *urn;
 
-		parent = g_file_get_parent (data->file);
+		urn = miner_files_get_file_urn (data->miner, data->file, &is_iri);
 
-		if (parent) {
-			gchar *parent_uri;
+		if (is_iri) {
+			gchar *str;
 
-			parent_uri = g_file_get_uri (parent);
-
-			/* Add where clause for the nfo:belongsToContainer */
-			tracker_sparql_builder_where_open (data->sparql);
-
-			tracker_sparql_builder_subject_variable (data->sparql, "parent");
-			tracker_sparql_builder_predicate (data->sparql, "nie:url");
-			tracker_sparql_builder_object_string (data->sparql, parent_uri);
-
-			tracker_sparql_builder_where_close (data->sparql);
-
-			g_free (parent_uri);
-			g_object_unref (parent);
+			str = g_strdup_printf ("<%s>", urn);
+			tracker_sparql_builder_append (data->sparql, str);
+			g_free (str);
+		} else {
+			tracker_sparql_builder_append (data->sparql, urn);
 		}
+
+		tracker_sparql_builder_append (data->sparql, sparql);
 	}
 
+	tracker_sparql_builder_insert_close (data->sparql);
+
 	/* Prepend preupdate queries */
 	if (preupdate && *preupdate) {
 		tracker_sparql_builder_prepend (data->sparql, preupdate);
@@ -1543,12 +1560,13 @@ process_file_cb (GObject      *object,
 	TrackerMinerFilesPrivate *priv;
 	TrackerSparqlBuilder *sparql;
 	ProcessFileData *data;
-	const gchar *mime_type;
+	const gchar *mime_type, *urn, *parent_urn;
 	GFileInfo *file_info;
 	guint64 time_;
-	GFile *file, *parent;
+	GFile *file;
 	gchar *uri;
 	GError *error = NULL;
+	gboolean is_iri;
 
 	data = user_data;
 	file = G_FILE (object);
@@ -1566,10 +1584,15 @@ process_file_cb (GObject      *object,
 
 	uri = g_file_get_uri (file);
 	mime_type = g_file_info_get_content_type (file_info);
+	urn = miner_files_get_file_urn (TRACKER_MINER_FILES (data->miner), file, &is_iri);
 
 	tracker_sparql_builder_insert_open (sparql, uri);
 
-	tracker_sparql_builder_subject (sparql, "_:file");
+	if (is_iri) {
+		tracker_sparql_builder_subject_iri (sparql, urn);
+	} else {
+		tracker_sparql_builder_subject (sparql, urn);
+	}
 
 	tracker_sparql_builder_predicate (sparql, "a");
 	tracker_sparql_builder_object (sparql, "nfo:FileDataObject");
@@ -1579,15 +1602,11 @@ process_file_cb (GObject      *object,
 		tracker_sparql_builder_object (sparql, "nfo:Folder");
 	}
 
-	if (g_object_get_qdata (G_OBJECT (data->file),
-	                        priv->quark_directory_config_root) == NULL) {
-		parent = g_file_get_parent (file);
+	parent_urn = tracker_miner_fs_get_parent_urn (TRACKER_MINER_FS (data->miner), file);
 
-		if (parent) {
-			tracker_sparql_builder_predicate (sparql, "nfo:belongsToContainer");
-			tracker_sparql_builder_object_variable (sparql, "parent");
-			g_object_unref (parent);
-		}
+	if (parent_urn) {
+		tracker_sparql_builder_predicate (sparql, "nfo:belongsToContainer");
+		tracker_sparql_builder_object_iri (sparql, parent_urn);
 	}
 
 	tracker_sparql_builder_predicate (sparql, "nfo:fileName");
@@ -1606,7 +1625,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 (is_iri) {
+		tracker_sparql_builder_object_iri (sparql, urn);
+	} else {
+		tracker_sparql_builder_object (sparql, urn);
+	}
 
 	/* The URL of the DataObject (because IE = DO, this is correct) */
 	tracker_sparql_builder_predicate (sparql, "nie:url");



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