summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Van Hoof <philip@codeminded.be>2010-12-03 16:07:02 +0100
committerPhilip Van Hoof <philip@codeminded.be>2010-12-09 12:02:21 +0100
commit2d5ae5828b237056d706d8d4f2c5efc23024caa7 (patch)
tree8d13832eb0ecf07f5fd51f7c64cdb050851b3d3d
parent46f884731771559f0779feb4925ccc08cb86daa2 (diff)
downloadtracker-2d5ae5828b237056d706d8d4f2c5efc23024caa7.tar.gz
tracker-extract: Make multi-disc albums work in FLAC extractor
-rw-r--r--src/tracker-extract/tracker-extract-flac.c55
1 files changed, 52 insertions, 3 deletions
diff --git a/src/tracker-extract/tracker-extract-flac.c b/src/tracker-extract/tracker-extract-flac.c
index 7938be909..f13b3e5e7 100644
--- a/src/tracker-extract/tracker-extract-flac.c
+++ b/src/tracker-extract/tracker-extract-flac.c
@@ -326,8 +326,57 @@ extract_flac (const gchar *uri,
add_tuple (metadata, "nie:title", fd.title);
add_tuple (metadata, "nmm:trackNumber", fd.tracknumber);
- /* FIXME: This is commented out in vorbis extractor... */
- add_tuple (metadata, "nmm:setNumber", fd.discno);
+ if (fd.discno && fd.album && album_uri) {
+ gchar *album_disc_uri;
+
+ album_disc_uri = tracker_sparql_escape_uri_printf ("urn:album-disc:%s:Disc%d",
+ fd.album, atoi(fd.discno));
+
+ tracker_sparql_builder_insert_open (preupdate, NULL);
+ 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_insert_close (preupdate);
+
+ 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_insert_open (preupdate, NULL);
+ tracker_sparql_builder_subject_iri (preupdate, album_disc_uri);
+ tracker_sparql_builder_predicate (preupdate, "nmm:setNumber");
+ tracker_sparql_builder_object_int64 (preupdate, atoi (fd.discno));
+ tracker_sparql_builder_insert_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);
+ tracker_sparql_builder_subject_iri (preupdate, album_disc_uri);
+ tracker_sparql_builder_predicate (preupdate, "nmm:albumDiscAlbum");
+ tracker_sparql_builder_object_iri (preupdate, album_uri);
+ tracker_sparql_builder_insert_close (preupdate);
+
+ tracker_sparql_builder_predicate (metadata, "nmm:musicAlbumDisk");
+ tracker_sparql_builder_object_iri (metadata, album_disc_uri);
+
+ g_free (album_disc_uri);
+ }
/* FIXME: Trackgain/Trackpeakgain: commented out in vorbis */
@@ -368,7 +417,7 @@ extract_flac (const gchar *uri,
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);
+ stream->data.stream_info.sample_rate);
}
g_free (fd.artist);