[tracker/miner-web: 8/11] tracker-extract: Fixed the jpeg extractor to use TrackerSparqlBuilder
- From: Adrien Bustany <abustany src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [tracker/miner-web: 8/11] tracker-extract: Fixed the jpeg extractor to use TrackerSparqlBuilder
- Date: Thu, 5 Nov 2009 12:58:43 +0000 (UTC)
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]