summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Van Hoof <philip@codeminded.be>2010-02-25 16:44:14 +0100
committerPhilip Van Hoof <philip@codeminded.be>2010-02-25 16:51:01 +0100
commit86172aec017eca43e4e428f0e6f780109fd3e7cc (patch)
tree6578140253f13a0ac73671fd07ba2242e00ddc4d
parent9663c72032642bbab4249fbeef0b86f0b988cc4d (diff)
downloadtracker-86172aec017eca43e4e428f0e6f780109fd3e7cc.tar.gz
tracker-extract: Fixed various properties for albums in FLAC and Vorbis
-rw-r--r--src/tracker-extract/tracker-extract-flac.c164
-rw-r--r--src/tracker-extract/tracker-extract-gstreamer.c56
-rw-r--r--src/tracker-extract/tracker-extract-vorbis.c100
3 files changed, 242 insertions, 78 deletions
diff --git a/src/tracker-extract/tracker-extract-flac.c b/src/tracker-extract/tracker-extract-flac.c
index 973eff385..21b8dd807 100644
--- a/src/tracker-extract/tracker-extract-flac.c
+++ b/src/tracker-extract/tracker-extract-flac.c
@@ -22,6 +22,7 @@
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
+#include <stdlib.h>
#include <glib.h>
@@ -216,40 +217,103 @@ extract_flac (const gchar *uri,
FLAC__metadata_simple_iterator_next (iter);
}
- /* This will find the first non-NULL and then free the rest */
creator = tracker_coalesce (3, fd.artist, fd.albumartist,
fd.performer);
if (creator) {
- artist_uri = tracker_uri_printf_escaped ("urn:artist:%s",
- creator);
- tracker_sparql_builder_subject_iri (metadata, artist_uri);
- tracker_sparql_builder_predicate (metadata, "a");
- tracker_sparql_builder_object (metadata, "nmm:Artist");
- tracker_sparql_builder_predicate (metadata, "nmm:artistName");
- tracker_sparql_builder_object_unvalidated (metadata, creator);
- g_free (creator);
+ artist_uri = tracker_uri_printf_escaped ("urn:artist:%s", creator);
+
+ tracker_sparql_builder_insert_open (preupdate, NULL);
+ tracker_sparql_builder_subject_iri (preupdate, artist_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, creator);
+ tracker_sparql_builder_insert_close (preupdate);
+
+ g_free (creator);
}
if (fd.album) {
- album_uri = tracker_uri_printf_escaped ("urn:album:%s",
- fd.album);
- tracker_sparql_builder_subject_iri (metadata, album_uri);
- tracker_sparql_builder_predicate (metadata, "a");
- tracker_sparql_builder_object (metadata, "nmm:MusicAlbum");
- tracker_sparql_builder_predicate (metadata, "nmm:albumTitle");
- tracker_sparql_builder_object_unvalidated (metadata,
- fd.album);
-
- if (fd.trackcount) {
- tracker_sparql_builder_predicate (metadata, "nmm:albumTrackCount");
- tracker_sparql_builder_object_unvalidated (metadata,
- fd.trackcount);
- }
+ album_uri = tracker_uri_printf_escaped ("urn:album:%s", fd.album);
+
+ tracker_sparql_builder_insert_open (preupdate, NULL);
+
+ tracker_sparql_builder_subject_iri (preupdate, album_uri);
+ tracker_sparql_builder_predicate (preupdate, "a");
+ tracker_sparql_builder_object (preupdate, "nmm:MusicAlbum");
+ tracker_sparql_builder_predicate (preupdate, "nmm:albumTitle");
+ tracker_sparql_builder_object_unvalidated (preupdate, fd.album);
+
+ if (fd.trackcount) {
+ tracker_sparql_builder_delete_open (preupdate, NULL);
+ tracker_sparql_builder_subject_iri (preupdate, album_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, album_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);
+
+ tracker_sparql_builder_subject_iri (preupdate, album_uri);
+ tracker_sparql_builder_predicate (preupdate, "nmm:albumTrackCount");
+ tracker_sparql_builder_object_unvalidated (preupdate, fd.trackcount);
+
+ tracker_sparql_builder_insert_close (preupdate);
+ }
+
+ if (fd.albumgain) {
+ tracker_sparql_builder_delete_open (preupdate, NULL);
+ tracker_sparql_builder_subject_iri (preupdate, album_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, album_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);
+
+ tracker_sparql_builder_subject_iri (preupdate, album_uri);
+ tracker_sparql_builder_predicate (preupdate, "nmm:albumGain");
+ tracker_sparql_builder_object_double (preupdate, atof (fd.albumgain));
+
+ tracker_sparql_builder_insert_close (preupdate);
+ }
+
+ if (fd.albumpeakgain) {
+ tracker_sparql_builder_delete_open (preupdate, NULL);
+ tracker_sparql_builder_subject_iri (preupdate, album_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, album_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);
+
+ tracker_sparql_builder_subject_iri (preupdate, album_uri);
+ tracker_sparql_builder_predicate (preupdate, "nmm:albumPeakGain");
+ tracker_sparql_builder_object_double (preupdate, atof (fd.albumpeakgain));
+
+ tracker_sparql_builder_insert_close (preupdate);
+ }
+ tracker_sparql_builder_insert_close (preupdate);
}
- tracker_sparql_builder_subject_iri (metadata, uri);
tracker_sparql_builder_predicate (metadata, "a");
tracker_sparql_builder_object (metadata, "nmm:MusicPiece");
tracker_sparql_builder_object (metadata, "nfo:Audio");
@@ -268,8 +332,6 @@ extract_flac (const gchar *uri,
/* FIXME: Trackgain/Trackpeakgain: commented out in vorbis */
- add_tuple (metadata, "nmm:albumGain", fd.albumgain);
- add_tuple (metadata, "nmm:albumPeakGain", fd.albumpeakgain);
add_tuple (metadata, "nie:comment", fd.comment);
add_tuple (metadata, "nie:contentCreated", fd.date);
add_tuple (metadata, "nfo:genre", fd.genre);
@@ -278,36 +340,36 @@ extract_flac (const gchar *uri,
add_tuple (metadata, "nie:license", fd.license);
if (fd.publisher) {
- tracker_sparql_builder_predicate (metadata, "dc:publisher");
+ tracker_sparql_builder_predicate (metadata, "dc:publisher");
- tracker_sparql_builder_object_blank_open (metadata);
- tracker_sparql_builder_predicate (metadata, "a");
- tracker_sparql_builder_object (metadata, "nco:Contact");
+ 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,
- fd.publisher);
- tracker_sparql_builder_object_blank_close (metadata);
+ tracker_sparql_builder_predicate (metadata, "nco:fullname");
+ tracker_sparql_builder_object_unvalidated (metadata,
+ fd.publisher);
+ tracker_sparql_builder_object_blank_close (metadata);
}
if (stream) {
- tracker_sparql_builder_predicate (metadata, "nfo:sampleRate");
- tracker_sparql_builder_object_int64 (metadata,
- stream->data.stream_info.sample_rate);
-
- tracker_sparql_builder_predicate (metadata, "nfo:channels");
- tracker_sparql_builder_object_int64 (metadata,
- stream->data.stream_info.channels);
-
- tracker_sparql_builder_predicate (metadata,
- "nfo:averageBitrate");
- tracker_sparql_builder_object_int64 (metadata,
- stream->data.stream_info.bits_per_sample);
-
- tracker_sparql_builder_predicate (metadata, "nfo:duration");
- tracker_sparql_builder_object_int64 (metadata,
- stream->data.stream_info.total_samples /
- stream->data.stream_info.sample_rate);
+ tracker_sparql_builder_predicate (metadata, "nfo:sampleRate");
+ tracker_sparql_builder_object_int64 (metadata,
+ stream->data.stream_info.sample_rate);
+
+ tracker_sparql_builder_predicate (metadata, "nfo:channels");
+ tracker_sparql_builder_object_int64 (metadata,
+ stream->data.stream_info.channels);
+
+ tracker_sparql_builder_predicate (metadata,
+ "nfo:averageBitrate");
+ tracker_sparql_builder_object_int64 (metadata,
+ stream->data.stream_info.bits_per_sample);
+
+ tracker_sparql_builder_predicate (metadata, "nfo:duration");
+ tracker_sparql_builder_object_int64 (metadata,
+ stream->data.stream_info.total_samples /
+ stream->data.stream_info.sample_rate);
}
g_free (fd.title);
diff --git a/src/tracker-extract/tracker-extract-gstreamer.c b/src/tracker-extract/tracker-extract-gstreamer.c
index 69aa16975..e9c25dce0 100644
--- a/src/tracker-extract/tracker-extract-gstreamer.c
+++ b/src/tracker-extract/tracker-extract-gstreamer.c
@@ -541,6 +541,7 @@ extract_metadata (MetadataExtractor *extractor,
if (s) {
gboolean has_it;
guint count;
+ gdouble gain;
needs_audio = TRUE;
@@ -608,7 +609,60 @@ extract_metadata (MetadataExtractor *extractor,
tracker_sparql_builder_insert_close (preupdate);
}
+ has_it = gst_tag_list_get_double (extractor->tagcache,
+ GST_TAG_ALBUM_GAIN,
+ &gain);
+
+ if (has_it) {
+ tracker_sparql_builder_delete_open (preupdate, NULL);
+ tracker_sparql_builder_subject_iri (preupdate, album_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, album_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);
+
+ tracker_sparql_builder_subject_iri (preupdate, album_uri);
+ tracker_sparql_builder_predicate (preupdate, "nmm:albumGain");
+ tracker_sparql_builder_object_double (preupdate, gain);
+
+ tracker_sparql_builder_insert_close (preupdate);
+ }
+
+ has_it = gst_tag_list_get_double (extractor->tagcache,
+ GST_TAG_ALBUM_PEAK,
+ &gain);
+
+ if (has_it) {
+ tracker_sparql_builder_delete_open (preupdate, NULL);
+ tracker_sparql_builder_subject_iri (preupdate, album_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, album_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);
+
+ tracker_sparql_builder_subject_iri (preupdate, album_uri);
+ tracker_sparql_builder_predicate (preupdate, "nmm:albumPeakGain");
+ tracker_sparql_builder_object_double (preupdate, gain);
+
+ tracker_sparql_builder_insert_close (preupdate);
+ }
+
*album = s;
+
}
if (extractor->mime == EXTRACT_MIME_AUDIO)
@@ -672,8 +726,6 @@ extract_metadata (MetadataExtractor *extractor,
add_double_gst_tag (metadata, uri, "nfo:gain", extractor->tagcache, GST_TAG_TRACK_GAIN);
add_double_gst_tag (metadata, uri, "nfo:peakGain", extractor->tagcache, GST_TAG_TRACK_PEAK);
- add_double_gst_tag (metadata, uri, "nmm:albumGain", extractor->tagcache, GST_TAG_ALBUM_GAIN);
- add_double_gst_tag (metadata, uri, "nmm:albumPeakGain", extractor->tagcache, GST_TAG_ALBUM_PEAK);
if (performer_uri) {
tracker_sparql_builder_predicate (metadata, "nmm:performer");
diff --git a/src/tracker-extract/tracker-extract-vorbis.c b/src/tracker-extract/tracker-extract-vorbis.c
index 7fbe1c54e..5815ca15e 100644
--- a/src/tracker-extract/tracker-extract-vorbis.c
+++ b/src/tracker-extract/tracker-extract-vorbis.c
@@ -22,6 +22,7 @@
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
+#include <stdlib.h>
#include <glib.h>
@@ -96,7 +97,7 @@ extract_vorbis (const char *uri,
gchar *filename;
VorbisData vorbis_data = { 0 };
VorbisNeedsMergeData merge_data = { 0 };
- gchar *artist_uri = NULL, *album_uri = NULL;
+ gchar *artist_uri = NULL, *album_uri = NULL, *publisher_uri = NULL;
filename = g_filename_from_uri (uri, NULL, NULL);
f = tracker_file_open (filename, "r", FALSE);
@@ -187,6 +188,7 @@ extract_vorbis (const char *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, album_uri);
tracker_sparql_builder_predicate (preupdate, "nmm:albumTrackCount");
@@ -196,17 +198,86 @@ extract_vorbis (const char *uri,
tracker_sparql_builder_insert_open (preupdate, NULL);
tracker_sparql_builder_subject_iri (preupdate, album_uri);
- tracker_sparql_builder_predicate (metadata, "nmm:albumTrackCount");
- tracker_sparql_builder_object_unvalidated (metadata, vorbis_data.trackcount);
+ tracker_sparql_builder_predicate (preupdate, "nmm:albumTrackCount");
+ tracker_sparql_builder_object_unvalidated (preupdate, vorbis_data.trackcount);
tracker_sparql_builder_insert_close (preupdate);
+ }
+
+ if (vorbis_data.AlbumGain) {
+ tracker_sparql_builder_delete_open (preupdate, NULL);
+ tracker_sparql_builder_subject_iri (preupdate, album_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, album_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);
- g_free (vorbis_data.trackcount);
+ tracker_sparql_builder_subject_iri (preupdate, album_uri);
+ tracker_sparql_builder_predicate (preupdate, "nmm:albumGain");
+ tracker_sparql_builder_object_double (preupdate, atof (vorbis_data.AlbumGain));
+
+ tracker_sparql_builder_insert_close (preupdate);
+ }
+
+ if (vorbis_data.AlbumPeakGain) {
+ tracker_sparql_builder_delete_open (preupdate, NULL);
+ tracker_sparql_builder_subject_iri (preupdate, album_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, album_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);
+
+ tracker_sparql_builder_subject_iri (preupdate, album_uri);
+ tracker_sparql_builder_predicate (preupdate, "nmm:albumPeakGain");
+ tracker_sparql_builder_object_double (preupdate, atof (vorbis_data.AlbumPeakGain));
+
+ tracker_sparql_builder_insert_close (preupdate);
+ }
+
+ if (vorbis_data.DiscNo) {
+ tracker_sparql_builder_delete_open (preupdate, NULL);
+ tracker_sparql_builder_subject_iri (preupdate, album_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_uri);
+ tracker_sparql_builder_predicate (preupdate, "nmm:setNumber");
+ tracker_sparql_builder_object_variable (preupdate, "unknown");
+ tracker_sparql_builder_where_close (preupdate);
+
+ tracker_sparql_builder_insert_open (preupdate, NULL);
+
+ tracker_sparql_builder_subject_iri (preupdate, album_uri);
+ tracker_sparql_builder_predicate (preupdate, "nmm:setNumber");
+ tracker_sparql_builder_object_int64 (preupdate, atoi (vorbis_data.DiscNo));
+
+ tracker_sparql_builder_insert_close (preupdate);
}
g_free (vorbis_data.album);
}
+ g_free (vorbis_data.trackcount);
+ g_free (vorbis_data.AlbumPeakGain);
+ g_free (vorbis_data.AlbumGain);
+ g_free (vorbis_data.DiscNo);
+
tracker_sparql_builder_predicate (metadata, "a");
tracker_sparql_builder_object (metadata, "nmm:MusicPiece");
tracker_sparql_builder_object (metadata, "nfo:Audio");
@@ -229,15 +300,6 @@ extract_vorbis (const char *uri,
g_free (vorbis_data.tracknumber);
}
- if (vorbis_data.DiscNo) {
-#if 0
- /* nmm:setNumber is of domain nmm:MusicAlbum, but there could be several of these... */
- tracker_sparql_builder_predicate (metadata, "nmm:setNumber");
- tracker_sparql_builder_object_unvalidated (metadata, vorbis_data.DiscNo);
-#endif
- g_free (vorbis_data.DiscNo);
- }
-
if (vorbis_data.TrackGain) {
/* tracker_statement_list_insert (metadata, uri, _PREFIX "", vorbis_data.); */
g_free (vorbis_data.TrackGain);
@@ -247,18 +309,6 @@ extract_vorbis (const char *uri,
g_free (vorbis_data.TrackPeakGain);
}
- if (vorbis_data.AlbumGain) {
- tracker_sparql_builder_predicate (metadata, "nmm:albumGain");
- tracker_sparql_builder_object_unvalidated (metadata, vorbis_data.AlbumGain);
- g_free (vorbis_data.AlbumGain);
- }
-
- if (vorbis_data.AlbumPeakGain) {
- tracker_sparql_builder_predicate (metadata, "nmm:albumPeakGain");
- tracker_sparql_builder_object_unvalidated (metadata, vorbis_data.AlbumPeakGain);
- g_free (vorbis_data.AlbumPeakGain);
- }
-
if (vorbis_data.comment) {
tracker_sparql_builder_predicate (metadata, "nie:comment");
tracker_sparql_builder_object_unvalidated (metadata, vorbis_data.comment);