[tracker/hierarchical-indexing] TrackerMinerFiles: Use TrackerMinerFS API to get URNs.
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/hierarchical-indexing] TrackerMinerFiles: Use TrackerMinerFS API to get URNs.
- Date: Thu, 18 Feb 2010 12:39:47 +0000 (UTC)
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]