[tracker] Added nao:nummericRating and fixed a few bugs in the EXIF & XMP parsers
- From: Philip Van Hoof <pvanhoof src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [tracker] Added nao:nummericRating and fixed a few bugs in the EXIF & XMP parsers
- Date: Tue, 2 Feb 2010 14:56:13 +0000 (UTC)
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]