summaryrefslogtreecommitdiff
path: root/src/tracker-extract/tracker-extract-vorbis.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/tracker-extract/tracker-extract-vorbis.c')
-rw-r--r--src/tracker-extract/tracker-extract-vorbis.c279
1 files changed, 51 insertions, 228 deletions
diff --git a/src/tracker-extract/tracker-extract-vorbis.c b/src/tracker-extract/tracker-extract-vorbis.c
index 0dfdaecae..9c2b77831 100644
--- a/src/tracker-extract/tracker-extract-vorbis.c
+++ b/src/tracker-extract/tracker-extract-vorbis.c
@@ -37,8 +37,8 @@
#include <libtracker-extract/tracker-extract.h>
typedef struct {
- const gchar *creator;
- gchar *creator_uri;
+ const gchar *creator_name;
+ TrackerResource *creator;
} MergeData;
typedef struct {
@@ -93,7 +93,7 @@ ogg_get_comment (vorbis_comment *vc,
G_MODULE_EXPORT gboolean
tracker_extract_get_metadata (TrackerExtractInfo *info)
{
- TrackerSparqlBuilder *preupdate, *metadata;
+ TrackerResource *metadata;
VorbisData vd = { 0 };
MergeData md = { 0 };
FILE *f;
@@ -104,17 +104,12 @@ tracker_extract_get_metadata (TrackerExtractInfo *info)
unsigned int bitrate;
gint time;
GFile *file;
- const gchar *graph;
file = tracker_extract_info_get_file (info);
filename = g_file_get_path (file);
f = tracker_file_open (filename);
g_free (filename);
- preupdate = tracker_extract_info_get_preupdate_builder (info);
- metadata = tracker_extract_info_get_metadata_builder (info);
- graph = tracker_extract_info_get_graph (info);
-
if (!f) {
return FALSE;
}
@@ -124,9 +119,9 @@ tracker_extract_get_metadata (TrackerExtractInfo *info)
return FALSE;
}
- tracker_sparql_builder_predicate (metadata, "a");
- tracker_sparql_builder_object (metadata, "nmm:MusicPiece");
- tracker_sparql_builder_object (metadata, "nfo:Audio");
+ metadata = tracker_resource_new (NULL);
+ tracker_resource_add_uri (metadata, "rdf:type", "nmm:MusicPiece");
+ tracker_resource_add_uri (metadata, "rdf:type", "nfo:Audio");
if ((comment = ov_comment (&vf, -1)) != NULL) {
gchar *date;
@@ -170,207 +165,50 @@ tracker_extract_get_metadata (TrackerExtractInfo *info)
vorbis_comment_clear (comment);
}
- md.creator = tracker_coalesce_strip (3, vd.artist, vd.album_artist, vd.performer);
-
- if (md.creator) {
- /* NOTE: This must be created before vd.album is evaluated */
- md.creator_uri = tracker_sparql_escape_uri_printf ("urn:artist:%s", md.creator);
+ md.creator_name = tracker_coalesce_strip (3, vd.artist, vd.album_artist, vd.performer);
- tracker_sparql_builder_insert_open (preupdate, NULL);
- if (graph) {
- tracker_sparql_builder_graph_open (preupdate, graph);
- }
+ if (md.creator_name) {
+ md.creator = tracker_extract_new_artist (md.creator_name);
- tracker_sparql_builder_subject_iri (preupdate, md.creator_uri);
- tracker_sparql_builder_predicate (preupdate, "a");
- tracker_sparql_builder_object (preupdate, "nmm:Artist");
- tracker_sparql_builder_predicate (preupdate, "nmm:artistName");
- tracker_sparql_builder_object_unvalidated (preupdate, md.creator);
-
- if (graph) {
- tracker_sparql_builder_graph_close (preupdate);
- }
- tracker_sparql_builder_insert_close (preupdate);
-
- tracker_sparql_builder_predicate (metadata, "nmm:performer");
- tracker_sparql_builder_object_iri (metadata, md.creator_uri);
+ tracker_resource_set_relation (metadata, "nmm:performer", md.creator);
}
if (vd.album) {
- gchar *uri;
- if (vd.album_artist) {
- uri = tracker_sparql_escape_uri_printf ("urn:album:%s:%s", vd.album, vd.album_artist);
- } else {
- uri = tracker_sparql_escape_uri_printf ("urn:album:%s", vd.album);
- }
- gchar *album_disc_uri;
-
- tracker_sparql_builder_insert_open (preupdate, NULL);
- if (graph) {
- tracker_sparql_builder_graph_open (preupdate, graph);
+ TrackerResource *album, *album_disc, *album_artist;
+
+ if (vd.album_artist) {
+ album_artist = tracker_extract_new_artist (vd.album_artist);
+ } else if (md.creator) {
+ album_artist = g_object_ref (md.creator);
+ } else {
+ album_artist = NULL;
}
- tracker_sparql_builder_subject_iri (preupdate, uri);
- tracker_sparql_builder_predicate (preupdate, "a");
- tracker_sparql_builder_object (preupdate, "nmm:MusicAlbum");
- /* FIXME: nmm:albumTitle is now deprecated
- * tracker_sparql_builder_predicate (preupdate, "nie:title");
- */
- tracker_sparql_builder_predicate (preupdate, "nmm:albumTitle");
- tracker_sparql_builder_object_unvalidated (preupdate, vd.album);
-
- if (md.creator_uri) {
- tracker_sparql_builder_predicate (preupdate, "nmm:albumArtist");
- tracker_sparql_builder_object_iri (preupdate, md.creator_uri);
- }
+ album_disc = tracker_extract_new_music_album_disc (vd.album,
+ album_artist,
+ vd.disc_number ? atoi(vd.disc_number) : 1);
+
+ g_object_unref (album_artist);
+
+ album = tracker_resource_get_first_relation (album_disc, "nmm:albumDiscAlbum");
- if (graph) {
- tracker_sparql_builder_graph_close (preupdate);
- }
- tracker_sparql_builder_insert_close (preupdate);
if (vd.track_count) {
- tracker_sparql_builder_delete_open (preupdate, NULL);
- tracker_sparql_builder_subject_iri (preupdate, uri);
- tracker_sparql_builder_predicate (preupdate, "nmm:albumTrackCount");
- tracker_sparql_builder_object_variable (preupdate, "unknown");
- tracker_sparql_builder_delete_close (preupdate);
-
- tracker_sparql_builder_where_open (preupdate);
- tracker_sparql_builder_subject_iri (preupdate, uri);
- tracker_sparql_builder_predicate (preupdate, "nmm:albumTrackCount");
- tracker_sparql_builder_object_variable (preupdate, "unknown");
- tracker_sparql_builder_where_close (preupdate);
-
- 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, "nmm:albumTrackCount");
- tracker_sparql_builder_object_unvalidated (preupdate, vd.track_count);
-
- if (graph) {
- tracker_sparql_builder_graph_close (preupdate);
- }
- tracker_sparql_builder_insert_close (preupdate);
+ tracker_resource_set_string (album, "nmm:albumTrackCount", vd.track_count);
}
if (vd.album_gain) {
- tracker_sparql_builder_delete_open (preupdate, NULL);
- tracker_sparql_builder_subject_iri (preupdate, uri);
- tracker_sparql_builder_predicate (preupdate, "nmm:albumGain");
- tracker_sparql_builder_object_variable (preupdate, "unknown");
- tracker_sparql_builder_delete_close (preupdate);
-
- tracker_sparql_builder_where_open (preupdate);
- tracker_sparql_builder_subject_iri (preupdate, uri);
- tracker_sparql_builder_predicate (preupdate, "nmm:albumGain");
- tracker_sparql_builder_object_variable (preupdate, "unknown");
- tracker_sparql_builder_where_close (preupdate);
-
- 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, "nmm:albumGain");
- tracker_sparql_builder_object_double (preupdate, atof (vd.album_gain));
-
- if (graph) {
- tracker_sparql_builder_graph_close (preupdate);
- }
- tracker_sparql_builder_insert_close (preupdate);
+ tracker_resource_set_double (album, "nmm:albumGain", atof (vd.album_gain));
}
if (vd.album_peak_gain) {
- tracker_sparql_builder_delete_open (preupdate, NULL);
- tracker_sparql_builder_subject_iri (preupdate, uri);
- tracker_sparql_builder_predicate (preupdate, "nmm:albumPeakGain");
- tracker_sparql_builder_object_variable (preupdate, "unknown");
- tracker_sparql_builder_delete_close (preupdate);
-
- tracker_sparql_builder_where_open (preupdate);
- tracker_sparql_builder_subject_iri (preupdate, uri);
- tracker_sparql_builder_predicate (preupdate, "nmm:albumPeakGain");
- tracker_sparql_builder_object_variable (preupdate, "unknown");
- tracker_sparql_builder_where_close (preupdate);
-
- 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, "nmm:albumPeakGain");
- tracker_sparql_builder_object_double (preupdate, atof (vd.album_peak_gain));
-
- if (graph) {
- tracker_sparql_builder_graph_close (preupdate);
- }
- tracker_sparql_builder_insert_close (preupdate);
- }
-
- if (vd.album_artist) {
- album_disc_uri = tracker_sparql_escape_uri_printf ("urn:album-disc:%s:%s:Disc%d",
- vd.album, vd.album_artist,
- vd.disc_number ? atoi(vd.disc_number) : 1);
- } else {
- album_disc_uri = tracker_sparql_escape_uri_printf ("urn:album-disc:%s:Disc%d",
- vd.album,
- vd.disc_number ? atoi(vd.disc_number) : 1);
- }
-
- tracker_sparql_builder_delete_open (preupdate, NULL);
- tracker_sparql_builder_subject_iri (preupdate, album_disc_uri);
- tracker_sparql_builder_predicate (preupdate, "nmm:setNumber");
- tracker_sparql_builder_object_variable (preupdate, "unknown");
- tracker_sparql_builder_delete_close (preupdate);
- tracker_sparql_builder_where_open (preupdate);
- tracker_sparql_builder_subject_iri (preupdate, album_disc_uri);
- tracker_sparql_builder_predicate (preupdate, "nmm:setNumber");
- tracker_sparql_builder_object_variable (preupdate, "unknown");
- tracker_sparql_builder_where_close (preupdate);
-
- tracker_sparql_builder_delete_open (preupdate, NULL);
- tracker_sparql_builder_subject_iri (preupdate, album_disc_uri);
- tracker_sparql_builder_predicate (preupdate, "nmm:albumDiscAlbum");
- tracker_sparql_builder_object_variable (preupdate, "unknown");
- tracker_sparql_builder_delete_close (preupdate);
- tracker_sparql_builder_where_open (preupdate);
- tracker_sparql_builder_subject_iri (preupdate, album_disc_uri);
- tracker_sparql_builder_predicate (preupdate, "nmm:albumDiscAlbum");
- tracker_sparql_builder_object_variable (preupdate, "unknown");
- tracker_sparql_builder_where_close (preupdate);
-
- tracker_sparql_builder_insert_open (preupdate, NULL);
- if (graph) {
- tracker_sparql_builder_graph_open (preupdate, graph);
- }
-
- tracker_sparql_builder_subject_iri (preupdate, album_disc_uri);
- tracker_sparql_builder_predicate (preupdate, "a");
- tracker_sparql_builder_object (preupdate, "nmm:MusicAlbumDisc");
- tracker_sparql_builder_predicate (preupdate, "nmm:setNumber");
- tracker_sparql_builder_object_int64 (preupdate, vd.disc_number ? atoi (vd.disc_number) : 1);
- tracker_sparql_builder_predicate (preupdate, "nmm:albumDiscAlbum");
- tracker_sparql_builder_object_iri (preupdate, uri);
-
- if (graph) {
- tracker_sparql_builder_graph_close (preupdate);
+ tracker_resource_set_double (album, "nmm:albumPeakGain", atof (vd.album_peak_gain));
}
- tracker_sparql_builder_insert_close (preupdate);
- tracker_sparql_builder_predicate (metadata, "nmm:musicAlbumDisc");
- tracker_sparql_builder_object_iri (metadata, album_disc_uri);
+ tracker_resource_set_relation (metadata, "nmm:musicAlbum", album);
+ tracker_resource_set_relation (metadata, "nmm:musicAlbumDisc", album_disc);
- g_free (album_disc_uri);
-
- tracker_sparql_builder_predicate (metadata, "nmm:musicAlbum");
- tracker_sparql_builder_object_iri (metadata, uri);
- g_free (uri);
+ g_object_unref (album_disc);
}
g_free (vd.track_count);
@@ -379,14 +217,12 @@ tracker_extract_get_metadata (TrackerExtractInfo *info)
g_free (vd.disc_number);
if (vd.title) {
- tracker_sparql_builder_predicate (metadata, "nie:title");
- tracker_sparql_builder_object_unvalidated (metadata, vd.title);
+ tracker_resource_set_string (metadata, "nie:title", vd.title);
g_free (vd.title);
}
if (vd.track_number) {
- tracker_sparql_builder_predicate (metadata, "nmm:trackNumber");
- tracker_sparql_builder_object_unvalidated (metadata, vd.track_number);
+ tracker_resource_set_string (metadata, "nmm:trackNumber", vd.track_number);
g_free (vd.track_number);
}
@@ -401,26 +237,22 @@ tracker_extract_get_metadata (TrackerExtractInfo *info)
}
if (vd.comment) {
- tracker_sparql_builder_predicate (metadata, "nie:comment");
- tracker_sparql_builder_object_unvalidated (metadata, vd.comment);
+ tracker_resource_set_string (metadata, "nie:comment", vd.comment);
g_free (vd.comment);
}
if (vd.date) {
- tracker_sparql_builder_predicate (metadata, "nie:contentCreated");
- tracker_sparql_builder_object_unvalidated (metadata, vd.date);
+ tracker_resource_set_string (metadata, "nie:contentCreated", vd.date);
g_free (vd.date);
}
if (vd.genre) {
- tracker_sparql_builder_predicate (metadata, "nfo:genre");
- tracker_sparql_builder_object_unvalidated (metadata, vd.genre);
+ tracker_resource_set_string (metadata, "nfo:genre", vd.genre);
g_free (vd.genre);
}
if (vd.codec) {
- tracker_sparql_builder_predicate (metadata, "nfo:codec");
- tracker_sparql_builder_object_unvalidated (metadata, vd.codec);
+ tracker_resource_set_string (metadata, "nfo:codec", vd.codec);
g_free (vd.codec);
}
@@ -430,14 +262,12 @@ tracker_extract_get_metadata (TrackerExtractInfo *info)
}
if (vd.sample_rate) {
- tracker_sparql_builder_predicate (metadata, "nfo:sampleRate");
- tracker_sparql_builder_object_unvalidated (metadata, vd.sample_rate);
+ tracker_resource_set_string (metadata, "nfo:sampleRate", vd.sample_rate);
g_free (vd.sample_rate);
}
if (vd.channels) {
- tracker_sparql_builder_predicate (metadata, "nfo:channels");
- tracker_sparql_builder_object_unvalidated (metadata, vd.channels);
+ tracker_resource_set_string (metadata, "nfo:channels", vd.channels);
g_free (vd.channels);
}
@@ -462,20 +292,17 @@ tracker_extract_get_metadata (TrackerExtractInfo *info)
}
if (vd.lyrics) {
- tracker_sparql_builder_predicate (metadata, "nie:plainTextContent");
- tracker_sparql_builder_object_unvalidated (metadata, vd.lyrics);
+ tracker_resource_set_string (metadata, "nie:plainTextContent", vd.lyrics);
g_free (vd.lyrics);
}
if (vd.copyright) {
- tracker_sparql_builder_predicate (metadata, "nie:copyright");
- tracker_sparql_builder_object_unvalidated (metadata, vd.copyright);
+ tracker_resource_set_string (metadata, "nie:copyright", vd.copyright);
g_free (vd.copyright);
}
if (vd.license) {
- tracker_sparql_builder_predicate (metadata, "nie:license");
- tracker_sparql_builder_object_unvalidated (metadata, vd.license);
+ tracker_resource_set_string (metadata, "nie:license", vd.license);
g_free (vd.license);
}
@@ -490,29 +317,22 @@ tracker_extract_get_metadata (TrackerExtractInfo *info)
}
if (vd.publisher) {
- tracker_sparql_builder_predicate (metadata, "dc:publisher");
+ TrackerResource *publisher = tracker_extract_new_contact (vd.publisher);
- tracker_sparql_builder_object_blank_open (metadata);
- tracker_sparql_builder_predicate (metadata, "a");
- tracker_sparql_builder_object (metadata, "nco:Contact");
+ tracker_resource_set_relation (metadata, "dc:publisher", publisher);
- tracker_sparql_builder_predicate (metadata, "nco:fullname");
- tracker_sparql_builder_object_unvalidated (metadata, vd.publisher);
- tracker_sparql_builder_object_blank_close (metadata);
- g_free (vd.publisher);
+ g_object_unref (publisher);
}
if ((vi = ov_info (&vf, 0)) != NULL ) {
bitrate = vi->bitrate_nominal / 1000;
- tracker_sparql_builder_predicate (metadata, "nfo:averageBitrate");
- tracker_sparql_builder_object_int64 (metadata, (gint64) bitrate);
+ tracker_resource_set_int64 (metadata, "nfo:averageBitrate", (gint64) bitrate);
}
/* Duration */
if ((time = ov_time_total (&vf, -1)) != OV_EINVAL) {
- tracker_sparql_builder_predicate (metadata, "nfo:duration");
- tracker_sparql_builder_object_int64 (metadata, (gint64) time);
+ tracker_resource_set_int64 (metadata, "nfo:duration", (gint64) time);
}
#ifdef HAVE_LIBMEDIAART
@@ -550,7 +370,7 @@ tracker_extract_get_metadata (TrackerExtractInfo *info)
g_free (vd.album_artist);
g_free (vd.performer);
- g_free (md.creator_uri);
+ g_object_unref (md.creator);
#ifdef HAVE_POSIX_FADVISE
posix_fadvise (fileno (f), 0, 0, POSIX_FADV_DONTNEED);
@@ -559,5 +379,8 @@ tracker_extract_get_metadata (TrackerExtractInfo *info)
/* NOTE: This calls fclose on the file */
ov_clear (&vf);
+ tracker_extract_info_set_resource (info, metadata);
+ g_object_unref (metadata);
+
return TRUE;
}