[tracker/miner-web: 8/11] tracker-extract: Fixed the jpeg extractor to use TrackerSparqlBuilder



commit f1490873304bd0960219f32ed5bf3f5698a0f43e
Author: Martyn Russell <martyn lanedo com>
Date:   Wed Nov 4 12:35:18 2009 +0000

    tracker-extract: Fixed the jpeg extractor to use TrackerSparqlBuilder
    
    Fixed some other issues while here:
    - Don't leak filename if size of file is < 18 bytes
    - Use proper types not strings for everything sent using SPARQL
    - Fixed some whitespace issues
    - Cleaned up the code in places

 src/tracker-extract/tracker-extract-jpeg.c |  259 ++++++++++++++++++++++++++--
 1 files changed, 248 insertions(+), 11 deletions(-)
---
diff --git a/src/tracker-extract/tracker-extract-jpeg.c b/src/tracker-extract/tracker-extract-jpeg.c
index d348145..beb9272 100644
--- a/src/tracker-extract/tracker-extract-jpeg.c
+++ b/src/tracker-extract/tracker-extract-jpeg.c
@@ -70,14 +70,26 @@
 #endif /* HAVE_LIBIPTCDATA */
 
 typedef struct {
-	gchar *camera, *title, *orientation, *copyright, *white_balance,
-	      *fnumber, *flash, *focal_length, *artist,
-	      *exposure_time, *iso_speed_ratings, *date, *description,
-	      *metering_mode, *creator, *comment;
-} JpegNeedsMergeData;
-
-static void extract_jpeg (const gchar *filename,
-			  TrackerSparqlBuilder   *metadata);
+	gchar *camera;
+	gchar *title;
+	gchar *orientation;
+	gchar *copyright;
+	gchar *white_balance;
+	gchar *fnumber;
+	gchar *flash;
+	gchar *focal_length;
+	gchar *artist;
+	gchar *exposure_time;
+	gchar *iso_speed_ratings;
+	gchar *date;
+	gchar *description;
+	gchar *metering_mode;
+	gchar *creator;
+	gchar *comment;
+} MergeData;
+
+static void extract_jpeg (const gchar          *filename,
+			  TrackerSparqlBuilder *metadata);
 
 static TrackerExtractData data[] = {
 	{ "image/jpeg", extract_jpeg },
@@ -150,6 +162,9 @@ extract_jpeg (const gchar          *uri,
 
 	if (f) {
 <<<<<<< HEAD
+<<<<<<< HEAD
+=======
+>>>>>>> tracker-extract: Fixed the jpeg extractor to use TrackerSparqlBuilder
 		TrackerXmpData xd = { 0 };
 		TrackerExifData ed = { 0 };
 		TrackerIptcData id = { 0 };
@@ -161,6 +176,7 @@ extract_jpeg (const gchar          *uri,
 		tracker_sparql_builder_object (metadata, "nfo:Image");
 		tracker_sparql_builder_predicate (metadata, "a");
 		tracker_sparql_builder_object (metadata, "nmm:Photo");
+<<<<<<< HEAD
 =======
 		TrackerXmpData xmp_data = { 0 };
 		TrackerExifData exif_data = { 0 };
@@ -181,6 +197,8 @@ extract_jpeg (const gchar          *uri,
 		                               RDF_PREFIX "type",
 		                               NMM_PREFIX "Photo");
 >>>>>>> Coalesce nie:comment in jpeg extractor.
+=======
+>>>>>>> tracker-extract: Fixed the jpeg extractor to use TrackerSparqlBuilder
 
 		cinfo.err = jpeg_std_error (&tejerr.jpeg);
 		tejerr.jpeg.error_exit = extract_jpeg_error_exit;
@@ -220,12 +238,17 @@ extract_jpeg (const gchar          *uri,
 			switch (marker->marker) {
 			case JPEG_COM:
 <<<<<<< HEAD
+<<<<<<< HEAD
 				g_free (comment);
 				comment = g_strndup ((gchar*) marker->data, marker->data_length);
 =======
 				len = marker->data_length;
 				comment = g_strndup ((gchar*) marker->data, len);
 >>>>>>> Coalesce nie:comment in jpeg extractor.
+=======
+				g_free (comment);
+				comment = g_strndup ((gchar*) marker->data, marker->data_length);
+>>>>>>> tracker-extract: Fixed the jpeg extractor to use TrackerSparqlBuilder
 				break;
 
 			case JPEG_APP0 + 1:
@@ -302,6 +325,7 @@ extract_jpeg (const gchar          *uri,
 			g_free (ed.model);
 			g_free (ed.make);
 		}
+<<<<<<< HEAD
 
 		md.title = tracker_coalesce (2, xd.title, ed.document_name);
 		md.orientation = tracker_coalesce (3, ed.orientation, xd.Orientation, id.image_orientation);
@@ -526,11 +550,224 @@ extract_jpeg (const gchar          *uri,
 			tracker_sparql_builder_predicate (metadata, "nie:comment");
 			tracker_sparql_builder_object_unvalidated (metadata, md.comment);
 			g_free (md.comment);
+=======
+
+		md.title = tracker_coalesce (2, xd.title, ed.document_name);
+		md.orientation = tracker_coalesce (3, ed.orientation, xd.Orientation, id.image_orientation);
+		md.copyright = tracker_coalesce (3, ed.copyright, xd.rights, id.copyright_notice);
+		md.white_balance = tracker_coalesce (2, ed.white_balance, xd.WhiteBalance);
+		md.fnumber =  tracker_coalesce (2, ed.fnumber, xd.FNumber);
+		md.flash =  tracker_coalesce (2, ed.flash, xd.Flash);
+		md.focal_length =  tracker_coalesce (2, ed.focal_length, xd.FocalLength);
+		md.artist =  tracker_coalesce (3, ed.artist, xd.Artist, xd.contributor);
+		md.exposure_time =  tracker_coalesce (2, ed.exposure_time, xd.ExposureTime);
+		md.iso_speed_ratings =  tracker_coalesce (2, ed.iso_speed_ratings, xd.ISOSpeedRatings);
+		md.date =  tracker_coalesce (5, ed.time, xd.date, id.date_created, ed.time_original, xd.DateTimeOriginal);
+		md.description = tracker_coalesce (2, ed.description, xd.description);
+		md.metering_mode =  tracker_coalesce (2, ed.metering_mode, xd.MeteringMode);
+		md.creator =  tracker_coalesce (3, id.byline, xd.creator, id.credit);
+		md.comment = tracker_coalesce (2, comment, ed.user_comment);
+
+		/* Prioritize on native dimention in all cases */
+		tracker_sparql_builder_predicate (metadata, "nfo:width");
+		tracker_sparql_builder_object_int64 (metadata, cinfo.image_width);
+		g_free (ed.x_dimension);
+
+		tracker_sparql_builder_predicate (metadata, "nfo:height");
+		tracker_sparql_builder_object_int64 (metadata, cinfo.image_height);
+		g_free (ed.y_dimension);
+
+		if (xd.keywords) {
+			insert_keywords (metadata, xd.keywords);
+			g_free (xd.keywords);
+		}
+
+		if (xd.subject) {
+			insert_keywords (metadata, xd.subject);
+			g_free (xd.subject);
+		}
+
+		if (xd.publisher) {
+			tracker_sparql_builder_predicate (metadata, "nco:publisher");
+			tracker_sparql_builder_object_blank_open (metadata);
+			tracker_sparql_builder_predicate (metadata, "a");
+			tracker_sparql_builder_object (metadata, "nco:Contact");
+			tracker_sparql_builder_predicate (metadata, "nco:fullname");
+			tracker_sparql_builder_object_unvalidated (metadata, xd.publisher);
+			tracker_sparql_builder_object_blank_close (metadata);
+			g_free (xd.publisher);
 		}
 
-		if (merge_data.comment) {
-			tracker_statement_list_insert (metadata, uri, NIE_PREFIX "comment", merge_data.comment);
-			g_free (merge_data.comment);
+		if (xd.type) {
+			tracker_sparql_builder_predicate (metadata, "dc:type");
+			tracker_sparql_builder_object_unvalidated (metadata, xd.type);
+			g_free (xd.type);
+		}
+
+		if (xd.format) {
+			tracker_sparql_builder_predicate (metadata, "dc:format");
+			tracker_sparql_builder_object_unvalidated (metadata, xd.format);
+			g_free (xd.format);
+		}
+
+		if (xd.identifier) {
+			tracker_sparql_builder_predicate (metadata, "dc:indentifier");
+			tracker_sparql_builder_object_unvalidated (metadata, xd.identifier);
+			g_free (xd.identifier);
+		}
+
+		if (xd.source) {
+			tracker_sparql_builder_predicate (metadata, "dc:source");
+			tracker_sparql_builder_object_unvalidated (metadata, xd.source);
+			g_free (xd.source);
+		}
+
+		if (xd.language) {
+			tracker_sparql_builder_predicate (metadata, "dc:language");
+			tracker_sparql_builder_object_unvalidated (metadata, xd.language);
+			g_free (xd.language);
+		}
+
+		if (xd.relation) {
+			tracker_sparql_builder_predicate (metadata, "dc:relation");
+			tracker_sparql_builder_object_unvalidated (metadata, xd.relation);
+			g_free (xd.relation);
+		}
+
+		if (xd.coverage) {
+			tracker_sparql_builder_predicate (metadata, "dc:coverage");
+			tracker_sparql_builder_object_unvalidated (metadata, xd.coverage);
+			g_free (xd.coverage);
+		}
+
+		if (xd.license) {
+			tracker_sparql_builder_predicate (metadata, "nie:license");
+			tracker_sparql_builder_object_unvalidated (metadata, xd.license);
+			g_free (xd.license);
+		}
+
+		if (id.keywords) {
+			insert_keywords (metadata, id.keywords);
+			g_free (id.keywords);
+		}
+
+		if (md.camera) {
+			tracker_sparql_builder_predicate (metadata, "nmm:camera");
+			tracker_sparql_builder_object_unvalidated (metadata, md.camera);
+			g_free (md.camera);
+		}
+
+		if (md.title) {
+			tracker_sparql_builder_predicate (metadata, "nie:title");
+			tracker_sparql_builder_object_unvalidated (metadata, md.title);
+			g_free (md.title);
+		}
+
+		if (md.orientation) {
+			tracker_sparql_builder_predicate (metadata, "nfo:orientation");
+			tracker_sparql_builder_object (metadata, md.orientation);
+			g_free (md.orientation);
+		}
+
+		if (md.copyright) {
+			tracker_sparql_builder_predicate (metadata, "nie:copyright");
+			tracker_sparql_builder_object_unvalidated (metadata, md.copyright);
+			g_free (md.copyright);
+		}
+
+		if (md.white_balance) {
+			tracker_sparql_builder_predicate (metadata, "nmm:whiteBalance");
+			tracker_sparql_builder_object (metadata, md.white_balance);
+			g_free (md.white_balance);
+		}
+
+		if (md.fnumber) {
+			gdouble value;
+
+			value = g_strtod (md.fnumber, NULL);
+			tracker_sparql_builder_predicate (metadata, "nmm:fnumber");
+			tracker_sparql_builder_object_double (metadata, value);
+			g_free (md.fnumber);
+		}
+
+		if (md.flash) {
+			tracker_sparql_builder_predicate (metadata, "nmm:flash");
+			tracker_sparql_builder_object (metadata, md.flash);
+			g_free (md.flash);
+		}
+
+		if (md.focal_length) {
+			gdouble value;
+
+			value = g_strtod (md.focal_length, NULL);
+			tracker_sparql_builder_predicate (metadata, "nmm:focalLength");
+			tracker_sparql_builder_object_double (metadata, value);
+			g_free (md.focal_length);
+		}
+
+		if (md.artist) {
+			tracker_sparql_builder_predicate (metadata, "nco:contributor");
+			tracker_sparql_builder_object_blank_open (metadata);
+			tracker_sparql_builder_predicate (metadata, "a");
+			tracker_sparql_builder_object (metadata, "nco:Contact");
+			tracker_sparql_builder_predicate (metadata, "nco:fullname");
+			tracker_sparql_builder_object_unvalidated (metadata, md.artist);
+			tracker_sparql_builder_object_blank_close (metadata);
+			g_free (md.artist);
+		}
+
+		if (md.exposure_time) {
+			gdouble value;
+
+			value = g_strtod (md.exposure_time, NULL);
+			tracker_sparql_builder_predicate (metadata, "nmm:exposureTime");
+			tracker_sparql_builder_object_double (metadata, value);
+			g_free (md.exposure_time);
+		}
+
+		if (md.iso_speed_ratings) {
+			gdouble value;
+
+			value = g_strtod (md.iso_speed_ratings, NULL);
+			tracker_sparql_builder_predicate (metadata, "nmm:isoSpeed");
+			tracker_sparql_builder_object_double (metadata, value);
+			g_free (md.iso_speed_ratings);
+		}
+
+		if (md.date) {
+			tracker_sparql_builder_predicate (metadata, "nie:contentCreated");
+			tracker_sparql_builder_object_unvalidated (metadata, md.date);
+			g_free (md.date);
+		}
+
+		if (md.description) {
+			tracker_sparql_builder_predicate (metadata, "nie:description");
+			tracker_sparql_builder_object_unvalidated (metadata, md.description);
+			g_free (md.description);
+		}
+
+		if (md.metering_mode) {
+			tracker_sparql_builder_predicate (metadata, "nmm:meteringMode");
+			tracker_sparql_builder_object (metadata, md.metering_mode);
+			g_free (md.metering_mode);
+		}
+
+		if (md.creator) {
+			tracker_sparql_builder_predicate (metadata, "nco:creator");
+			tracker_sparql_builder_object_blank_open (metadata);
+			tracker_sparql_builder_predicate (metadata, "a");
+			tracker_sparql_builder_object (metadata, "nco:Contact");
+			tracker_sparql_builder_predicate (metadata, "nco:fullname");
+			tracker_sparql_builder_object_unvalidated (metadata, md.creator);
+			tracker_sparql_builder_object_blank_close (metadata);
+			g_free (md.creator);
+>>>>>>> tracker-extract: Fixed the jpeg extractor to use TrackerSparqlBuilder
+		}
+
+		if (md.comment) {
+			tracker_sparql_builder_predicate (metadata, "nie:comment");
+			tracker_sparql_builder_object_unvalidated (metadata, md.comment);
+			g_free (md.comment);
 		}
 
 		jpeg_destroy_decompress (&cinfo);



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