summaryrefslogtreecommitdiff
path: root/src/tracker-extract/tracker-extract-gif.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/tracker-extract/tracker-extract-gif.c')
-rw-r--r--src/tracker-extract/tracker-extract-gif.c348
1 files changed, 79 insertions, 269 deletions
diff --git a/src/tracker-extract/tracker-extract-gif.c b/src/tracker-extract/tracker-extract-gif.c
index 27ee3162a..8e9619965 100644
--- a/src/tracker-extract/tracker-extract-gif.c
+++ b/src/tracker-extract/tracker-extract-gif.c
@@ -102,14 +102,11 @@ static inline void print_gif_error()
#define DGifCloseFile(a, b) DGifCloseFile(a)
#endif
-static void
-read_metadata (TrackerSparqlBuilder *preupdate,
- TrackerSparqlBuilder *metadata,
- GifFileType *gifFile,
- const gchar *uri,
- const gchar *graph,
- const gchar *urn)
+static TrackerResource *
+read_metadata (GifFileType *gifFile,
+ const gchar *uri)
{
+ TrackerResource *metadata;
GifRecordType RecordType;
int frameheight;
int framewidth;
@@ -133,7 +130,7 @@ read_metadata (TrackerSparqlBuilder *preupdate,
#else /* GIFLIB_MAJOR < 5 */
gif_error ("Could not read next GIF record type", gifFile->Error);
#endif /* GIFLIB_MAJOR < 5 */
- return;
+ return NULL;
}
switch (RecordType) {
@@ -144,7 +141,7 @@ read_metadata (TrackerSparqlBuilder *preupdate,
#else /* GIFLIB_MAJOR < 5 */
gif_error ("Could not get GIF record information", gifFile->Error);
#endif /* GIFLIB_MAJOR < 5 */
- return;
+ return NULL;
}
framewidth = gifFile->Image.Width;
@@ -159,7 +156,7 @@ read_metadata (TrackerSparqlBuilder *preupdate,
#else /* GIFLIB_MAJOR < 5 */
gif_error ("Could not load a block of GIF pixes", gifFile->Error);
#endif /* GIFLIB_MAJOR < 5 */
- return;
+ return NULL;
}
}
@@ -176,7 +173,7 @@ read_metadata (TrackerSparqlBuilder *preupdate,
if ((status = DGifGetExtension (gifFile, &ExtCode, &ExtData)) != GIF_OK) {
g_warning ("Problem getting the extension");
- return;
+ return NULL;
}
#if defined(HAVE_EXEMPI)
if (ExtData && *ExtData &&
@@ -186,7 +183,7 @@ read_metadata (TrackerSparqlBuilder *preupdate,
if (ExtData != NULL) {
if (ext_block_append (&extBlock, ExtData[0]+1, (char *) &(ExtData[0])) != GIF_OK) {
g_warning ("Problem with extension data");
- return;
+ return NULL;
}
}
}
@@ -213,7 +210,7 @@ read_metadata (TrackerSparqlBuilder *preupdate,
ExtData[0]);
if (ext_block_append (&extBlock, ExtData[0], (char *) &(ExtData[1])) != GIF_OK) {
g_warning ("Problem with Comment extension data");
- return;
+ return NULL;
}
} while (((status = DGifGetExtensionNext(gifFile, &ExtData)) == GIF_OK) &&
ExtData != NULL);
@@ -249,153 +246,86 @@ read_metadata (TrackerSparqlBuilder *preupdate,
md.date = tracker_coalesce_strip (2, xd->date, xd->time_original);
md.artist = tracker_coalesce_strip (2, xd->artist, xd->contributor);
+ metadata = tracker_resource_new (NULL);
+ tracker_resource_add_uri (metadata, "rdf:type", "nfo:Image");
+ tracker_resource_add_uri (metadata, "rdf:type", "nmm:Photo");
+
if (xd->license) {
- tracker_sparql_builder_predicate (metadata, "nie:license");
- tracker_sparql_builder_object_unvalidated (metadata, xd->license);
+ tracker_resource_set_string (metadata, "nie:license", xd->license);
}
if (xd->creator) {
- gchar *uri = tracker_sparql_escape_uri_printf ("urn:contact:%s", xd->creator);
-
- tracker_sparql_builder_insert_open (preupdate, NULL);
- if (graph) {
- tracker_sparql_builder_graph_open (preupdate, graph);
- }
+ TrackerResource *creator = tracker_extract_new_contact (xd->creator);
- 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->creator);
+ tracker_resource_set_relation (metadata, "nco:creator", creator);
- if (graph) {
- tracker_sparql_builder_graph_close (preupdate);
- }
- tracker_sparql_builder_insert_close (preupdate);
-
- 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 (xd->description) {
- tracker_sparql_builder_predicate (metadata, "nie:description");
- tracker_sparql_builder_object_unvalidated (metadata, xd->description);
+ tracker_resource_set_string (metadata, "nie:description", xd->description);
}
if (xd->copyright) {
- tracker_sparql_builder_predicate (metadata, "nie:copyright");
- tracker_sparql_builder_object_unvalidated (metadata, xd->copyright);
+ tracker_resource_set_string (metadata, "nie:copyright", xd->copyright);
}
if (xd->make || xd->model) {
- gchar *equip_uri;
-
- equip_uri = tracker_sparql_escape_uri_printf ("urn:equipment:%s:%s:",
- xd->make ? xd->make : "",
- xd->model ? xd->model : "");
-
- tracker_sparql_builder_insert_open (preupdate, NULL);
- if (graph) {
- tracker_sparql_builder_graph_open (preupdate, graph);
- }
-
- tracker_sparql_builder_subject_iri (preupdate, equip_uri);
- tracker_sparql_builder_predicate (preupdate, "a");
- tracker_sparql_builder_object (preupdate, "nfo:Equipment");
+ TrackerResource *equipment = tracker_extract_new_equipment (xd->make, xd->model);
- if (xd->make) {
- tracker_sparql_builder_predicate (preupdate, "nfo:manufacturer");
- tracker_sparql_builder_object_unvalidated (preupdate, xd->make);
- }
- if (xd->model) {
- tracker_sparql_builder_predicate (preupdate, "nfo:model");
- tracker_sparql_builder_object_unvalidated (preupdate, xd->model);
- }
+ tracker_resource_set_relation (metadata, "nfo:equipment", equipment);
- 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);
}
- 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.artist) {
- gchar *uri = tracker_sparql_escape_uri_printf ("urn:contact:%s", md.artist);
+ TrackerResource *artist = tracker_extract_new_contact (xd->creator);
- tracker_sparql_builder_insert_open (preupdate, NULL);
- if (graph) {
- tracker_sparql_builder_graph_open (preupdate, graph);
- }
+ tracker_resource_add_relation (metadata, "nco:contributor", 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);
-
- 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 (xd->orientation) {
- tracker_sparql_builder_predicate (metadata, "nfo:orientation");
- tracker_sparql_builder_object_unvalidated (metadata, xd->orientation);
+ tracker_resource_set_string (metadata, "nfo:orientation", xd->orientation);
}
if (xd->exposure_time) {
- tracker_sparql_builder_predicate (metadata, "nmm:exposureTime");
- tracker_sparql_builder_object_unvalidated (metadata, xd->exposure_time);
+ tracker_resource_set_string (metadata, "nmm:exposureTime", xd->exposure_time);
}
if (xd->iso_speed_ratings) {
- tracker_sparql_builder_predicate (metadata, "nmm:isoSpeed");
- tracker_sparql_builder_object_unvalidated (metadata, xd->iso_speed_ratings);
+ tracker_resource_set_string (metadata, "nmm:isoSpeed", xd->iso_speed_ratings);
}
if (xd->white_balance) {
- tracker_sparql_builder_predicate (metadata, "nmm:whiteBalance");
- tracker_sparql_builder_object_unvalidated (metadata, xd->white_balance);
+ tracker_resource_set_string (metadata, "nmm:whiteBalance", xd->white_balance);
}
if (xd->fnumber) {
- tracker_sparql_builder_predicate (metadata, "nmm:fnumber");
- tracker_sparql_builder_object_unvalidated (metadata, xd->fnumber);
+ tracker_resource_set_string (metadata, "nmm:fnumber", xd->fnumber);
}
if (xd->flash) {
- tracker_sparql_builder_predicate (metadata, "nmm:flash");
- tracker_sparql_builder_object_unvalidated (metadata, xd->flash);
- }
+ tracker_resource_set_string (metadata, "nmm:flash", xd->flash); }
if (xd->focal_length) {
- tracker_sparql_builder_predicate (metadata, "nmm:focalLength");
- tracker_sparql_builder_object_unvalidated (metadata, xd->focal_length);
+ tracker_resource_set_string (metadata, "nmm:focalLength", xd->focal_length);
}
if (xd->metering_mode) {
- tracker_sparql_builder_predicate (metadata, "nmm:meteringMode");
- tracker_sparql_builder_object_unvalidated (metadata, xd->metering_mode);
+ tracker_resource_set_string (metadata, "nmm:meteringMode", xd->metering_mode);
}
keywords = g_ptr_array_new_with_free_func ((GDestroyNotify) g_free);
@@ -409,8 +339,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) {
@@ -418,216 +347,101 @@ read_metadata (TrackerSparqlBuilder *preupdate,
}
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 (xd->publisher) {
- gchar *uri = tracker_sparql_escape_uri_printf ("urn:contact:%s", xd->publisher);
+ TrackerResource *publisher = tracker_extract_new_contact (xd->creator);
- tracker_sparql_builder_insert_open (preupdate, NULL);
- if (graph) {
- tracker_sparql_builder_graph_open (preupdate, graph);
- }
+ tracker_resource_add_relation (metadata, "nco:creator", publisher);
- 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_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");
+ TrackerResource *location = tracker_extract_new_location (xd->address,
+ xd->state, xd->city, xd->country, xd->gps_altitude,
+ xd->gps_latitude, xd->gps_longitude);
- tracker_sparql_builder_object_blank_open (metadata); /* GeoLocation */
- tracker_sparql_builder_predicate (metadata, "a");
- tracker_sparql_builder_object (metadata, "slo:GeoLocation");
+ tracker_resource_set_relation (metadata, "slo:location", location);
- 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);
- }
-
- 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 (gd.width) {
- tracker_sparql_builder_predicate (metadata, "nfo:width");
- tracker_sparql_builder_object_unvalidated (metadata, gd.width);
+ tracker_resource_set_string (metadata, "nfo:width", gd.width);
g_free (gd.width);
}
if (gd.height) {
- tracker_sparql_builder_predicate (metadata, "nfo:height");
- tracker_sparql_builder_object_unvalidated (metadata, gd.height);
+ tracker_resource_set_string (metadata, "nfo:height", gd.height);
g_free (gd.height);
}
if (gd.comment) {
- tracker_sparql_builder_predicate (metadata, "nie:comment");
- tracker_sparql_builder_object_unvalidated (metadata, gd.comment);
+ tracker_resource_set_string (metadata, "nie:comment", gd.comment);
g_free (gd.comment);
}
tracker_xmp_free (xd);
+
+ return metadata;
}
G_MODULE_EXPORT gboolean
tracker_extract_get_metadata (TrackerExtractInfo *info)
{
- TrackerSparqlBuilder *preupdate, *metadata;
+ TrackerResource *metadata;
goffset size;
GifFileType *gifFile = NULL;
- const gchar *graph, *urn;
gchar *filename, *uri;
GFile *file;
int fd;
@@ -635,11 +449,6 @@ tracker_extract_get_metadata (TrackerExtractInfo *info)
int err;
#endif
- 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);
-
file = tracker_extract_info_get_file (info);
filename = g_file_get_path (file);
size = tracker_file_get_size (filename);
@@ -673,13 +482,9 @@ tracker_extract_get_metadata (TrackerExtractInfo *info)
g_free (filename);
- tracker_sparql_builder_predicate (metadata, "a");
- tracker_sparql_builder_object (metadata, "nfo:Image");
- tracker_sparql_builder_object (metadata, "nmm:Photo");
-
uri = g_file_get_uri (file);
- read_metadata (preupdate, metadata, gifFile, uri, graph, urn);
+ metadata = read_metadata (gifFile, uri);
g_free (uri);
@@ -691,5 +496,10 @@ tracker_extract_get_metadata (TrackerExtractInfo *info)
#endif /* GIFLIB_MAJOR < 5 */
}
+ if (metadata) {
+ tracker_extract_info_set_resource (info, metadata);
+ g_object_unref (metadata);
+ }
+
return TRUE;
}