[tracker] Added nao:nummericRating and fixed a few bugs in the EXIF & XMP parsers



commit 2ae50ecef924695803b7449f9476ec2bf3a56d3b
Author: Philip Van Hoof <philip codeminded be>
Date:   Tue Feb 2 15:55:34 2010 +0100

    Added nao:nummericRating and fixed a few bugs in the EXIF & XMP parsers

 src/libtracker-extract/tracker-exif.c      |    8 +++++++-
 src/libtracker-extract/tracker-exif.h      |    1 +
 src/libtracker-extract/tracker-xmp.c       |   28 ++++++++++------------------
 src/libtracker-extract/tracker-xmp.h       |    2 ++
 src/tracker-extract/tracker-extract-jpeg.c |    9 +++++++++
 src/tracker-extract/tracker-extract-png.c  |    9 +++++++++
 src/tracker-extract/tracker-extract-tiff.c |    8 ++++++++
 7 files changed, 46 insertions(+), 19 deletions(-)
---
diff --git a/src/libtracker-extract/tracker-exif.c b/src/libtracker-extract/tracker-exif.c
index 52466fb..450724d 100644
--- a/src/libtracker-extract/tracker-exif.c
+++ b/src/libtracker-extract/tracker-exif.c
@@ -337,6 +337,10 @@ tracker_exif_read (const unsigned char *buffer,
                    const gchar         *uri,
                    TrackerExifData     *data)
 {
+#ifdef HAVE_LIBEXIF
+	ExifData *exif;
+#endif
+
 	g_return_val_if_fail (buffer != NULL, FALSE);
 	g_return_val_if_fail (len > 0, FALSE);
 	g_return_val_if_fail (uri != NULL, FALSE);
@@ -345,7 +349,6 @@ tracker_exif_read (const unsigned char *buffer,
 	memset (data, 0, sizeof (TrackerExifData));
 
 #ifdef HAVE_LIBEXIF
-	ExifData *exif;
 
 	exif = exif_data_new ();
 
@@ -400,6 +403,9 @@ tracker_exif_read (const unsigned char *buffer,
 		data->white_balance = get_white_balance (exif, EXIF_TAG_WHITE_BALANCE);
 	if (!data->copyright)
 		data->copyright = get_value (exif, EXIF_TAG_COPYRIGHT);
+	if (!data->software)
+		data->software = get_value (exif, EXIF_TAG_SOFTWARE);
+
 
 	exif_data_free (exif);
 #endif /* HAVE_LIBEXIF */
diff --git a/src/libtracker-extract/tracker-exif.h b/src/libtracker-extract/tracker-exif.h
index 9091191..fe7b5bf 100644
--- a/src/libtracker-extract/tracker-exif.h
+++ b/src/libtracker-extract/tracker-exif.h
@@ -47,6 +47,7 @@ typedef struct {
 	gchar *metering_mode;
 	gchar *white_balance;
 	gchar *copyright;
+	gchar *software;
 } TrackerExifData;
 
 gboolean tracker_exif_read (const unsigned char *buffer,
diff --git a/src/libtracker-extract/tracker-xmp.c b/src/libtracker-extract/tracker-xmp.c
index f753aa2..b537238 100644
--- a/src/libtracker-extract/tracker-xmp.c
+++ b/src/libtracker-extract/tracker-xmp.c
@@ -268,7 +268,7 @@ iterate_simple (const gchar    *uri,
 			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) {
+		/* } 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) {
@@ -281,7 +281,7 @@ iterate_simple (const gchar    *uri,
 			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) {
+		/* } 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) {
@@ -350,7 +350,7 @@ iterate_simple (const gchar    *uri,
 		 * used sanely */
 
 		/* Photoshop TODO: is this needed anyway? */
-	} else if (g_ascii_strcasecmp (schema,  NS_PHOTOSHOP) == 0) {
+	} 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) {
@@ -361,7 +361,7 @@ iterate_simple (const gchar    *uri,
 			data->address = g_strdup (value);
 		}
 		/* IPTC4XMP scheme - GeoClue / location stuff, TODO */
-	} else if (g_ascii_strcasecmp (schema,  NS_IPTC4XMP) == 0) {
+	} 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) {
@@ -377,20 +377,12 @@ iterate_simple (const gchar    *uri,
 		} 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 if (g_ascii_strcasecmp (schema, NS_XAP) == 0) {
+		if (!data->rating && g_ascii_strcasecmp (name, "Rating") == 0) {
+			data->rating = g_strdup (value);
+		}
+	}
+
 
 	g_free (name);
 }
diff --git a/src/libtracker-extract/tracker-xmp.h b/src/libtracker-extract/tracker-xmp.h
index 8a9e28e..8a945f8 100644
--- a/src/libtracker-extract/tracker-xmp.h
+++ b/src/libtracker-extract/tracker-xmp.h
@@ -72,6 +72,8 @@ typedef struct {
 	gchar *copyright;
 
 	/* TODO NS_XAP*/
+	gchar *rating;
+
 	/* TODO NS_IPTC4XMP */
 	/* TODO NS_PHOTOSHOP */
 	gchar *address;
diff --git a/src/tracker-extract/tracker-extract-jpeg.c b/src/tracker-extract/tracker-extract-jpeg.c
index d467ec3..ce6f9cc 100644
--- a/src/tracker-extract/tracker-extract-jpeg.c
+++ b/src/tracker-extract/tracker-extract-jpeg.c
@@ -326,6 +326,9 @@ extract_jpeg (const gchar          *uri,
 		tracker_sparql_builder_object_int64 (metadata, cinfo.image_width);
 		g_free (ed.x_dimension);
 
+		/* TODO: add ontology and store this */
+		g_free (ed.software);
+
 		tracker_sparql_builder_predicate (metadata, "nfo:height");
 		tracker_sparql_builder_object_int64 (metadata, cinfo.image_height);
 		g_free (ed.y_dimension);
@@ -373,6 +376,12 @@ extract_jpeg (const gchar          *uri,
 			g_free (xd.type);
 		}
 
+		if (xd.rating) {
+			tracker_sparql_builder_predicate (metadata, "nao:numericRating");
+			tracker_sparql_builder_object_unvalidated (metadata, xd.rating);
+			g_free (xd.rating);
+		}
+
 		if (xd.format) {
 			tracker_sparql_builder_predicate (metadata, "dc:format");
 			tracker_sparql_builder_object_unvalidated (metadata, xd.format);
diff --git a/src/tracker-extract/tracker-extract-png.c b/src/tracker-extract/tracker-extract-png.c
index c501eb6..2ca2aa0 100644
--- a/src/tracker-extract/tracker-extract-png.c
+++ b/src/tracker-extract/tracker-extract-png.c
@@ -315,6 +315,9 @@ read_metadata (png_structp png_ptr, png_infop info_ptr, const gchar *uri, Tracke
 			g_free (merge_data.license);
 		}
 
+		/* TODO: add ontology and store this */
+		g_free (exif_data.software);
+
 		g_free (exif_data.x_dimension);
 		g_free (exif_data.y_dimension);
 		g_free (exif_data.image_width);
@@ -434,6 +437,12 @@ read_metadata (png_structp png_ptr, png_infop info_ptr, const gchar *uri, Tracke
 			g_free (xmp_data.pdf_keywords);
 		}
 
+		if (xmp_data.rating) {
+			tracker_sparql_builder_predicate (metadata, "nao:numericRating");
+			tracker_sparql_builder_object_unvalidated (metadata, xmp_data.rating);
+			g_free (xmp_data.rating);
+		}
+
 		if (xmp_data.subject) {
 			insert_keywords (metadata, uri, xmp_data.subject);
 			g_free (xmp_data.subject);
diff --git a/src/tracker-extract/tracker-extract-tiff.c b/src/tracker-extract/tracker-extract-tiff.c
index c00a9ff..78b7011 100644
--- a/src/tracker-extract/tracker-extract-tiff.c
+++ b/src/tracker-extract/tracker-extract-tiff.c
@@ -358,6 +358,8 @@ extract_tiff (const gchar *uri, TrackerSparqlBuilder *metadata)
 				exif_data.focal_length = get_value (image, EXIFTAG_DATETIMEORIGINAL, TIFF_TAGTYPE_DOUBLE);
 			if (!exif_data.white_balance)
 				exif_data.white_balance = get_white_balance (image);
+			/* if (!exif_data.software)
+				exif_data.software = get_value (image, EXIFTAG_SOFTWARE, TIFF_TAGTYPE_STRING); */
 		}
 	}
 
@@ -553,6 +555,12 @@ extract_tiff (const gchar *uri, TrackerSparqlBuilder *metadata)
 		g_free (xmp_data.coverage);
 	}
 
+	if (xmp_data.rating) {
+		tracker_sparql_builder_predicate (metadata, "nao:numericRating");
+		tracker_sparql_builder_object_unvalidated (metadata, xmp_data.rating);
+		g_free (xmp_data.rating);
+	}
+
 	if (xmp_data.license) {
 		tracker_sparql_builder_predicate (metadata, "nie:license");
 		tracker_sparql_builder_object_unvalidated (metadata, xmp_data.license);



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