summaryrefslogtreecommitdiff
path: root/src/tracker-extract/tracker-extract-png.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/tracker-extract/tracker-extract-png.c')
-rw-r--r--src/tracker-extract/tracker-extract-png.c348
1 files changed, 75 insertions, 273 deletions
diff --git a/src/tracker-extract/tracker-extract-png.c b/src/tracker-extract/tracker-extract-png.c
index a7aa70565..2bf13cb21 100644
--- a/src/tracker-extract/tracker-extract-png.c
+++ b/src/tracker-extract/tracker-extract-png.c
@@ -183,14 +183,11 @@ raw_profile_new (const gchar *input,
#endif /* defined(PNG_iTXt_SUPPORTED) && (defined(HAVE_EXEMPI) || defined(HAVE_LIBEXIF)) */
static void
-read_metadata (TrackerSparqlBuilder *preupdate,
- TrackerSparqlBuilder *metadata,
+read_metadata (TrackerResource *metadata,
png_structp png_ptr,
png_infop info_ptr,
png_infop end_ptr,
- const gchar *uri,
- const gchar *graph,
- const gchar *urn)
+ const gchar *uri)
{
MergeData md = { 0 };
PngData pd = { 0 };
@@ -364,159 +361,87 @@ read_metadata (TrackerSparqlBuilder *preupdate,
keywords = g_ptr_array_new_with_free_func ((GDestroyNotify) g_free);
if (md.comment) {
- tracker_sparql_builder_predicate (metadata, "nie:comment");
- tracker_sparql_builder_object_unvalidated (metadata, md.comment);
+ tracker_resource_set_string (metadata, "nie:comment", md.comment);
}
if (md.license) {
- tracker_sparql_builder_predicate (metadata, "nie:license");
- tracker_sparql_builder_object_unvalidated (metadata, md.license);
+ tracker_resource_set_string (metadata, "nie:license", md.license);
}
/* TODO: add ontology and store this ed->software */
if (md.creator) {
- gchar *uri = tracker_sparql_escape_uri_printf ("urn:contact:%s", md.creator);
+ TrackerResource *creator = tracker_extract_new_contact (md.creator);
- tracker_sparql_builder_insert_open (preupdate, NULL);
- if (graph) {
- tracker_sparql_builder_graph_open (preupdate, graph);
- }
-
- tracker_sparql_builder_subject_iri (preupdate, uri);
- tracker_sparql_builder_predicate (preupdate, "a");
- tracker_sparql_builder_object (preupdate, "nco:Contact");
- tracker_sparql_builder_predicate (preupdate, "nco:fullname");
- tracker_sparql_builder_object_unvalidated (preupdate, md.creator);
-
- if (graph) {
- tracker_sparql_builder_graph_close (preupdate);
- }
- tracker_sparql_builder_insert_close (preupdate);
+ tracker_resource_set_relation (metadata, "nco:creator", creator);
- tracker_sparql_builder_predicate (metadata, "nco:creator");
- tracker_sparql_builder_object_iri (metadata, uri);
- g_free (uri);
+ g_object_unref (creator);
}
- tracker_guarantee_date_from_file_mtime (metadata,
- "nie:contentCreated",
- md.date,
- uri);
+ tracker_guarantee_resource_date_from_file_mtime (metadata,
+ "nie:contentCreated",
+ md.date,
+ uri);
if (md.description) {
- tracker_sparql_builder_predicate (metadata, "nie:description");
- tracker_sparql_builder_object_unvalidated (metadata, md.description);
+ tracker_resource_set_string (metadata, "nie:description", md.description);
}
if (md.copyright) {
- tracker_sparql_builder_predicate (metadata, "nie:copyright");
- tracker_sparql_builder_object_unvalidated (metadata, md.copyright);
+ tracker_resource_set_string (metadata, "nie:copyright", md.copyright);
}
- tracker_guarantee_title_from_file (metadata,
- "nie:title",
- md.title,
- uri,
- NULL);
+ tracker_guarantee_resource_title_from_file (metadata,
+ "nie:title",
+ md.title,
+ uri,
+ NULL);
if (md.make || md.model) {
- gchar *equip_uri;
-
- equip_uri = tracker_sparql_escape_uri_printf ("urn:equipment:%s:%s:",
- md.make ? md.make : "",
- md.model ? md.model : "");
-
- tracker_sparql_builder_insert_open (preupdate, NULL);
- if (graph) {
- tracker_sparql_builder_graph_open (preupdate, graph);
- }
+ TrackerResource *equipment = tracker_extract_new_equipment (md.make, md.model);
- tracker_sparql_builder_subject_iri (preupdate, equip_uri);
- tracker_sparql_builder_predicate (preupdate, "a");
- tracker_sparql_builder_object (preupdate, "nfo:Equipment");
+ tracker_resource_set_relation (metadata, "nfo:equipment", equipment);
- if (md.make) {
- tracker_sparql_builder_predicate (preupdate, "nfo:manufacturer");
- tracker_sparql_builder_object_unvalidated (preupdate, md.make);
- }
- if (md.model) {
- tracker_sparql_builder_predicate (preupdate, "nfo:model");
- tracker_sparql_builder_object_unvalidated (preupdate, md.model);
- }
-
- if (graph) {
- tracker_sparql_builder_graph_close (preupdate);
- }
- tracker_sparql_builder_insert_close (preupdate);
-
- tracker_sparql_builder_predicate (metadata, "nfo:equipment");
- tracker_sparql_builder_object_iri (metadata, equip_uri);
- g_free (equip_uri);
+ g_object_unref (equipment);
}
if (md.artist) {
- gchar *uri = tracker_sparql_escape_uri_printf ("urn:contact:%s", md.artist);
-
- tracker_sparql_builder_insert_open (preupdate, NULL);
- if (graph) {
- tracker_sparql_builder_graph_open (preupdate, graph);
- }
+ TrackerResource *artist = tracker_extract_new_contact (md.artist);
- tracker_sparql_builder_subject_iri (preupdate, uri);
- tracker_sparql_builder_predicate (preupdate, "a");
- tracker_sparql_builder_object (preupdate, "nco:Contact");
- tracker_sparql_builder_predicate (preupdate, "nco:fullname");
- tracker_sparql_builder_object_unvalidated (preupdate, md.artist);
+ tracker_resource_set_relation (metadata, "nco:contributor", artist);
- if (graph) {
- tracker_sparql_builder_graph_close (preupdate);
- }
- tracker_sparql_builder_insert_close (preupdate);
-
- tracker_sparql_builder_predicate (metadata, "nco:contributor");
- tracker_sparql_builder_object_iri (metadata, uri);
- g_free (uri);
+ g_object_unref (artist);
}
if (md.orientation) {
- tracker_sparql_builder_predicate (metadata, "nfo:orientation");
- tracker_sparql_builder_object_unvalidated (metadata, md.orientation);
+ tracker_resource_set_string (metadata, "nfo:orientation", md.orientation);
}
if (md.exposure_time) {
- tracker_sparql_builder_predicate (metadata, "nmm:exposureTime");
- tracker_sparql_builder_object_unvalidated (metadata, md.exposure_time);
+ tracker_resource_set_string (metadata, "nmm:exposureTime", md.exposure_time);
}
if (md.iso_speed_ratings) {
- tracker_sparql_builder_predicate (metadata, "nmm:isoSpeed");
- tracker_sparql_builder_object_unvalidated (metadata, md.iso_speed_ratings);
+ tracker_resource_set_string (metadata, "nmm:isoSpeed", md.iso_speed_ratings);
}
if (md.white_balance) {
- tracker_sparql_builder_predicate (metadata, "nmm:whiteBalance");
- tracker_sparql_builder_object_unvalidated (metadata, md.white_balance);
+ tracker_resource_set_string (metadata, "nmm:whiteBalance", md.white_balance);
}
if (md.fnumber) {
- tracker_sparql_builder_predicate (metadata, "nmm:fnumber");
- tracker_sparql_builder_object_unvalidated (metadata, md.fnumber);
+ tracker_resource_set_string (metadata, "nmm:fnumber", md.fnumber);
}
if (md.flash) {
- tracker_sparql_builder_predicate (metadata, "nmm:flash");
- tracker_sparql_builder_object_unvalidated (metadata, md.flash);
- }
+ tracker_resource_set_string (metadata, "nmm:flash", md.flash); }
if (md.focal_length) {
- tracker_sparql_builder_predicate (metadata, "nmm:focalLength");
- tracker_sparql_builder_object_unvalidated (metadata, md.focal_length);
+ tracker_resource_set_string (metadata, "nmm:focalLength", md.focal_length);
}
if (md.metering_mode) {
- tracker_sparql_builder_predicate (metadata, "nmm:meteringMode");
- tracker_sparql_builder_object_unvalidated (metadata, md.metering_mode);
+ tracker_resource_set_string (metadata, "nmm:meteringMode", md.metering_mode);
}
@@ -529,8 +454,7 @@ read_metadata (TrackerSparqlBuilder *preupdate,
}
if (xd->rating) {
- tracker_sparql_builder_predicate (metadata, "nao:numericRating");
- tracker_sparql_builder_object_unvalidated (metadata, xd->rating);
+ tracker_resource_set_string (metadata, "nao:numericRating", xd->rating);
}
if (xd->subject) {
@@ -538,207 +462,91 @@ read_metadata (TrackerSparqlBuilder *preupdate,
}
if (xd->publisher) {
- gchar *uri = tracker_sparql_escape_uri_printf ("urn:contact:%s", xd->publisher);
+ TrackerResource *publisher = tracker_extract_new_contact (xd->publisher);
- tracker_sparql_builder_insert_open (preupdate, NULL);
- if (graph) {
- tracker_sparql_builder_graph_open (preupdate, graph);
- }
-
- tracker_sparql_builder_subject_iri (preupdate, uri);
- tracker_sparql_builder_predicate (preupdate, "a");
- tracker_sparql_builder_object (preupdate, "nco:Contact");
- tracker_sparql_builder_predicate (preupdate, "nco:fullname");
- tracker_sparql_builder_object_unvalidated (preupdate, xd->publisher);
-
- if (graph) {
- tracker_sparql_builder_graph_close (preupdate);
- }
- tracker_sparql_builder_insert_close (preupdate);
+ tracker_resource_set_relation (metadata, "nco:creator", publisher);
- tracker_sparql_builder_predicate (metadata, "nco:creator");
- tracker_sparql_builder_object_iri (metadata, uri);
- g_free (uri);
+ g_object_unref (publisher);
}
if (xd->type) {
- tracker_sparql_builder_predicate (metadata, "dc:type");
- tracker_sparql_builder_object_unvalidated (metadata, xd->type);
+ tracker_resource_set_string (metadata, "dc:type", xd->type);
}
if (xd->format) {
- tracker_sparql_builder_predicate (metadata, "dc:format");
- tracker_sparql_builder_object_unvalidated (metadata, xd->format);
+ tracker_resource_set_string (metadata, "dc:format", xd->format);
}
if (xd->identifier) {
- tracker_sparql_builder_predicate (metadata, "dc:identifier");
- tracker_sparql_builder_object_unvalidated (metadata, xd->identifier);
+ tracker_resource_set_string (metadata, "dc:identifier", xd->identifier);
}
if (xd->source) {
- tracker_sparql_builder_predicate (metadata, "dc:source");
- tracker_sparql_builder_object_unvalidated (metadata, xd->source);
+ tracker_resource_set_string (metadata, "dc:source", xd->source);
}
if (xd->language) {
- tracker_sparql_builder_predicate (metadata, "dc:language");
- tracker_sparql_builder_object_unvalidated (metadata, xd->language);
+ tracker_resource_set_string (metadata, "dc:language", xd->language);
}
if (xd->relation) {
- tracker_sparql_builder_predicate (metadata, "dc:relation");
- tracker_sparql_builder_object_unvalidated (metadata, xd->relation);
+ tracker_resource_set_string (metadata, "dc:relation", xd->relation);
}
if (xd->coverage) {
- tracker_sparql_builder_predicate (metadata, "dc:coverage");
- tracker_sparql_builder_object_unvalidated (metadata, xd->coverage);
+ tracker_resource_set_string (metadata, "dc:coverage", xd->coverage);
}
if (xd->address || xd->state || xd->country || xd->city ||
xd->gps_altitude || xd->gps_latitude || xd-> gps_longitude) {
- tracker_sparql_builder_predicate (metadata, "slo:location");
-
- tracker_sparql_builder_object_blank_open (metadata); /* GeoLocation */
- tracker_sparql_builder_predicate (metadata, "a");
- tracker_sparql_builder_object (metadata, "slo:GeoLocation");
-
- if (xd->address || xd->state || xd->country || xd->city) {
- gchar *addruri;
-
- addruri = tracker_sparql_get_uuid_urn ();
-
- tracker_sparql_builder_predicate (metadata, "slo:postalAddress");
- tracker_sparql_builder_object_iri (metadata, addruri);
-
- tracker_sparql_builder_insert_open (preupdate, NULL);
- if (graph) {
- tracker_sparql_builder_graph_open (preupdate, graph);
- }
-
- tracker_sparql_builder_subject_iri (preupdate, addruri);
-
- g_free (addruri);
-
- tracker_sparql_builder_predicate (preupdate, "a");
- tracker_sparql_builder_object (preupdate, "nco:PostalAddress");
-
- if (xd->address) {
- tracker_sparql_builder_predicate (preupdate, "nco:streetAddress");
- tracker_sparql_builder_object_unvalidated (preupdate, xd->address);
- }
-
- if (xd->state) {
- tracker_sparql_builder_predicate (preupdate, "nco:region");
- tracker_sparql_builder_object_unvalidated (preupdate, xd->state);
- }
-
- if (xd->city) {
- tracker_sparql_builder_predicate (preupdate, "nco:locality");
- tracker_sparql_builder_object_unvalidated (preupdate, xd->city);
- }
-
- if (xd->country) {
- tracker_sparql_builder_predicate (preupdate, "nco:country");
- tracker_sparql_builder_object_unvalidated (preupdate, xd->country);
- }
-
- if (graph) {
- tracker_sparql_builder_graph_close (preupdate);
- }
- tracker_sparql_builder_insert_close (preupdate);
- }
+ TrackerResource *location = tracker_extract_new_location (xd->address,
+ xd->state, xd->city, xd->country, xd->gps_altitude,
+ xd->gps_latitude, xd-> gps_longitude);
+
+ tracker_resource_set_relation (metadata, "slo:location", location);
- if (xd->gps_altitude) {
- tracker_sparql_builder_predicate (metadata, "slo:altitude");
- tracker_sparql_builder_object_unvalidated (metadata, xd->gps_altitude);
- }
-
- if (xd->gps_latitude) {
- tracker_sparql_builder_predicate (metadata, "slo:latitude");
- tracker_sparql_builder_object_unvalidated (metadata, xd->gps_latitude);
- }
-
- if (xd->gps_longitude) {
- tracker_sparql_builder_predicate (metadata, "slo:longitude");
- tracker_sparql_builder_object_unvalidated (metadata, xd->gps_longitude);
- }
-
- tracker_sparql_builder_object_blank_close (metadata); /* GeoLocation */
+ g_object_unref (location);
}
if (xd->gps_direction) {
- tracker_sparql_builder_predicate (metadata, "nfo:heading");
- tracker_sparql_builder_object_unvalidated (metadata, xd->gps_direction);
+ tracker_resource_set_string(metadata, "nfo:heading", xd->gps_direction);
}
if (ed->x_resolution) {
gdouble value;
value = ed->resolution_unit != 3 ? g_strtod (ed->x_resolution, NULL) : g_strtod (ed->x_resolution, NULL) * CM_TO_INCH;
- tracker_sparql_builder_predicate (metadata, "nfo:horizontalResolution");
- tracker_sparql_builder_object_double (metadata, value);
+ tracker_resource_set_double (metadata, "nfo:horizontalResolution", value);
}
if (ed->y_resolution) {
gdouble value;
value = ed->resolution_unit != 3 ? g_strtod (ed->y_resolution, NULL) : g_strtod (ed->y_resolution, NULL) * CM_TO_INCH;
- tracker_sparql_builder_predicate (metadata, "nfo:verticalResolution");
- tracker_sparql_builder_object_double (metadata, value);
+ tracker_resource_set_double (metadata, "nfo:verticalResolution", value);
}
if (xd->regions) {
- tracker_xmp_apply_regions (preupdate, metadata, graph, xd);
+ tracker_xmp_apply_regions_to_resource (metadata, xd);
}
for (i = 0; i < keywords->len; i++) {
- gchar *escaped, *subject;
+ TrackerResource *tag;
const gchar *p;
p = g_ptr_array_index (keywords, i);
- escaped = tracker_sparql_escape_string (p);
- subject = g_strdup_printf ("_:tag%d", i + 1);
-
- /* ensure tag with specified label exists */
- tracker_sparql_builder_insert_open (preupdate, graph);
- tracker_sparql_builder_subject (preupdate, subject);
- tracker_sparql_builder_predicate (preupdate, "a");
- tracker_sparql_builder_object (preupdate, "nao:Tag");
- tracker_sparql_builder_predicate (preupdate, "nao:prefLabel");
- tracker_sparql_builder_object_unvalidated (preupdate, escaped);
- tracker_sparql_builder_insert_close (preupdate);
- tracker_sparql_builder_append (preupdate,
- "WHERE { FILTER (NOT EXISTS { "
- "?tag a nao:Tag ; nao:prefLabel \"");
- tracker_sparql_builder_append (preupdate, escaped);
- tracker_sparql_builder_append (preupdate,
- "\" }) }\n");
-
- /* associate file with tag */
- tracker_sparql_builder_insert_open (preupdate, graph);
- tracker_sparql_builder_subject_iri (preupdate, urn);
- tracker_sparql_builder_predicate (preupdate, "nao:hasTag");
- tracker_sparql_builder_object (preupdate, "?tag");
- tracker_sparql_builder_insert_close (preupdate);
- tracker_sparql_builder_where_open (preupdate);
- tracker_sparql_builder_subject (preupdate, "?tag");
- tracker_sparql_builder_predicate (preupdate, "a");
- tracker_sparql_builder_object (preupdate, "nao:Tag");
- tracker_sparql_builder_predicate (preupdate, "nao:prefLabel");
- tracker_sparql_builder_object_unvalidated (preupdate, escaped);
- tracker_sparql_builder_where_close (preupdate);
-
- g_free (subject);
- g_free (escaped);
+
+ tag = tracker_extract_new_tag (p);
+
+ tracker_resource_set_relation (metadata, "nao:hasTag", tag);
+
+ g_object_unref (tag);
}
g_ptr_array_free (keywords, TRUE);
if (g_strcmp0(pd.software, "gnome-screenshot") == 0) {
- tracker_sparql_builder_predicate (metadata, "nie:isPartOf");
- tracker_sparql_builder_object (metadata, "nfo:image-category-screenshot");
+ tracker_resource_set_string (metadata, "nie:isPartOf", "nfo:image-category-screenshot");
}
tracker_exif_free (ed);
@@ -783,6 +591,7 @@ guess_dlna_profile (gint depth,
G_MODULE_EXPORT gboolean
tracker_extract_get_metadata (TrackerExtractInfo *info)
{
+ TrackerResource *metadata;
goffset size;
FILE *f;
png_structp png_ptr;
@@ -793,8 +602,7 @@ tracker_extract_get_metadata (TrackerExtractInfo *info)
png_uint_32 width, height;
gint bit_depth, color_type;
gint interlace_type, compression_type, filter_type;
- const gchar *dlna_profile, *dlna_mimetype, *graph, *urn;
- TrackerSparqlBuilder *preupdate, *metadata;
+ const gchar *dlna_profile, *dlna_mimetype;
gchar *filename, *uri;
GFile *file;
@@ -802,11 +610,6 @@ tracker_extract_get_metadata (TrackerExtractInfo *info)
filename = g_file_get_path (file);
size = tracker_file_get_size (filename);
- preupdate = tracker_extract_info_get_preupdate_builder (info);
- metadata = tracker_extract_info_get_metadata_builder (info);
- graph = tracker_extract_info_get_graph (info);
- urn = tracker_extract_info_get_urn (info);
-
if (size < 64) {
return FALSE;
}
@@ -884,30 +687,29 @@ tracker_extract_get_metadata (TrackerExtractInfo *info)
png_read_end (png_ptr, end_ptr);
- tracker_sparql_builder_predicate (metadata, "a");
- tracker_sparql_builder_object (metadata, "nfo:Image");
- tracker_sparql_builder_object (metadata, "nmm:Photo");
+ metadata = tracker_resource_new (NULL);
+
+ tracker_resource_add_uri (metadata, "rdf:type", "nfo:Image");
+ tracker_resource_add_uri (metadata, "rdf:type", "nmm:Photo");
uri = g_file_get_uri (file);
- read_metadata (preupdate, metadata, png_ptr, info_ptr, end_ptr, uri, graph, urn);
+ read_metadata (metadata, png_ptr, info_ptr, end_ptr, uri);
g_free (uri);
- tracker_sparql_builder_predicate (metadata, "nfo:width");
- tracker_sparql_builder_object_int64 (metadata, width);
-
- tracker_sparql_builder_predicate (metadata, "nfo:height");
- tracker_sparql_builder_object_int64 (metadata, height);
+ tracker_resource_set_int64 (metadata, "nfo:width", width);
+ tracker_resource_set_int64 (metadata, "nfo:height", height);
if (guess_dlna_profile (bit_depth, width, height, &dlna_profile, &dlna_mimetype)) {
- tracker_sparql_builder_predicate (metadata, "nmm:dlnaProfile");
- tracker_sparql_builder_object_string (metadata, dlna_profile);
- tracker_sparql_builder_predicate (metadata, "nmm:dlnaMime");
- tracker_sparql_builder_object_string (metadata, dlna_mimetype);
+ tracker_resource_set_string (metadata, "nmm:dlnaProfile", dlna_profile);
+ tracker_resource_set_string (metadata, "nmm:dlnaMime", dlna_mimetype);
}
png_destroy_read_struct (&png_ptr, &info_ptr, &end_ptr);
tracker_file_close (f, FALSE);
+ tracker_extract_info_set_resource (info, metadata);
+ g_object_unref (metadata);
+
return TRUE;
}