[tracker/tracker-0.10] libtracker-extract: Support graph in tracker_xmp_apply_regions()



commit 3065aaa440724773b32795157ef7970494439b46
Author: Martyn Russell <martyn lanedo com>
Date:   Tue Sep 6 17:34:41 2011 +0100

    libtracker-extract: Support graph in tracker_xmp_apply_regions()

 src/libtracker-extract/tracker-xmp.c        |   39 ++++++++++++++++-----------
 src/libtracker-extract/tracker-xmp.h        |    1 +
 src/tracker-extract/tracker-extract-jpeg.c  |    2 +-
 src/tracker-extract/tracker-extract-pdf.c   |    2 +-
 src/tracker-extract/tracker-extract-tiff.c  |    2 +-
 tests/libtracker-extract/tracker-test-xmp.c |   18 ++++++------
 6 files changed, 36 insertions(+), 28 deletions(-)
---
diff --git a/src/libtracker-extract/tracker-xmp.c b/src/libtracker-extract/tracker-xmp.c
index 0cc7611..796011e 100644
--- a/src/libtracker-extract/tracker-xmp.c
+++ b/src/libtracker-extract/tracker-xmp.c
@@ -1159,7 +1159,7 @@ tracker_xmp_apply (TrackerSparqlBuilder *preupdate,
 	}
 
         if (data->regions) {
-                tracker_xmp_apply_regions (preupdate, metadata, where, uri, data);
+	        tracker_xmp_apply_regions (preupdate, metadata, graph, where, uri, data);
         }
 
 	return TRUE;
@@ -1168,12 +1168,12 @@ tracker_xmp_apply (TrackerSparqlBuilder *preupdate,
 gboolean
 tracker_xmp_apply_regions (TrackerSparqlBuilder *preupdate,
                            TrackerSparqlBuilder *metadata,
+                           const gchar          *graph,
                            GString              *where,
                            const gchar          *uri,
                            TrackerXmpData       *data)
 {
         GSList *iter;
-        TrackerXmpRegion *region;
 
         g_return_val_if_fail (TRACKER_SPARQL_IS_BUILDER (preupdate), FALSE);
         g_return_val_if_fail (TRACKER_SPARQL_IS_BUILDER (preupdate), FALSE);
@@ -1185,19 +1185,20 @@ tracker_xmp_apply_regions (TrackerSparqlBuilder *preupdate,
         }
 
         for (iter = data->regions; iter != NULL; iter = iter->next) {
-                gchar *reguuid;
+	        TrackerXmpRegion *region;
+	        gchar *uuid;
 
-                reguuid = tracker_sparql_get_uuid_urn ();
                 region = (TrackerXmpRegion *) iter->data;
+                uuid = tracker_sparql_get_uuid_urn ();
 
-                tracker_sparql_builder_predicate (metadata, "nfo:hasRegionOfInterest");
-                tracker_sparql_builder_object_iri (metadata, reguuid);
-
-                tracker_sparql_builder_insert_open (preupdate, NULL);
-                tracker_sparql_builder_subject_iri (preupdate, reguuid);
+		tracker_sparql_builder_insert_open (preupdate, NULL);
+		if (graph) {
+			tracker_sparql_builder_graph_open (preupdate, graph);
+		}
 
-                tracker_sparql_builder_predicate (preupdate, "a");
-                tracker_sparql_builder_object (preupdate, "nfo:RegionOfInterest");
+		tracker_sparql_builder_subject_iri (preupdate, uuid);
+		tracker_sparql_builder_predicate (preupdate, "a");
+		tracker_sparql_builder_object (preupdate, "nfo:RegionOfInterest");
 
                 if (region->title) {
                         tracker_sparql_builder_predicate (preupdate, "nie:title");
@@ -1234,12 +1235,9 @@ tracker_xmp_apply_regions (TrackerSparqlBuilder *preupdate,
                         tracker_sparql_builder_object_unvalidated (preupdate, region->height);
                 }
 
-
-                tracker_sparql_builder_insert_close (preupdate);
-
                 if (region->link_uri && region->link_class) {
                         tracker_sparql_builder_insert_open (preupdate, NULL);
-                        tracker_sparql_builder_subject_iri (preupdate, reguuid);
+                        tracker_sparql_builder_subject_variable (preupdate, "region");
                         tracker_sparql_builder_predicate (preupdate, "nfo:roiRefersTo");
                         tracker_sparql_builder_object_iri (preupdate, region->link_uri);
                         tracker_sparql_builder_insert_close (preupdate);
@@ -1251,7 +1249,16 @@ tracker_xmp_apply_regions (TrackerSparqlBuilder *preupdate,
                         tracker_sparql_builder_where_close (preupdate);
                 }
 
-                g_free (reguuid);
+		if (graph) {
+			tracker_sparql_builder_graph_close (preupdate);
+		}
+		tracker_sparql_builder_insert_close (preupdate);
+
+                /* Handle non-preupdate metadata */
+                tracker_sparql_builder_predicate (metadata, "nfo:hasRegionOfInterest");
+                tracker_sparql_builder_object_iri (metadata, uuid);
+
+                g_free (uuid);
         }
 
         return TRUE;
diff --git a/src/libtracker-extract/tracker-xmp.h b/src/libtracker-extract/tracker-xmp.h
index 23f7d9e..07de767 100644
--- a/src/libtracker-extract/tracker-xmp.h
+++ b/src/libtracker-extract/tracker-xmp.h
@@ -116,6 +116,7 @@ gboolean        tracker_xmp_apply         (TrackerSparqlBuilder *preupdate,
                                            TrackerXmpData       *data);
 gboolean        tracker_xmp_apply_regions (TrackerSparqlBuilder *preupdate,
                                            TrackerSparqlBuilder *metadata,
+                                           const gchar          *graph,
                                            GString              *where,
                                            const gchar          *uri,
                                            TrackerXmpData       *data);
diff --git a/src/tracker-extract/tracker-extract-jpeg.c b/src/tracker-extract/tracker-extract-jpeg.c
index b15fbe6..d52bdf9 100644
--- a/src/tracker-extract/tracker-extract-jpeg.c
+++ b/src/tracker-extract/tracker-extract-jpeg.c
@@ -419,7 +419,7 @@ extract_jpeg (const gchar          *uri,
 	}
 
         if (xd->regions) {
-                tracker_xmp_apply_regions (preupdate, metadata, where, uri, xd);
+	        tracker_xmp_apply_regions (preupdate, metadata, graph, where, uri, xd);
         }
 
 	if (id->keywords) {
diff --git a/src/tracker-extract/tracker-extract-pdf.c b/src/tracker-extract/tracker-extract-pdf.c
index 19fd68d..8574c6f 100644
--- a/src/tracker-extract/tracker-extract-pdf.c
+++ b/src/tracker-extract/tracker-extract-pdf.c
@@ -577,7 +577,7 @@ extract_pdf (const gchar          *uri,
 		}
 
                 if (xd->regions) {
-                        tracker_xmp_apply_regions (preupdate, metadata, where, uri, xd);
+	                tracker_xmp_apply_regions (preupdate, metadata, graph, NULL, uri, xd);
                 }
 
 		tracker_xmp_free (xd);
diff --git a/src/tracker-extract/tracker-extract-tiff.c b/src/tracker-extract/tracker-extract-tiff.c
index c8da02c..29b1ea0 100644
--- a/src/tracker-extract/tracker-extract-tiff.c
+++ b/src/tracker-extract/tracker-extract-tiff.c
@@ -480,7 +480,7 @@ extract_tiff (const gchar          *uri,
 	}
 
         if (xd->regions) {
-                tracker_xmp_apply_regions (preupdate, metadata, where, uri, xd);
+	        tracker_xmp_apply_regions (preupdate, metadata, graph, NULL, uri, xd);
         }
 
 	if (md.address || md.state || md.country || md.city ||
diff --git a/tests/libtracker-extract/tracker-test-xmp.c b/tests/libtracker-extract/tracker-test-xmp.c
index d4aaac0..edaee91 100644
--- a/tests/libtracker-extract/tracker-test-xmp.c
+++ b/tests/libtracker-extract/tracker-test-xmp.c
@@ -377,10 +377,10 @@ test_xmp_regions (void)
 
         data = tracker_xmp_new (contents, size, "test://file");
 
-        g_assert_cmpint (2, ==, g_list_length (data->regions));
+        g_assert_cmpint (2, ==, g_slist_length (data->regions));
         
         /* Regions are stacked while parsing.*/
-        region = g_list_nth_data (data->regions, 0);
+        region = g_slist_nth_data (data->regions, 0);
         g_assert_cmpstr (region->x, ==, "0.51");
         g_assert_cmpstr (region->y, ==, "0.51");
         g_assert_cmpstr (region->width, ==, "0.01");
@@ -389,7 +389,7 @@ test_xmp_regions (void)
         g_assert_cmpstr (region->title, ==, "Fido");
         g_assert_cmpstr (region->description, ==, "Fido looks happy!");
 
-        region = g_list_nth_data (data->regions, 1);
+        region = g_slist_nth_data (data->regions, 1);
         g_assert_cmpstr (region->x, ==, "0.5");
         g_assert_cmpstr (region->y, ==, "0.5");
         g_assert_cmpstr (region->width, ==, "0.06");
@@ -420,9 +420,9 @@ test_xmp_regions_quill (void)
 
         data = tracker_xmp_new (contents, size, "test://file");
 
-        g_assert_cmpint (2, ==, g_list_length (data->regions));
+        g_assert_cmpint (2, ==, g_slist_length (data->regions));
 
-        region = g_list_nth_data (data->regions, 0);
+        region = g_slist_nth_data (data->regions, 0);
         g_assert_cmpstr (region->x, ==, "0.4");
         g_assert_cmpstr (region->y, ==, "0.3");
         g_assert_cmpstr (region->width, ==, "0.17");
@@ -432,7 +432,7 @@ test_xmp_regions_quill (void)
         g_assert_cmpstr (region->link_class, ==, "nco:PersonContact");
         g_assert_cmpstr (region->link_uri, ==, "urn:uuid:2");
 
-        region = g_list_nth_data (data->regions, 1);
+        region = g_slist_nth_data (data->regions, 1);
         g_assert_cmpstr (region->x, ==, "0.3");
         g_assert_cmpstr (region->y, ==, "0.4");
         g_assert_cmpstr (region->width, ==, "0.15");
@@ -463,10 +463,10 @@ test_xmp_regions_ns_prefix (void)
 
         data = tracker_xmp_new (contents, size, "test://file");
 
-        g_assert_cmpint (2, ==, g_list_length (data->regions));
+        g_assert_cmpint (2, ==, g_slist_length (data->regions));
         
         /* Regions are stacked while parsing.*/
-        region = g_list_nth_data (data->regions, 0);
+        region = g_slist_nth_data (data->regions, 0);
         g_assert_cmpstr (region->x, ==, "0.51");
         g_assert_cmpstr (region->y, ==, "0.51");
         g_assert_cmpstr (region->width, ==, "0.01");
@@ -475,7 +475,7 @@ test_xmp_regions_ns_prefix (void)
         g_assert_cmpstr (region->title, ==, "Fidoz");
         g_assert_cmpstr (region->description, ==, "Fido looks happy!");
 
-        region = g_list_nth_data (data->regions, 1);
+        region = g_slist_nth_data (data->regions, 1);
         g_assert_cmpstr (region->x, ==, "0.5");
         g_assert_cmpstr (region->y, ==, "0.5");
         g_assert_cmpstr (region->width, ==, "0.06");



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