[tracker] tracker-extract: Cleaned up XMP code



commit cae1d2b5d496e32dd1899c0f4f7a69a45060a897
Author: Martyn Russell <martyn lanedo com>
Date:   Mon Jan 18 12:13:42 2010 +0000

    tracker-extract: Cleaned up XMP code

 src/tracker-extract/tracker-extract-jpeg.c |   52 ++--
 src/tracker-extract/tracker-extract-pdf.c  |  104 +++---
 src/tracker-extract/tracker-extract-png.c  |   94 +++---
 src/tracker-extract/tracker-extract-tiff.c |   48 ++--
 src/tracker-extract/tracker-extract-xmp.c  |    4 +-
 src/tracker-extract/tracker-xmp.c          |  530 +++++++++++++---------------
 src/tracker-extract/tracker-xmp.h          |   73 +++-
 7 files changed, 448 insertions(+), 457 deletions(-)
---
diff --git a/src/tracker-extract/tracker-extract-jpeg.c b/src/tracker-extract/tracker-extract-jpeg.c
index 41a0b76..c8b8d8b 100644
--- a/src/tracker-extract/tracker-extract-jpeg.c
+++ b/src/tracker-extract/tracker-extract-jpeg.c
@@ -240,7 +240,7 @@ extract_jpeg (const gchar          *uri,
 
 #ifdef HAVE_EXEMPI
 				if (strncmp (XMP_NAMESPACE, str, XMP_NAMESPACE_LENGTH) == 0) {
-					tracker_read_xmp (str + XMP_NAMESPACE_LENGTH,
+					tracker_xmp_read (str + XMP_NAMESPACE_LENGTH,
 					                  len - XMP_NAMESPACE_LENGTH,
 					                  uri,
 					                  &xd);
@@ -275,13 +275,13 @@ extract_jpeg (const gchar          *uri,
 		}
 
 		/* Don't merge if the make is in the model */
-		if ((xd.Make == NULL || xd.Model == NULL) ||
-		    (xd.Make && xd.Model && strstr (xd.Model, xd.Make) == NULL)) {
-			md.camera = tracker_merge (" ", 2, xd.Make, xd.Model);
+		if ((xd.make == NULL || xd.model == NULL) ||
+		    (xd.make && xd.model && strstr (xd.model, xd.make) == NULL)) {
+			md.camera = tracker_merge (" ", 2, xd.make, xd.model);
 		} else {
-			md.camera = g_strdup (xd.Model);
-			g_free (xd.Model);
-			g_free (xd.Make);
+			md.camera = g_strdup (xd.model);
+			g_free (xd.model);
+			g_free (xd.make);
 		}
 
 		if (!md.camera) {
@@ -298,24 +298,24 @@ extract_jpeg (const gchar          *uri,
 			g_free (ed.make);
 		}
 
-		md.title = tracker_coalesce (3, xd.title, xd.Title, ed.document_name, xd.PDFtitle);
-		md.orientation = tracker_coalesce (3, ed.orientation, xd.Orientation, id.image_orientation);
-		md.copyright = tracker_coalesce (3, ed.copyright, xd.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.title = tracker_coalesce (3, xd.title, xd.title2, ed.document_name, xd.pdf_title);
+		md.orientation = tracker_coalesce (3, ed.orientation, xd.orientation, id.image_orientation);
+		md.copyright = tracker_coalesce (3, ed.copyright, xd.copyright, xd.rights, id.copyright_notice);
+		md.white_balance = tracker_coalesce (2, ed.white_balance, xd.white_balance);
+		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.focal_length);
+		md.artist =  tracker_coalesce (3, ed.artist, xd.artist, xd.contributor);
+		md.exposure_time =  tracker_coalesce (2, ed.exposure_time, xd.exposure_time);
+		md.iso_speed_ratings =  tracker_coalesce (2, ed.iso_speed_ratings, xd.iso_speed_ratings);
+		md.date =  tracker_coalesce (5, ed.time, xd.date, id.date_created, ed.time_original, xd.time_original);
 		md.description = tracker_coalesce (2, ed.description, xd.description);
-		md.metering_mode = tracker_coalesce (2, ed.metering_mode, xd.MeteringMode);
+		md.metering_mode = tracker_coalesce (2, ed.metering_mode, xd.metering_mode);
 
-		md.city = tracker_coalesce (2, id.city, xd.City);
-		md.state = tracker_coalesce (2, id.state, xd.State);
-		md.address = tracker_coalesce (2, id.sublocation, xd.Address);
-		md.country  = tracker_coalesce (2, id.country_name, xd.Country);
+		md.city = tracker_coalesce (2, id.city, xd.city);
+		md.state = tracker_coalesce (2, id.state, xd.state);
+		md.address = tracker_coalesce (2, id.sublocation, xd.address);
+		md.country  = tracker_coalesce (2, id.country_name, xd.country);
 
 		md.creator =  tracker_coalesce (3, id.byline, xd.creator, id.credit);
 		md.comment = tracker_coalesce (2, comment, ed.user_comment);
@@ -356,9 +356,9 @@ extract_jpeg (const gchar          *uri,
 			g_free (xd.keywords);
 		}
 
-		if (xd.PDFkeywords) {
-			insert_keywords (metadata, xd.PDFkeywords);
-			g_free (xd.PDFkeywords);
+		if (xd.pdf_keywords) {
+			insert_keywords (metadata, xd.pdf_keywords);
+			g_free (xd.pdf_keywords);
 		}
 
 		if (xd.subject) {
diff --git a/src/tracker-extract/tracker-extract-pdf.c b/src/tracker-extract/tracker-extract-pdf.c
index d6cf53b..de7f61c 100644
--- a/src/tracker-extract/tracker-extract-pdf.c
+++ b/src/tracker-extract/tracker-extract-pdf.c
@@ -220,13 +220,13 @@ extract_pdf (const gchar          *uri,
 	}
 
 	if (xml) {
-		tracker_read_xmp (xml, strlen (xml), uri, &xd);
+		tracker_xmp_read (xml, strlen (xml), uri, &xd);
 		g_free (xml);
 		xml = NULL;
 
-		md.title = tracker_coalesce (3, pd.title, xd.title, xd.Title, xd.PDFtitle);
+		md.title = tracker_coalesce (3, pd.title, xd.title, xd.title2, xd.pdf_title);
 		md.subject = tracker_coalesce (2, pd.subject, xd.subject);
-		md.date = tracker_coalesce (3, pd.creation_date, xd.date, xd.DateTimeOriginal);
+		md.date = tracker_coalesce (3, pd.creation_date, xd.date, xd.time_original);
 		md.author = tracker_coalesce (2, pd.author, xd.creator);
 
 		write_pdf_data (md, metadata);
@@ -236,9 +236,9 @@ extract_pdf (const gchar          *uri,
 			g_free (xd.keywords);
 		}
 
-		if (xd.PDFkeywords) {
-			insert_keywords (metadata, xd.PDFkeywords);
-			g_free (xd.PDFkeywords);
+		if (xd.pdf_keywords) {
+			insert_keywords (metadata, xd.pdf_keywords);
+			g_free (xd.pdf_keywords);
 		}
 
 		if (xd.publisher) {
@@ -300,16 +300,16 @@ extract_pdf (const gchar          *uri,
 			g_free (xd.license);
 		}
 
-		if (xd.Make || xd.Model) {
+		if (xd.make || xd.model) {
 			gchar *camera;
 
-			if ((xd.Make == NULL || xd.Model == NULL) ||
-			    (xd.Make && xd.Model && strstr (xd.Model, xd.Make) == NULL)) {
-				camera = tracker_merge (" ", 2, xd.Make, xd.Model);
+			if ((xd.make == NULL || xd.model == NULL) ||
+			    (xd.make && xd.model && strstr (xd.model, xd.make) == NULL)) {
+				camera = tracker_merge (" ", 2, xd.make, xd.model);
 			} else {
-				camera = g_strdup (xd.Model);
-				g_free (xd.Model);
-				g_free (xd.Make);
+				camera = g_strdup (xd.model);
+				g_free (xd.model);
+				g_free (xd.make);
 			}
 
 			tracker_sparql_builder_predicate (metadata, "nmm:camera");
@@ -317,10 +317,10 @@ extract_pdf (const gchar          *uri,
 			g_free (camera);
 		}
 
-		if (xd.Orientation) {
+		if (xd.orientation) {
 			tracker_sparql_builder_predicate (metadata, "nfo:orientation");
-			tracker_sparql_builder_object (metadata, xd.Orientation);
-			g_free (xd.Orientation);
+			tracker_sparql_builder_object (metadata, xd.orientation);
+			g_free (xd.orientation);
 		}
 
 		if (xd.rights) {
@@ -329,42 +329,42 @@ extract_pdf (const gchar          *uri,
 			g_free (xd.rights);
 		}
 
-		if (xd.WhiteBalance) {
+		if (xd.white_balance) {
 			tracker_sparql_builder_predicate (metadata, "nmm:whiteBalance");
-			tracker_sparql_builder_object (metadata, xd.WhiteBalance);
-			g_free (xd.WhiteBalance);
+			tracker_sparql_builder_object (metadata, xd.white_balance);
+			g_free (xd.white_balance);
 		}
 
-		if (xd.FNumber) {
+		if (xd.fnumber) {
 			gdouble value;
 
-			value = g_strtod (xd.FNumber, NULL);
+			value = g_strtod (xd.fnumber, NULL);
 			tracker_sparql_builder_predicate (metadata, "nmm:fnumber");
 			tracker_sparql_builder_object_double (metadata, value);
-			g_free (xd.FNumber);
+			g_free (xd.fnumber);
 		}
 
-		if (xd.Flash) {
+		if (xd.flash) {
 			tracker_sparql_builder_predicate (metadata, "nmm:flash");
-			tracker_sparql_builder_object (metadata, xd.Flash);
-			g_free (xd.Flash);
+			tracker_sparql_builder_object (metadata, xd.flash);
+			g_free (xd.flash);
 		}
 
-		if (xd.FocalLength) {
+		if (xd.focal_length) {
 			gdouble value;
 
-			value = g_strtod (xd.FocalLength, NULL);
+			value = g_strtod (xd.focal_length, NULL);
 			tracker_sparql_builder_predicate (metadata, "nmm:focalLength");
 			tracker_sparql_builder_object_double (metadata, value);
-			g_free (xd.FocalLength);
+			g_free (xd.focal_length);
 		}
 
 		/* Question: Shouldn't xd.Artist be merged with md.author instead? */
 
-		if (xd.Artist || xd.contributor) {
+		if (xd.artist || xd.contributor) {
 			gchar *artist;
 
-			artist = tracker_coalesce (2, xd.Artist, xd.contributor);
+			artist = tracker_coalesce (2, xd.artist, xd.contributor);
 			tracker_sparql_builder_predicate (metadata, "nco:contributor");
 			tracker_sparql_builder_object_blank_open (metadata);
 			tracker_sparql_builder_predicate (metadata, "a");
@@ -375,22 +375,22 @@ extract_pdf (const gchar          *uri,
 			g_free (artist);
 		}
 
-		if (xd.ExposureTime) {
+		if (xd.exposure_time) {
 			gdouble value;
 
-			value = g_strtod (xd.ExposureTime, NULL);
+			value = g_strtod (xd.exposure_time, NULL);
 			tracker_sparql_builder_predicate (metadata, "nmm:exposureTime");
 			tracker_sparql_builder_object_double (metadata, value);
-			g_free (xd.ExposureTime);
+			g_free (xd.exposure_time);
 		}
 
-		if (xd.ISOSpeedRatings) {
+		if (xd.iso_speed_ratings) {
 			gdouble value;
 
-			value = g_strtod (xd.ISOSpeedRatings, NULL);
+			value = g_strtod (xd.iso_speed_ratings, NULL);
 			tracker_sparql_builder_predicate (metadata, "nmm:isoSpeed");
 			tracker_sparql_builder_object_double (metadata, value);
-			g_free (xd.ISOSpeedRatings);
+			g_free (xd.iso_speed_ratings);
 		}
 
 		if (xd.description) {
@@ -399,41 +399,41 @@ extract_pdf (const gchar          *uri,
 			g_free (xd.description);
 		}
 
-		if (xd.MeteringMode) {
+		if (xd.metering_mode) {
 			tracker_sparql_builder_predicate (metadata, "nmm:meteringMode");
-			tracker_sparql_builder_object (metadata, xd.MeteringMode);
-			g_free (xd.MeteringMode);
+			tracker_sparql_builder_object (metadata, xd.metering_mode);
+			g_free (xd.metering_mode);
 		}
 
-		if (xd.Address || xd.Country || xd.City) {
+		if (xd.address || xd.country || xd.city) {
 			tracker_sparql_builder_predicate (metadata, "mlo:location");
 	
 			tracker_sparql_builder_object_blank_open (metadata);
 			tracker_sparql_builder_predicate (metadata, "a");
 			tracker_sparql_builder_object (metadata, "mlo:GeoPoint");
 	
-			if (xd.Address) {
+			if (xd.address) {
 				tracker_sparql_builder_predicate (metadata, "mlo:address");
-				tracker_sparql_builder_object_unvalidated (metadata, xd.Address);
-				g_free (xd.Address);
+				tracker_sparql_builder_object_unvalidated (metadata, xd.address);
+				g_free (xd.address);
 			}
 	
-			if (xd.State) {
+			if (xd.state) {
 				tracker_sparql_builder_predicate (metadata, "mlo:state");
-				tracker_sparql_builder_object_unvalidated (metadata, xd.State);
-				g_free (xd.State);
+				tracker_sparql_builder_object_unvalidated (metadata, xd.state);
+				g_free (xd.state);
 			}
 	
-			if (xd.City) {
+			if (xd.city) {
 				tracker_sparql_builder_predicate (metadata, "mlo:city");
-				tracker_sparql_builder_object_unvalidated (metadata, xd.City);
-				g_free (xd.City);
+				tracker_sparql_builder_object_unvalidated (metadata, xd.city);
+				g_free (xd.city);
 			}
 	
-			if (xd.Country) {
+			if (xd.country) {
 				tracker_sparql_builder_predicate (metadata, "mlo:country");
-				tracker_sparql_builder_object_unvalidated (metadata, xd.Country);
-				g_free (xd.Country);
+				tracker_sparql_builder_object_unvalidated (metadata, xd.country);
+				g_free (xd.country);
 			}
 		
 			tracker_sparql_builder_object_blank_close (metadata);
diff --git a/src/tracker-extract/tracker-extract-png.c b/src/tracker-extract/tracker-extract-png.c
index 92518e8..bc8820d 100644
--- a/src/tracker-extract/tracker-extract-png.c
+++ b/src/tracker-extract/tracker-extract-png.c
@@ -196,8 +196,8 @@ read_metadata (png_structp png_ptr, png_infop info_ptr, const gchar *uri, Tracke
 
 		merge_data.title = tracker_coalesce (4, png_data.title,
 		                                     xmp_data.title, 
-		                                     xmp_data.Title,
-		                                     xmp_data.PDFtitle);
+		                                     xmp_data.title,
+		                                     xmp_data.pdf_title);
 
 		merge_data.copyright = tracker_coalesce (2, png_data.copyright,
 		                                         xmp_data.rights);
@@ -210,7 +210,7 @@ read_metadata (png_structp png_ptr, png_infop info_ptr, const gchar *uri, Tracke
 
 		merge_data.date = tracker_coalesce (3, png_data.creation_time,
 		                                    xmp_data.date,
-		                                    xmp_data.DateTimeOriginal);
+		                                    xmp_data.time_original);
 
 
 		if (png_data.comment) {
@@ -268,9 +268,9 @@ read_metadata (png_structp png_ptr, png_infop info_ptr, const gchar *uri, Tracke
 			g_free (xmp_data.keywords);
 		}
 
-		if (xmp_data.PDFkeywords) {
-			insert_keywords (metadata, uri, xmp_data.PDFkeywords);
-			g_free (xmp_data.PDFkeywords);
+		if (xmp_data.pdf_keywords) {
+			insert_keywords (metadata, uri, xmp_data.pdf_keywords);
+			g_free (xmp_data.pdf_keywords);
 		}
 
 		if (xmp_data.subject) {
@@ -333,46 +333,46 @@ read_metadata (png_structp png_ptr, png_infop info_ptr, const gchar *uri, Tracke
 			g_free (xmp_data.coverage);
 		}
 
-		if (xmp_data.Make || xmp_data.Model) {
-			gchar *final_camera = tracker_merge (" ", 2, xmp_data.Make, xmp_data.Model);
+		if (xmp_data.make || xmp_data.model) {
+			gchar *final_camera = tracker_merge (" ", 2, xmp_data.make, xmp_data.model);
 
 			tracker_sparql_builder_predicate (metadata, "nmm:camera");
 			tracker_sparql_builder_object_unvalidated (metadata, final_camera);
 			g_free (final_camera);
 		}
 
-		if (xmp_data.Orientation) {
+		if (xmp_data.orientation) {
 			tracker_sparql_builder_predicate (metadata, "nfo:orientation");
-			tracker_sparql_builder_object_unvalidated (metadata, xmp_data.Orientation);
-			g_free (xmp_data.Orientation);
+			tracker_sparql_builder_object_unvalidated (metadata, xmp_data.orientation);
+			g_free (xmp_data.orientation);
 		}
 
-		if (xmp_data.WhiteBalance) {
+		if (xmp_data.white_balance) {
 			tracker_sparql_builder_predicate (metadata, "nmm:whiteBalance");
-			tracker_sparql_builder_object_unvalidated (metadata, xmp_data.WhiteBalance);
-			g_free (xmp_data.WhiteBalance);
+			tracker_sparql_builder_object_unvalidated (metadata, xmp_data.white_balance);
+			g_free (xmp_data.white_balance);
 		}
 
-		if (xmp_data.FNumber) {
+		if (xmp_data.fnumber) {
 			tracker_sparql_builder_predicate (metadata, "nmm:fnumber");
-			tracker_sparql_builder_object_unvalidated (metadata, xmp_data.FNumber);
-			g_free (xmp_data.FNumber);
+			tracker_sparql_builder_object_unvalidated (metadata, xmp_data.fnumber);
+			g_free (xmp_data.fnumber);
 		}
 
-		if (xmp_data.Flash) {
+		if (xmp_data.flash) {
 			tracker_sparql_builder_predicate (metadata, "nmm:flash");
-			tracker_sparql_builder_object_unvalidated (metadata, xmp_data.Flash);
-			g_free (xmp_data.Flash);
+			tracker_sparql_builder_object_unvalidated (metadata, xmp_data.flash);
+			g_free (xmp_data.flash);
 		}
 
-		if (xmp_data.FocalLength) {
+		if (xmp_data.focal_length) {
 			tracker_sparql_builder_predicate (metadata, "nmm:focalLength");
-			tracker_sparql_builder_object_unvalidated (metadata, xmp_data.FocalLength);
-			g_free (xmp_data.FocalLength);
+			tracker_sparql_builder_object_unvalidated (metadata, xmp_data.focal_length);
+			g_free (xmp_data.focal_length);
 		}
 
-		if (xmp_data.Artist || xmp_data.contributor) {
-			gchar *final_artist =  tracker_coalesce (2, xmp_data.Artist, xmp_data.contributor);
+		if (xmp_data.artist || xmp_data.contributor) {
+			gchar *final_artist =  tracker_coalesce (2, xmp_data.artist, xmp_data.contributor);
 
 			tracker_sparql_builder_predicate (metadata, "nco:contributor");
 
@@ -386,53 +386,53 @@ read_metadata (png_structp png_ptr, png_infop info_ptr, const gchar *uri, Tracke
 			g_free (final_artist);
 		}
 
-		if (xmp_data.ExposureTime) {
+		if (xmp_data.exposure_time) {
 			tracker_sparql_builder_predicate (metadata, "nmm:exposureTime");
-			tracker_sparql_builder_object_unvalidated (metadata, xmp_data.ExposureTime);
-			g_free (xmp_data.ExposureTime);
+			tracker_sparql_builder_object_unvalidated (metadata, xmp_data.exposure_time);
+			g_free (xmp_data.exposure_time);
 		}
 
-		if (xmp_data.ISOSpeedRatings) {
+		if (xmp_data.iso_speed_ratings) {
 			tracker_sparql_builder_predicate (metadata, "nmm:isoSpeed");
-			tracker_sparql_builder_object_unvalidated (metadata, xmp_data.ISOSpeedRatings);
-			g_free (xmp_data.ISOSpeedRatings);
+			tracker_sparql_builder_object_unvalidated (metadata, xmp_data.iso_speed_ratings);
+			g_free (xmp_data.iso_speed_ratings);
 		}
 
-		if (xmp_data.MeteringMode) {
+		if (xmp_data.metering_mode) {
 			tracker_sparql_builder_predicate (metadata, "nmm:meteringMode");
-			tracker_sparql_builder_object_unvalidated (metadata, xmp_data.MeteringMode);
-			g_free (xmp_data.MeteringMode);
+			tracker_sparql_builder_object_unvalidated (metadata, xmp_data.metering_mode);
+			g_free (xmp_data.metering_mode);
 		}
 	
-		if (xmp_data.Address || xmp_data.Country || xmp_data.City) {
+		if (xmp_data.address || xmp_data.country || xmp_data.city) {
 			tracker_sparql_builder_predicate (metadata, "mlo:location");
 	
 			tracker_sparql_builder_object_blank_open (metadata);
 			tracker_sparql_builder_predicate (metadata, "a");
 			tracker_sparql_builder_object (metadata, "mlo:GeoPoint");
 	
-			if (xmp_data.Address) {
+			if (xmp_data.address) {
 				tracker_sparql_builder_predicate (metadata, "mlo:address");
-				tracker_sparql_builder_object_unvalidated (metadata, xmp_data.Address);
-				g_free (xmp_data.Address);
+				tracker_sparql_builder_object_unvalidated (metadata, xmp_data.address);
+				g_free (xmp_data.address);
 			}
 	
-			if (xmp_data.State) {
+			if (xmp_data.state) {
 				tracker_sparql_builder_predicate (metadata, "mlo:state");
-				tracker_sparql_builder_object_unvalidated (metadata, xmp_data.State);
-				g_free (xmp_data.State);
+				tracker_sparql_builder_object_unvalidated (metadata, xmp_data.state);
+				g_free (xmp_data.state);
 			}
 	
-			if (xmp_data.City) {
+			if (xmp_data.city) {
 				tracker_sparql_builder_predicate (metadata, "mlo:city");
-				tracker_sparql_builder_object_unvalidated (metadata, xmp_data.City);
-				g_free (xmp_data.City);
+				tracker_sparql_builder_object_unvalidated (metadata, xmp_data.city);
+				g_free (xmp_data.city);
 			}
 	
-			if (xmp_data.Country) {
+			if (xmp_data.country) {
 				tracker_sparql_builder_predicate (metadata, "mlo:country");
-				tracker_sparql_builder_object_unvalidated (metadata, xmp_data.Country);
-				g_free (xmp_data.Country);
+				tracker_sparql_builder_object_unvalidated (metadata, xmp_data.country);
+				g_free (xmp_data.country);
 			}
 		
 			tracker_sparql_builder_object_blank_close (metadata);
diff --git a/src/tracker-extract/tracker-extract-tiff.c b/src/tracker-extract/tracker-extract-tiff.c
index 7f58523..6f96eca 100644
--- a/src/tracker-extract/tracker-extract-tiff.c
+++ b/src/tracker-extract/tracker-extract-tiff.c
@@ -316,7 +316,7 @@ extract_tiff (const gchar *uri, TrackerSparqlBuilder *metadata)
 	   due to bugs in the original spec (type) */
 #ifdef HAVE_EXEMPI
 	if (TIFFGetField (image, TIFFTAG_XMLPACKET, &size, &xmpOffset)) {
-		tracker_read_xmp (xmpOffset,
+		tracker_xmp_read (xmpOffset,
 		                  size,
 		                  uri,
 		                  &xmp_data);
@@ -368,8 +368,8 @@ extract_tiff (const gchar *uri, TrackerSparqlBuilder *metadata)
 	                                   tiff_data.model);
 
 	if (!merge_data.camera) {
-		merge_data.camera = tracker_merge (" ", 2, xmp_data.Make,
-		                                   xmp_data.Model);
+		merge_data.camera = tracker_merge (" ", 2, xmp_data.make,
+		                                   xmp_data.model);
 
 		if (!merge_data.camera) {
 			merge_data.camera = tracker_merge (" ", 2, exif_data.make,
@@ -379,21 +379,21 @@ extract_tiff (const gchar *uri, TrackerSparqlBuilder *metadata)
 			g_free (exif_data.make);
 		}
 	} else {
-		g_free (xmp_data.Model);
-		g_free (xmp_data.Make);
+		g_free (xmp_data.model);
+		g_free (xmp_data.make);
 		g_free (exif_data.model);
 		g_free (exif_data.make);
 	}
 
 	merge_data.title = tracker_coalesce (5, tiff_data.documentname,
 	                                     xmp_data.title, 
-	                                     xmp_data.Title,
+	                                     xmp_data.title2,
 	                                     exif_data.document_name,
-	                                     xmp_data.PDFtitle);
+	                                     xmp_data.pdf_title);
 
 	merge_data.orientation = tracker_coalesce (4, tiff_data.orientation,
 	                                           exif_data.orientation,
-	                                           xmp_data.Orientation,
+	                                           xmp_data.orientation,
 	                                           iptc_data.image_orientation);
 
 	merge_data.copyright = tracker_coalesce (4, tiff_data.copyright,
@@ -402,47 +402,47 @@ extract_tiff (const gchar *uri, TrackerSparqlBuilder *metadata)
 	                                         iptc_data.copyright_notice);
 
 	merge_data.white_balance = tracker_coalesce (2, exif_data.white_balance,
-	                                             xmp_data.WhiteBalance);
+	                                             xmp_data.white_balance);
 
 
 	merge_data.fnumber =  tracker_coalesce (2, exif_data.fnumber,
-	                                        xmp_data.FNumber);
+	                                        xmp_data.fnumber);
 
 	merge_data.flash =  tracker_coalesce (2, exif_data.flash,
-	                                      xmp_data.Flash);
+	                                      xmp_data.flash);
 
 	merge_data.focal_length =  tracker_coalesce (2, exif_data.focal_length,
-	                                             xmp_data.FocalLength);
+	                                             xmp_data.focal_length);
 
 	merge_data.artist =  tracker_coalesce (4, tiff_data.artist,
 	                                       exif_data.artist,
-	                                       xmp_data.Artist,
+	                                       xmp_data.artist,
 	                                       xmp_data.contributor);
 
 	merge_data.exposure_time =  tracker_coalesce (2, exif_data.exposure_time,
-	                                              xmp_data.ExposureTime);
+	                                              xmp_data.exposure_time);
 
 	merge_data.iso_speed_ratings =  tracker_coalesce (2, exif_data.iso_speed_ratings,
-	                                                  xmp_data.ISOSpeedRatings);
+	                                                  xmp_data.iso_speed_ratings);
 
 	merge_data.date =  tracker_coalesce (6, tiff_data.datetime,
 	                                     exif_data.time,
 	                                     xmp_data.date,
 	                                     iptc_data.date_created,
 	                                     exif_data.time_original,
-	                                     xmp_data.DateTimeOriginal);
+	                                     xmp_data.time_original);
 
 	merge_data.description = tracker_coalesce (3, tiff_data.imagedescription,
 	                                           exif_data.description,
 	                                           xmp_data.description);
 
 	merge_data.metering_mode =  tracker_coalesce (2, exif_data.metering_mode,
-	                                              xmp_data.MeteringMode);
+	                                              xmp_data.metering_mode);
 
-	merge_data.city = tracker_coalesce (2, iptc_data.city, xmp_data.City);
-	merge_data.state = tracker_coalesce (2, iptc_data.state, xmp_data.State);
-	merge_data.address = tracker_coalesce (2, iptc_data.sublocation, xmp_data.Address);
-	merge_data.country  = tracker_coalesce (2, iptc_data.country_name, xmp_data.Country);
+	merge_data.city = tracker_coalesce (2, iptc_data.city, xmp_data.city);
+	merge_data.state = tracker_coalesce (2, iptc_data.state, xmp_data.state);
+	merge_data.address = tracker_coalesce (2, iptc_data.sublocation, xmp_data.address);
+	merge_data.country  = tracker_coalesce (2, iptc_data.country_name, xmp_data.country);
 
 	merge_data.creator =  tracker_coalesce (3, iptc_data.byline,
 	                                        xmp_data.creator,
@@ -476,9 +476,9 @@ extract_tiff (const gchar *uri, TrackerSparqlBuilder *metadata)
 		g_free (xmp_data.keywords);
 	}
 
-	if (xmp_data.PDFkeywords) {
-		insert_keywords (metadata, uri, xmp_data.PDFkeywords);
-		g_free (xmp_data.PDFkeywords);
+	if (xmp_data.pdf_keywords) {
+		insert_keywords (metadata, uri, xmp_data.pdf_keywords);
+		g_free (xmp_data.pdf_keywords);
 	}
 
 	if (xmp_data.subject) {
diff --git a/src/tracker-extract/tracker-extract-xmp.c b/src/tracker-extract/tracker-extract-xmp.c
index 3f3d6b4..b8f6289 100644
--- a/src/tracker-extract/tracker-extract-xmp.c
+++ b/src/tracker-extract/tracker-extract-xmp.c
@@ -150,12 +150,12 @@ extract_xmp (const gchar          *uri,
 		/* If no orig file is found for the sidekick, we use the sidekick to
 		 * describe itself instead, falling back to uri */
 
-		tracker_read_xmp (contents,
+		tracker_xmp_read (contents,
 		                  length,
 		                  orig_uri ? orig_uri : uri,
 		                  &xmp_data);
 
-		tracker_apply_xmp (metadata, uri, &xmp_data);
+		tracker_xmp_apply (metadata, uri, &xmp_data);
 
 		g_free (orig_uri);
 	}
diff --git a/src/tracker-extract/tracker-xmp.c b/src/tracker-extract/tracker-xmp.c
index e124760..14aa628 100644
--- a/src/tracker-extract/tracker-xmp.c
+++ b/src/tracker-extract/tracker-xmp.c
@@ -31,29 +31,22 @@
 #include <libtracker-common/tracker-utils.h>
 #include <libtracker-common/tracker-ontology.h>
 
-#define NMM_PREFIX TRACKER_NMM_PREFIX
-#define NFO_PREFIX TRACKER_NFO_PREFIX
-#define NIE_PREFIX TRACKER_NIE_PREFIX
-#define DC_PREFIX TRACKER_DC_PREFIX
-#define NCO_PREFIX TRACKER_NCO_PREFIX
-#define RDF_PREFIX TRACKER_RDF_PREFIX
-
 #ifdef HAVE_EXEMPI
 
 #include <exempi/xmp.h>
 #include <exempi/xmpconsts.h>
 
-static void tracker_xmp_iter        (XmpPtr                xmp,
-                                     XmpIteratorPtr        iter,
-                                     const gchar          *uri,
-                                     TrackerXmpData       *data,
-                                     gboolean              append);
-static void tracker_xmp_iter_simple (const gchar          *uri,
-                                     TrackerXmpData       *data,
-                                     const gchar          *schema,
-                                     const gchar          *path,
-                                     const gchar          *value,
-                                     gboolean              append);
+static void iterate        (XmpPtr                xmp,
+                            XmpIteratorPtr        iter,
+                            const gchar          *uri,
+                            TrackerXmpData       *data,
+                            gboolean              append);
+static void iterate_simple (const gchar          *uri,
+                            TrackerXmpData       *data,
+                            const gchar          *schema,
+                            const gchar          *path,
+                            const gchar          *value,
+                            gboolean              append);
 
 static const gchar *
 fix_metering_mode (const gchar *mode)
@@ -112,44 +105,45 @@ fix_white_balance (const gchar *wb)
  * one entry.
  */
 static void
-tracker_xmp_iter_array (XmpPtr                xmp,
-                        const gchar          *uri,
-                        TrackerXmpData       *data,
-                        const gchar          *schema,
-                        const gchar          *path)
+iterate_array (XmpPtr          xmp,
+               const gchar    *uri,
+               TrackerXmpData *data,
+               const gchar    *schema,
+               const gchar    *path)
 {
 	XmpIteratorPtr iter;
 
 	iter = xmp_iterator_new (xmp, schema, path, XMP_ITER_JUSTCHILDREN);
-	tracker_xmp_iter (xmp, iter, uri, data, TRUE);
+	iterate (xmp, iter, uri, data, TRUE);
 	xmp_iterator_free (iter);
 }
 
-
-/* We have an array, now recursively iterate over it's children.  Set 'append' to false so that only one item is used. */
+/* We have an array, now recursively iterate over it's children.  Set
+ * 'append' to false so that only one item is used.
+ */
 static void
-tracker_xmp_iter_alt_text (XmpPtr                xmp,
-                           const gchar          *uri,
-                           TrackerXmpData       *data,
-                           const gchar          *schema,
-                           const gchar          *path)
+iterate_alt_text (XmpPtr          xmp,
+                  const gchar    *uri,
+                  TrackerXmpData *data,
+                  const gchar    *schema,
+                  const gchar    *path)
 {
 	XmpIteratorPtr iter;
 
 	iter = xmp_iterator_new (xmp, schema, path, XMP_ITER_JUSTCHILDREN);
-	tracker_xmp_iter (xmp, iter, uri, data, FALSE);
+	iterate (xmp, iter, uri, data, FALSE);
 	xmp_iterator_free (iter);
 }
 
 /* We have a simple element, but need to iterate over the qualifiers */
 static void
-tracker_xmp_iter_simple_qual (XmpPtr                xmp,
-                              const gchar          *uri,
-                              TrackerXmpData       *data,
-                              const gchar          *schema,
-                              const gchar          *path,
-                              const gchar          *value,
-                              gboolean              append)
+iterate_simple_qual (XmpPtr          xmp,
+                     const gchar    *uri,
+                     TrackerXmpData *data,
+                     const gchar    *schema,
+                     const gchar    *path,
+                     const gchar    *value,
+                     gboolean        append)
 {
 	XmpIteratorPtr iter;
 	XmpStringPtr the_path;
@@ -191,7 +185,7 @@ tracker_xmp_iter_simple_qual (XmpPtr                xmp,
 	}
 
 	if (!ignore_element) {
-		tracker_xmp_iter_simple (uri, data, schema, path, value, append);
+		iterate_simple (uri, data, schema, path, value, append);
 	}
 
 	xmp_string_free (the_prop);
@@ -200,49 +194,40 @@ tracker_xmp_iter_simple_qual (XmpPtr                xmp,
 	xmp_iterator_free (iter);
 }
 
-
 static const gchar *
 fix_orientation (const gchar *orientation)
 {
 	if (orientation && g_ascii_strcasecmp (orientation, "top - left") == 0) {
 		return "nfo:orientation-top";
-	} else
-	if (orientation && g_ascii_strcasecmp (orientation, "top - right") == 0) {
-		return  "nfo:orientation-top-mirror";
-	} else
-	if (orientation && g_ascii_strcasecmp (orientation, "bottom - right") == 0) {
+	} else if (orientation && g_ascii_strcasecmp (orientation, "top - right") == 0) {
+			return  "nfo:orientation-top-mirror";
+	} else if (orientation && g_ascii_strcasecmp (orientation, "bottom - right") == 0) {
 		return "nfo:orientation-bottom-mirror";
-	} else
-	if (orientation && g_ascii_strcasecmp (orientation, "bottom - left") == 0) {
+	} else if (orientation && g_ascii_strcasecmp (orientation, "bottom - left") == 0) {
 		return  "nfo:orientation-bottom";
-	} else
-	if (orientation && g_ascii_strcasecmp (orientation, "left - top") == 0) {
+	} else if (orientation && g_ascii_strcasecmp (orientation, "left - top") == 0) {
 		return  "nfo:orientation-left-mirror";
-	} else
-	if (orientation && g_ascii_strcasecmp (orientation, "right - top") == 0) {
+	} else if (orientation && g_ascii_strcasecmp (orientation, "right - top") == 0) {
 		return  "nfo:orientation-right";
-	} else
-	if (orientation && g_ascii_strcasecmp (orientation, "right - bottom") == 0) {
+	} else if (orientation && g_ascii_strcasecmp (orientation, "right - bottom") == 0) {
 		return "nfo:orientation-right-mirror";
-	} else
-	if (orientation && g_ascii_strcasecmp (orientation, "left - bottom") == 0) {
+	} else if (orientation && g_ascii_strcasecmp (orientation, "left - bottom") == 0) {
 		return  "nfo:orientation-left";
 	}
 
 	return  "nfo:orientation-top";
 }
 
-
 /* We have a simple element. Add any data we know about to the
  * hash table.
  */
 static void
-tracker_xmp_iter_simple (const gchar          *uri,
-                         TrackerXmpData       *data,
-                         const gchar          *schema,
-                         const gchar          *path,
-                         const gchar          *value,
-                         gboolean              append)
+iterate_simple (const gchar    *uri,
+                TrackerXmpData *data,
+                const gchar    *schema,
+                const gchar    *path,
+                const gchar    *value,
+                gboolean        append)
 {
 	gchar *name;
 	const gchar *index_;
@@ -256,192 +241,148 @@ tracker_xmp_iter_simple (const gchar          *uri,
 
 	/* Exif basic scheme */
 	if (g_ascii_strcasecmp (schema, NS_EXIF) == 0) {
-		if (!data->Title && g_ascii_strcasecmp (name, "Title") == 0) {
-			data->Title = g_strdup (value);
-		} else
-		if (g_ascii_strcasecmp (name, "DateTimeOriginal") == 0 && !data->DateTimeOriginal) {
-			data->DateTimeOriginal = g_strdup (value);
-		} else
-		if (!data->Artist && g_ascii_strcasecmp (name, "Artist") == 0) {
-			data->Artist = g_strdup (value);
-		} else /*
-		if (g_ascii_strcasecmp (name, "Software") == 0) {
-			tracker_statement_list_insert (metadata, uri,
-			                               "Image:Software", value);
-		} else */
-		if (!data->Make && g_ascii_strcasecmp (name, "Make") == 0) {
-			data->Make = g_strdup (value);
-		} else
-		if (!data->Model && g_ascii_strcasecmp (name, "Model") == 0) {
-			data->Model = g_strdup (value);
-		} else
-		if (!data->Orientation && g_ascii_strcasecmp (name, "Orientation") == 0) {
-			data->Orientation = g_strdup (fix_orientation (value));
-		} else
-		if (!data->Flash && g_ascii_strcasecmp (name, "Flash") == 0) {
-			data->Flash = g_strdup (fix_flash (value));
-		} else
-		if (!data->MeteringMode && g_ascii_strcasecmp (name, "MeteringMode") == 0) {
-			data->MeteringMode = g_strdup (fix_metering_mode (value));
-		} else /*
-		if (g_ascii_strcasecmp (name, "ExposureProgram") == 0) {
-			tracker_statement_list_insert (metadata, uri,
-			                              "Image:ExposureProgram", value);
-		} else*/
-		if (!data->ExposureTime && g_ascii_strcasecmp (name, "ExposureTime") == 0) {
-			data->ExposureTime = g_strdup (value);
-		} else
-		if (!data->FNumber && g_ascii_strcasecmp (name, "FNumber") == 0) {
-			data->FNumber = g_strdup (value);
-		} else
-		if (!data->FocalLength && g_ascii_strcasecmp (name, "FocalLength") == 0) {
-			data->FocalLength = g_strdup (value);
-		} else
-		if (!data->ISOSpeedRatings && g_ascii_strcasecmp (name, "ISOSpeedRatings") == 0) {
-			data->ISOSpeedRatings = g_strdup (value);
-		} else
-		if (!data->WhiteBalance && g_ascii_strcasecmp (name, "WhiteBalance") == 0) {
-			data->WhiteBalance = g_strdup (fix_white_balance (value));
-		} else
-		if (!data->Copyright && g_ascii_strcasecmp (name, "Copyright") == 0) {
-			data->Copyright = g_strdup (value);
+		if (!data->title2 && g_ascii_strcasecmp (name, "Title") == 0) {
+			data->title2 = g_strdup (value);
+		} else if (g_ascii_strcasecmp (name, "DateTimeOriginal") == 0 && !data->time_original) {
+			data->time_original = g_strdup (value);
+		} else if (!data->artist && g_ascii_strcasecmp (name, "Artist") == 0) {
+			data->artist = g_strdup (value);
+			/* } else if (g_ascii_strcasecmp (name, "Software") == 0) {
+			   tracker_statement_list_insert (metadata, uri,
+			   "Image:Software", value);*/
+		} else if (!data->make && g_ascii_strcasecmp (name, "Make") == 0) {
+			data->make = g_strdup (value);
+		} else if (!data->model && g_ascii_strcasecmp (name, "Model") == 0) {
+			data->model = g_strdup (value);
+		} else if (!data->orientation && g_ascii_strcasecmp (name, "Orientation") == 0) {
+			data->orientation = g_strdup (fix_orientation (value));
+		} else if (!data->flash && g_ascii_strcasecmp (name, "Flash") == 0) {
+			data->flash = g_strdup (fix_flash (value));
+		} else if (!data->metering_mode && g_ascii_strcasecmp (name, "MeteringMode") == 0) {
+			data->metering_mode = g_strdup (fix_metering_mode (value));
+			/* } else if (g_ascii_strcasecmp (name, "ExposureProgram") == 0) {
+			   tracker_statement_list_insert (metadata, uri,
+			   "Image:ExposureProgram", value);*/
+		} else if (!data->exposure_time && g_ascii_strcasecmp (name, "ExposureTime") == 0) {
+			data->exposure_time = g_strdup (value);
+		} else if (!data->fnumber && g_ascii_strcasecmp (name, "FNumber") == 0) {
+			data->fnumber = g_strdup (value);
+		} else if (!data->focal_length && g_ascii_strcasecmp (name, "FocalLength") == 0) {
+			data->focal_length = g_strdup (value);
+		} else if (!data->iso_speed_ratings && g_ascii_strcasecmp (name, "ISOSpeedRatings") == 0) {
+			data->iso_speed_ratings = g_strdup (value);
+		} else if (!data->white_balance && g_ascii_strcasecmp (name, "WhiteBalance") == 0) {
+			data->white_balance = g_strdup (fix_white_balance (value));
+		} else if (!data->copyright && g_ascii_strcasecmp (name, "Copyright") == 0) {
+			data->copyright = g_strdup (value);
 		}
-	} else
-	/* PDF*/ 
-	if (g_ascii_strcasecmp (schema, NS_PDF) == 0) {
-		if (!data->PDFkeywords && g_ascii_strcasecmp (name, "keywords") == 0) {
-			data->PDFkeywords = g_strdup (value);
+		/* PDF*/
+	} else if (g_ascii_strcasecmp (schema, NS_PDF) == 0) {
+		if (!data->pdf_keywords && g_ascii_strcasecmp (name, "keywords") == 0) {
+			data->pdf_keywords = g_strdup (value);
 		} else
-		if (!data->PDFtitle && g_ascii_strcasecmp (name, "title") == 0) {
-			data->PDFtitle = g_strdup (value);
-		}
-	} else
-	/* Dublin Core */
-	if (g_ascii_strcasecmp (schema, NS_DC) == 0) {
+			if (!data->pdf_title && g_ascii_strcasecmp (name, "title") == 0) {
+				data->pdf_title = g_strdup (value);
+			}
+		/* Dublin Core */
+	} else if (g_ascii_strcasecmp (schema, NS_DC) == 0) {
 		if (!data->title && g_ascii_strcasecmp (name, "title") == 0) {
 			data->title = g_strdup (value);
-		} else
-		if (!data->rights && g_ascii_strcasecmp (name, "rights") == 0) {
+		} else if (!data->rights && g_ascii_strcasecmp (name, "rights") == 0) {
 			data->rights = g_strdup (value);
-		} else
-		if (!data->creator && g_ascii_strcasecmp (name, "creator") == 0) {
+		} else if (!data->creator && g_ascii_strcasecmp (name, "creator") == 0) {
 			data->creator = g_strdup (value);
-		} else
-		if (!data->description && g_ascii_strcasecmp (name, "description") == 0) {
+		} else if (!data->description && g_ascii_strcasecmp (name, "description") == 0) {
 			data->description = g_strdup (value);
-		} else
-		if (!data->date && g_ascii_strcasecmp (name, "date") == 0) {
+		} else if (!data->date && g_ascii_strcasecmp (name, "date") == 0) {
 			data->date = g_strdup (value);
-		} else
-		if (!data->keywords && g_ascii_strcasecmp (name, "keywords") == 0) {
+		} else if (!data->keywords && g_ascii_strcasecmp (name, "keywords") == 0) {
 			data->keywords = g_strdup (value);
-		} else
-		if (!data->subject && g_ascii_strcasecmp (name, "subject") == 0) {
+		} else if (!data->subject && g_ascii_strcasecmp (name, "subject") == 0) {
 			data->subject = g_strdup (value);
-		} else
-		if (!data->publisher && g_ascii_strcasecmp (name, "publisher") == 0) {
+		} else if (!data->publisher && g_ascii_strcasecmp (name, "publisher") == 0) {
 			data->publisher = g_strdup (value);
-		} else
-		if (!data->contributor && g_ascii_strcasecmp (name, "contributor") == 0) {
+		} else if (!data->contributor && g_ascii_strcasecmp (name, "contributor") == 0) {
 			data->contributor = g_strdup (value);
-		} else
-		if (!data->type && g_ascii_strcasecmp (name, "type") == 0) {
+		} else if (!data->type && g_ascii_strcasecmp (name, "type") == 0) {
 			data->type = g_strdup (value);
-		} else
-		if (!data->format && g_ascii_strcasecmp (name, "format") == 0) {
+		} else if (!data->format && g_ascii_strcasecmp (name, "format") == 0) {
 			data->format = g_strdup (value);
-		} else
-		if (!data->identifier && g_ascii_strcasecmp (name, "identifier") == 0) {
+		} else if (!data->identifier && g_ascii_strcasecmp (name, "identifier") == 0) {
 			data->identifier = g_strdup (value);
-		} else
-		if (!data->source && g_ascii_strcasecmp (name, "source") == 0) {
+		} else if (!data->source && g_ascii_strcasecmp (name, "source") == 0) {
 			data->source = g_strdup (value);
-		} else
-		if (!data->language && g_ascii_strcasecmp (name, "language") == 0) {
+		} else if (!data->language && g_ascii_strcasecmp (name, "language") == 0) {
 			data->language = g_strdup (value);
-		} else
-		if (!data->relation && g_ascii_strcasecmp (name, "relation") == 0) {
+		} else if (!data->relation && g_ascii_strcasecmp (name, "relation") == 0) {
 			data->relation = g_strdup (value);
-		} else
-		if (!data->coverage && g_ascii_strcasecmp (name, "coverage") == 0) {
+		} else if (!data->coverage && g_ascii_strcasecmp (name, "coverage") == 0) {
 			data->coverage = g_strdup (value);
 		}
-	} else
-	/* Creative Commons */
-	if (g_ascii_strcasecmp (schema, NS_CC) == 0) {
+		/* Creative Commons */
+	} else if (g_ascii_strcasecmp (schema, NS_CC) == 0) {
 		if (!data->license && g_ascii_strcasecmp (name, "license") == 0) {
 			data->license = g_strdup (value);
 		}
-	} else
-	/* TODO: A lot of these location fields are pretty vague and ambigious.
-	 * We should go through them one by one and ensure that all of them are
-	 * used sanely */
-
-	/* Photoshop TODO: is this needed anyway? */
-	if (g_ascii_strcasecmp (schema,  NS_PHOTOSHOP) == 0) {
-		if (data->City && g_ascii_strcasecmp (name, "City") == 0) {
-			data->City = g_strdup (value);
-		} else
-		if (!data->Country && g_ascii_strcasecmp (name, "Country") == 0) {
-			data->Country = g_strdup (value);
-		} else
-		if (!data->State && g_ascii_strcasecmp (name, "State") == 0) {
-			data->State = g_strdup (value);
-		} else
-		if (!data->Address && g_ascii_strcasecmp (name, "Location") == 0) {
-			data->Address = g_strdup (value);
+		/* TODO: A lot of these location fields are pretty vague and ambigious.
+		 * We should go through them one by one and ensure that all of them are
+		 * used sanely */
+
+		/* Photoshop TODO: is this needed anyway? */
+	} else if (g_ascii_strcasecmp (schema,  NS_PHOTOSHOP) == 0) {
+		if (data->city && g_ascii_strcasecmp (name, "City") == 0) {
+			data->city = g_strdup (value);
+		} else if (!data->country && g_ascii_strcasecmp (name, "Country") == 0) {
+			data->country = g_strdup (value);
+		} else if (!data->state && g_ascii_strcasecmp (name, "State") == 0) {
+			data->state = g_strdup (value);
+		} else if (!data->address && g_ascii_strcasecmp (name, "Location") == 0) {
+			data->address = g_strdup (value);
 		}
-	} else
-	/* IPTC4XMP scheme - GeoClue / location stuff, TODO */
-	if (g_ascii_strcasecmp (schema,  NS_IPTC4XMP) == 0) {
-		if (!data->City && g_ascii_strcasecmp (name, "City") == 0) {
-			data->City = g_strdup (value);
-		} else 
-		if (!data->Country && g_ascii_strcasecmp (name, "Country") == 0) {
-			data->Country = g_strdup (value);
-		} else 
-		if (!data->Country && g_ascii_strcasecmp (name, "CountryName") == 0) {
-			data->Country = g_strdup (value);
-		} else 
-		if (!data->Country && g_ascii_strcasecmp (name, "PrimaryLocationName") == 0) {
-			data->Country = g_strdup (value);
-		} else
-		if (!data->State && g_ascii_strcasecmp (name, "State") == 0) {
-			data->State = g_strdup (value);
-		} else 
-		if (!data->State && g_ascii_strcasecmp (name, "Province") == 0) {
-			data->State = g_strdup (value);
-		} else 
-		if (!data->Address && g_ascii_strcasecmp (name, "Sublocation") == 0) {
-			data->Address = g_strdup (value);
+		/* IPTC4XMP scheme - GeoClue / location stuff, TODO */
+	} else if (g_ascii_strcasecmp (schema,  NS_IPTC4XMP) == 0) {
+		if (!data->city && g_ascii_strcasecmp (name, "City") == 0) {
+			data->city = g_strdup (value);
+		} else if (!data->country && g_ascii_strcasecmp (name, "Country") == 0) {
+			data->country = g_strdup (value);
+		} else if (!data->country && g_ascii_strcasecmp (name, "CountryName") == 0) {
+			data->country = g_strdup (value);
+		} else if (!data->country && g_ascii_strcasecmp (name, "PrimaryLocationName") == 0) {
+			data->country = g_strdup (value);
+		} else if (!data->state && g_ascii_strcasecmp (name, "State") == 0) {
+			data->state = g_strdup (value);
+		} else if (!data->state && g_ascii_strcasecmp (name, "Province") == 0) {
+			data->state = g_strdup (value);
+		} else if (!data->address && g_ascii_strcasecmp (name, "Sublocation") == 0) {
+			data->address = g_strdup (value);
 		}
 	} 
-	 /* else
-	* XAP (XMP)scheme *
-	if (g_ascii_strcasecmp (schema, NS_XAP) == 0) {
-		if (g_ascii_strcasecmp (name, "Rating") == 0) {
-			tracker_statement_list_insert (metadata, uri,
-			                               "Image:Rating", value);
-		}
-		if (g_ascii_strcasecmp (name, "MetadataDate") == 0) {
-			tracker_statement_list_insert (metadata, uri,
-			                              "Image:Date", value);
-		}
-	} else
+	/* else
+	 * XAP (XMP)scheme *
+	 if (g_ascii_strcasecmp (schema, NS_XAP) == 0) {
+	 if (g_ascii_strcasecmp (name, "Rating") == 0) {
+	 tracker_statement_list_insert (metadata, uri,
+	 "Image:Rating", value);
+	 }
+	 if (g_ascii_strcasecmp (name, "MetadataDate") == 0) {
+	 tracker_statement_list_insert (metadata, uri,
+	 "Image:Date", value);
+	 }
+	 } else
 	*/
+
 	g_free (name);
 }
 
-
 /* Iterate over the XMP, dispatching to the appropriate element type
  * (simple, simple w/qualifiers, or an array) handler.
  */
-void
-tracker_xmp_iter (XmpPtr                xmp,
-                  XmpIteratorPtr        iter,
-                  const gchar          *uri,
-                  TrackerXmpData       *data,
-                  gboolean              append)
+static void
+iterate (XmpPtr          xmp,
+         XmpIteratorPtr  iter,
+         const gchar    *uri,
+         TrackerXmpData *data,
+         gboolean        append)
 {
 	XmpStringPtr the_schema = xmp_string_new ();
 	XmpStringPtr the_path = xmp_string_new ();
@@ -456,18 +397,18 @@ tracker_xmp_iter (XmpPtr                xmp,
 		if (XMP_IS_PROP_SIMPLE (opt)) {
 			if (!tracker_is_empty_string (path)) {
 				if (XMP_HAS_PROP_QUALIFIERS (opt)) {
-					tracker_xmp_iter_simple_qual (xmp, uri, data, schema, path, value, append);
+					iterate_simple_qual (xmp, uri, data, schema, path, value, append);
 				} else {
-					tracker_xmp_iter_simple (uri, data, schema, path, value, append);
+					iterate_simple (uri, data, schema, path, value, append);
 				}
 			}
 		}
 		else if (XMP_IS_PROP_ARRAY (opt)) {
 			if (XMP_IS_ARRAY_ALTTEXT (opt)) {
-				tracker_xmp_iter_alt_text (xmp, uri, data, schema, path);
+				iterate_alt_text (xmp, uri, data, schema, path);
 				xmp_iterator_skip (iter, XMP_ITER_SKIPSUBTREE);
 			} else {
-				tracker_xmp_iter_array (xmp, uri, data, schema, path);
+				iterate_array (xmp, uri, data, schema, path);
 				xmp_iterator_skip (iter, XMP_ITER_SKIPSUBTREE);
 			}
 		}
@@ -480,12 +421,17 @@ tracker_xmp_iter (XmpPtr                xmp,
 
 #endif /* HAVE_EXEMPI */
 
-void
-tracker_read_xmp (const gchar          *buffer,
-                  size_t                len,
-                  const gchar          *uri,
-                  TrackerXmpData       *data)
+gboolean
+tracker_xmp_read (const gchar    *buffer,
+                  size_t          len,
+                  const gchar    *uri,
+                  TrackerXmpData *data)
 {
+	g_return_val_if_fail (buffer != NULL, FALSE);
+	g_return_val_if_fail (len > 0, FALSE);
+	g_return_val_if_fail (uri != NULL, FALSE);
+	g_return_val_if_fail (data != NULL, FALSE);
+
 #ifdef HAVE_EXEMPI
 	XmpPtr xmp;
 
@@ -498,34 +444,39 @@ tracker_read_xmp (const gchar          *buffer,
 		XmpIteratorPtr iter;
 
 		iter = xmp_iterator_new (xmp, NULL, NULL, XMP_ITER_PROPERTIES);
-		tracker_xmp_iter (xmp, iter, uri, data, FALSE);
+		iterate (xmp, iter, uri, data, FALSE);
 		xmp_iterator_free (iter);
 		xmp_free (xmp);
 	}
 
 	xmp_terminate ();
-#endif
-}
+#endif /* HAVE_EXEMPI */
 
+	return TRUE;
+}
 
 static void
-insert_keywords (TrackerSparqlBuilder *metadata, const gchar *uri, gchar *keywords)
+insert_keywords (TrackerSparqlBuilder *metadata,
+                 const gchar          *uri,
+                 gchar                *keywords)
 {
 	char *lasts, *keyw;
 	size_t len;
 
 	keyw = keywords;
 	keywords = strchr (keywords, '"');
-	if (keywords)
+	if (keywords) {
 		keywords++;
-	else
+	} else {
 		keywords = keyw;
+	}
 
 	len = strlen (keywords);
 	if (keywords[len - 1] == '"')
 		keywords[len - 1] = '\0';
 
-	for (keyw = strtok_r (keywords, ",; ", &lasts); keyw;
+	for (keyw = strtok_r (keywords, ",; ", &lasts);
+	     keyw;
 	     keyw = strtok_r (NULL, ",; ", &lasts)) {
 		tracker_sparql_builder_predicate (metadata, "nao:hasTag");
 
@@ -540,9 +491,15 @@ insert_keywords (TrackerSparqlBuilder *metadata, const gchar *uri, gchar *keywor
 	}
 }
 
-void
-tracker_apply_xmp (TrackerSparqlBuilder *metadata, const gchar *uri, TrackerXmpData *xmp_data)
+gboolean
+tracker_xmp_apply (TrackerSparqlBuilder *metadata,
+                   const gchar          *uri,
+                   TrackerXmpData       *xmp_data)
 {
+	g_return_val_if_fail (TRACKER_IS_SPARQL_BUILDER (metadata), FALSE);
+	g_return_val_if_fail (uri != NULL, FALSE);
+	g_return_val_if_fail (xmp_data != NULL, FALSE);
+
 	if (xmp_data->keywords) {
 		insert_keywords (metadata, uri, xmp_data->keywords);
 		g_free (xmp_data->keywords);
@@ -553,9 +510,9 @@ tracker_apply_xmp (TrackerSparqlBuilder *metadata, const gchar *uri, TrackerXmpD
 		g_free (xmp_data->subject);
 	}
 
-	if (xmp_data->PDFkeywords) {
-		insert_keywords (metadata, uri, xmp_data->PDFkeywords);
-		g_free (xmp_data->PDFkeywords);
+	if (xmp_data->pdf_keywords) {
+		insert_keywords (metadata, uri, xmp_data->pdf_keywords);
+		g_free (xmp_data->pdf_keywords);
 	}
 
 	if (xmp_data->publisher) {
@@ -619,62 +576,62 @@ tracker_apply_xmp (TrackerSparqlBuilder *metadata, const gchar *uri, TrackerXmpD
 		g_free (xmp_data->license);
 	}
 
-	if (xmp_data->Make || xmp_data->Model) {
-		gchar *final_camera = tracker_merge (" ", 2, xmp_data->Make, xmp_data->Model);
+	if (xmp_data->make || xmp_data->model) {
+		gchar *final_camera = tracker_merge (" ", 2, xmp_data->make, xmp_data->model);
 
 		tracker_sparql_builder_predicate (metadata, "nmm:camera");
 		tracker_sparql_builder_object_unvalidated (metadata, final_camera);
 		g_free (final_camera);
 	}
 
-	if (xmp_data->title || xmp_data->Title || xmp_data->PDFtitle) {
+	if (xmp_data->title || xmp_data->title2 || xmp_data->pdf_title) {
 		gchar *final_title = tracker_coalesce (3, xmp_data->title, 
-		                                       xmp_data->Title, 
-		                                       xmp_data->PDFtitle);
+		                                       xmp_data->title2,
+		                                       xmp_data->pdf_title);
 		tracker_sparql_builder_predicate (metadata, "nie:title");
 		tracker_sparql_builder_object_unvalidated (metadata, final_title);
 		g_free (final_title);
 	}
 
-	if (xmp_data->Orientation) {
+	if (xmp_data->orientation) {
 		tracker_sparql_builder_predicate (metadata, "nfo:orientation");
-		tracker_sparql_builder_object_unvalidated (metadata, xmp_data->Orientation);
-		g_free (xmp_data->Orientation);
+		tracker_sparql_builder_object_unvalidated (metadata, xmp_data->orientation);
+		g_free (xmp_data->orientation);
 	}
 	
-	if (xmp_data->rights || xmp_data->Copyright) {
-		gchar *final_rights = tracker_coalesce (2, xmp_data->Copyright, xmp_data->rights);
+	if (xmp_data->rights || xmp_data->copyright) {
+		gchar *final_rights = tracker_coalesce (2, xmp_data->copyright, xmp_data->rights);
 		tracker_sparql_builder_predicate (metadata, "nie:copyright");
 		tracker_sparql_builder_object_unvalidated (metadata, final_rights);
 		g_free (final_rights);
 	}
 
-	if (xmp_data->WhiteBalance) {
+	if (xmp_data->white_balance) {
 		tracker_sparql_builder_predicate (metadata, "nmm:whiteBalance");
-		tracker_sparql_builder_object_unvalidated (metadata, xmp_data->WhiteBalance);
-		g_free (xmp_data->WhiteBalance);
+		tracker_sparql_builder_object_unvalidated (metadata, xmp_data->white_balance);
+		g_free (xmp_data->white_balance);
 	}
 
-	if (xmp_data->FNumber) {
+	if (xmp_data->fnumber) {
 		tracker_sparql_builder_predicate (metadata, "nmm:fnumber");
-		tracker_sparql_builder_object_unvalidated (metadata, xmp_data->FNumber);
-		g_free (xmp_data->FNumber);
+		tracker_sparql_builder_object_unvalidated (metadata, xmp_data->fnumber);
+		g_free (xmp_data->fnumber);
 	}
 
-	if (xmp_data->Flash) {
+	if (xmp_data->flash) {
 		tracker_sparql_builder_predicate (metadata, "nmm:flash");
-		tracker_sparql_builder_object_unvalidated (metadata, xmp_data->Flash);
-		g_free (xmp_data->Flash);
+		tracker_sparql_builder_object_unvalidated (metadata, xmp_data->flash);
+		g_free (xmp_data->flash);
 	}
 
-	if (xmp_data->FocalLength) {
+	if (xmp_data->focal_length) {
 		tracker_sparql_builder_predicate (metadata, "nmm:focalLength");
-		tracker_sparql_builder_object_unvalidated (metadata, xmp_data->FocalLength);
-		g_free (xmp_data->FocalLength);
+		tracker_sparql_builder_object_unvalidated (metadata, xmp_data->focal_length);
+		g_free (xmp_data->focal_length);
 	}
 
-	if (xmp_data->Artist || xmp_data->contributor) {
-		gchar *final_artist = tracker_coalesce (2, xmp_data->Artist, xmp_data->contributor);
+	if (xmp_data->artist || xmp_data->contributor) {
+		gchar *final_artist = tracker_coalesce (2, xmp_data->artist, xmp_data->contributor);
 
 		tracker_sparql_builder_predicate (metadata, "nco:contributor");
 
@@ -688,20 +645,20 @@ tracker_apply_xmp (TrackerSparqlBuilder *metadata, const gchar *uri, TrackerXmpD
 		g_free (final_artist);
 	}
 
-	if (xmp_data->ExposureTime) {
+	if (xmp_data->exposure_time) {
 		tracker_sparql_builder_predicate (metadata, "nmm:exposureTime");
-		tracker_sparql_builder_object_unvalidated (metadata, xmp_data->ExposureTime);
-		g_free (xmp_data->ExposureTime);
+		tracker_sparql_builder_object_unvalidated (metadata, xmp_data->exposure_time);
+		g_free (xmp_data->exposure_time);
 	}
 
-	if (xmp_data->ISOSpeedRatings) {
+	if (xmp_data->iso_speed_ratings) {
 		tracker_sparql_builder_predicate (metadata, "nmm:isoSpeed");
-		tracker_sparql_builder_object_unvalidated (metadata, xmp_data->ISOSpeedRatings);
-		g_free (xmp_data->ISOSpeedRatings);
+		tracker_sparql_builder_object_unvalidated (metadata, xmp_data->iso_speed_ratings);
+		g_free (xmp_data->iso_speed_ratings);
 	}
 
-	if (xmp_data->date || xmp_data->DateTimeOriginal) {
-		gchar *final_date =  tracker_coalesce (2, xmp_data->date, xmp_data->DateTimeOriginal);
+	if (xmp_data->date || xmp_data->time_original) {
+		gchar *final_date = tracker_coalesce (2, xmp_data->date, xmp_data->time_original);
 		tracker_sparql_builder_predicate (metadata, "nie:contentCreated");
 		tracker_sparql_builder_object_unvalidated (metadata, final_date);
 		g_free (final_date);
@@ -713,10 +670,10 @@ tracker_apply_xmp (TrackerSparqlBuilder *metadata, const gchar *uri, TrackerXmpD
 		g_free (xmp_data->description);
 	}
 
-	if (xmp_data->MeteringMode) {
+	if (xmp_data->metering_mode) {
 		tracker_sparql_builder_predicate (metadata, "nmm:meteringMode");
-		tracker_sparql_builder_object_unvalidated (metadata, xmp_data->MeteringMode);
-		g_free (xmp_data->MeteringMode);
+		tracker_sparql_builder_object_unvalidated (metadata, xmp_data->metering_mode);
+		g_free (xmp_data->metering_mode);
 	}
 
 	if (xmp_data->creator) {
@@ -732,38 +689,39 @@ tracker_apply_xmp (TrackerSparqlBuilder *metadata, const gchar *uri, TrackerXmpD
 		g_free (xmp_data->creator);
 	}
 
-	if (xmp_data->Address || xmp_data->Country || xmp_data->City) {
+	if (xmp_data->address || xmp_data->country || xmp_data->city) {
 		tracker_sparql_builder_predicate (metadata, "mlo:location");
 
 		tracker_sparql_builder_object_blank_open (metadata);
 		tracker_sparql_builder_predicate (metadata, "a");
 		tracker_sparql_builder_object (metadata, "mlo:GeoPoint");
 
-		if (xmp_data->Address) {
+		if (xmp_data->address) {
 			tracker_sparql_builder_predicate (metadata, "mlo:address");
-			tracker_sparql_builder_object_unvalidated (metadata, xmp_data->Address);
-			g_free (xmp_data->Address);
+			tracker_sparql_builder_object_unvalidated (metadata, xmp_data->address);
+			g_free (xmp_data->address);
 		}
 
-		if (xmp_data->State) {
+		if (xmp_data->state) {
 			tracker_sparql_builder_predicate (metadata, "mlo:state");
-			tracker_sparql_builder_object_unvalidated (metadata, xmp_data->State);
-			g_free (xmp_data->State);
+			tracker_sparql_builder_object_unvalidated (metadata, xmp_data->state);
+			g_free (xmp_data->state);
 		}
 
-		if (xmp_data->City) {
+		if (xmp_data->city) {
 			tracker_sparql_builder_predicate (metadata, "mlo:city");
-			tracker_sparql_builder_object_unvalidated (metadata, xmp_data->City);
-			g_free (xmp_data->City);
+			tracker_sparql_builder_object_unvalidated (metadata, xmp_data->city);
+			g_free (xmp_data->city);
 		}
 
-		if (xmp_data->Country) {
+		if (xmp_data->country) {
 			tracker_sparql_builder_predicate (metadata, "mlo:country");
-			tracker_sparql_builder_object_unvalidated (metadata, xmp_data->Country);
-			g_free (xmp_data->Country);
+			tracker_sparql_builder_object_unvalidated (metadata, xmp_data->country);
+			g_free (xmp_data->country);
 		}
 	
 		tracker_sparql_builder_object_blank_close (metadata);
 	}
-	
+
+	return TRUE;
 }
diff --git a/src/tracker-extract/tracker-xmp.h b/src/tracker-extract/tracker-xmp.h
index e60bce5..09cd6b1 100644
--- a/src/tracker-extract/tracker-xmp.h
+++ b/src/tracker-extract/tracker-xmp.h
@@ -1,5 +1,6 @@
-/* Tracker Xmp - Xmp helper functions
+/*
  * Copyright (C) 2006, Mr Jamie McCracken (jamiemcc gnome org)
+ * Copyright (C) 2009, Nokia
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public
@@ -17,42 +18,74 @@
  * Boston, MA  02110-1301, USA.
  */
 
-#ifndef _TRACKER_XMP_H_
-#define _TRACKER_XMP_H_
+#ifndef __TRACKER_EXTRACT_XMP_H__
+#define __TRACKER_EXTRACT_XMP_H__
 
 #include <glib.h>
 
+G_BEGIN_DECLS
+
 typedef struct {
 	/* NS_DC */
-	gchar *title, *rights, *creator, *description, *date, *keywords, *subject,
-		*publisher, *contributor, *type, *format, *identifier, *source,
-		*language, *relation, *coverage;
+	gchar *title;
+	gchar *rights;
+	gchar *creator;
+	gchar *description;
+	gchar *date;
+	gchar *keywords;
+	gchar *subject;
+
+	gchar *publisher;
+	gchar *contributor;
+	gchar *type;
+	gchar *format;
+	gchar *identifier;
+	gchar *source;
+	gchar *language;
+	gchar *relation;
+	gchar *coverage;
 
 	/* NS_CC */
 	gchar *license;
 
 	/* NS_PDF */
-	gchar *PDFtitle, *PDFkeywords;
+	gchar *pdf_title;
+	gchar *pdf_keywords;
 
 	/* NS_EXIF */
-	gchar *Title, *DateTimeOriginal, *Artist, *Make, *Model, *Orientation,
-		*Flash, *MeteringMode, *ExposureTime, *FNumber, *FocalLength,
-		*ISOSpeedRatings, *WhiteBalance, *Copyright;
+	gchar *title2;
+	gchar *time_original;
+	gchar *artist;
+	gchar *make;
+	gchar *model;
+	gchar *orientation;
+	gchar *flash;
+	gchar *metering_mode;
+	gchar *exposure_time;
+	gchar *fnumber;
+	gchar *focal_length;
+
+	gchar *iso_speed_ratings;
+	gchar *white_balance;
+	gchar *copyright;
 
 	/* TODO NS_XAP*/
 	/* TODO NS_IPTC4XMP */
 	/* TODO NS_PHOTOSHOP */
-	gchar *Address, *Country, *State, *City;
+	gchar *address;
+	gchar *country;
+	gchar *state;
+	gchar *city;
 } TrackerXmpData;
 
+gboolean tracker_xmp_read  (const gchar          *buffer,
+                            size_t                len,
+                            const gchar          *uri,
+                            TrackerXmpData       *data);
+gboolean tracker_xmp_apply (TrackerSparqlBuilder *metadata,
+                            const gchar          *uri,
+                            TrackerXmpData       *xmp_data);
 
-void tracker_read_xmp (const gchar          *buffer,
-                       size_t                len,
-                       const gchar          *uri,
-                       TrackerXmpData       *data);
-
-void tracker_apply_xmp (TrackerSparqlBuilder *metadata,
-                        const gchar *uri,
-                        TrackerXmpData *xmp_data);
+G_END_DECLS
 
-#endif /* _TRACKER_XMP_H_ */
+#endif /* __TRACKER_EXTRACT_XMP_H__ */



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