[tracker] tracker-extract: Support for nmm:lyricist in MP3 files



commit 4004693d4d89be6eb5b21caa4b0aee26d654fb8f
Author: Philip Van Hoof <philip codeminded be>
Date:   Thu Feb 11 11:30:23 2010 +0100

    tracker-extract: Support for nmm:lyricist in MP3 files

 src/tracker-extract/tracker-extract-mp3.c |   39 +++++++++++++++++++++++-----
 1 files changed, 32 insertions(+), 7 deletions(-)
---
diff --git a/src/tracker-extract/tracker-extract-mp3.c b/src/tracker-extract/tracker-extract-mp3.c
index 72e8e7e..237994a 100644
--- a/src/tracker-extract/tracker-extract-mp3.c
+++ b/src/tracker-extract/tracker-extract-mp3.c
@@ -94,7 +94,7 @@ typedef struct {
 	gchar *publisher;
 	gchar *recording_time;
 	gchar *release_time;
-	gchar *text;
+	gchar *text, *toly;
 	gchar *title1;
 	gchar *title2;
 	gchar *title3;
@@ -139,6 +139,7 @@ typedef enum {
 	ID3V24_TPUB,
 	ID3V24_TRCK,
 	ID3V24_TYER,
+	ID3V24_TOLY
 } id3v24frame;
 
 typedef struct {
@@ -150,6 +151,8 @@ typedef struct {
 	gchar *title;
 	gchar *performer;
 	gchar *performer_uri;
+	gchar *lyricist;
+	gchar *lyricist_uri;
 	gchar *album;
 	gchar *album_uri;
 	gchar *genre;
@@ -202,6 +205,7 @@ static const struct {
 	{ "TCOP", ID3V24_TCOP },
 	{ "TDRC", ID3V24_TDRC },
 	{ "TDRL", ID3V24_TDRL },
+	{ "TOLY", ID3V24_TOLY },
 	{ "TEXT", ID3V24_TEXT },
 	{ "TIT1", ID3V24_TIT1 },
 	{ "TIT2", ID3V24_TIT2 },
@@ -1239,6 +1243,9 @@ get_id3v24_tags (const gchar          *data,
 			case ID3V24_TEXT:
 				tag->text = word;
 				break;
+			case ID3V24_TOLY:
+				tag->toly = word;
+				break;
 			case ID3V24_TIT1:
 				tag->title1 = word;
 				break;
@@ -1438,6 +1445,9 @@ get_id3v23_tags (const gchar          *data,
 			case ID3V24_TEXT:
 				tag->text = word;
 				break;
+			case ID3V24_TOLY:
+				tag->toly = word;
+				break;
 			case ID3V24_TIT1:
 				tag->title1 = word;
 				break;
@@ -1929,6 +1939,7 @@ extract_mp3 (const gchar          *uri,
 	audio_offset = parse_id3v2 (buffer, buffer_size, &md.id3v1, uri, metadata, &md);
 
 	md.title = tracker_coalesce (4, md.id3v24.title2, md.id3v23.title2, md.id3v22.title2, md.id3v1.title);
+	md.lyricist = tracker_coalesce (2, md.id3v24.text, md.id3v23.toly);
 
 	md.performer = tracker_coalesce (7,
 	                                 md.id3v24.performer1, md.id3v24.performer2,
@@ -1989,6 +2000,19 @@ extract_mp3 (const gchar          *uri,
 		g_free (md.performer);
 	}
 
+	if (md.lyricist) {
+		md.lyricist_uri = tracker_uri_printf_escaped ("urn:artist:%s", md.lyricist);
+
+		tracker_sparql_builder_insert_open (preupdate, NULL);
+		tracker_sparql_builder_subject_iri (preupdate, md.lyricist_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.lyricist);
+		tracker_sparql_builder_insert_close (preupdate);
+		g_free (md.lyricist);
+	}
+
 	if (md.album) {
 		md.album_uri = tracker_uri_printf_escaped ("urn:album:%s", md.album);
 
@@ -2034,6 +2058,13 @@ extract_mp3 (const gchar          *uri,
 		/* do not delete title, needed by albumart */
 	}
 
+
+	if (md.lyricist_uri) {
+		tracker_sparql_builder_predicate (metadata, "nmm:lyricist");
+		tracker_sparql_builder_object_iri (metadata, md.lyricist_uri);
+		g_free (md.lyricist_uri);
+	}
+
 	if (md.performer_uri) {
 		tracker_sparql_builder_predicate (metadata, "nmm:performer");
 		tracker_sparql_builder_object_iri (metadata, md.performer_uri);
@@ -2052,12 +2083,6 @@ extract_mp3 (const gchar          *uri,
 		g_free (md.recording_time);
 	}
 
-	if (md.text) {
-		tracker_sparql_builder_predicate (metadata, "nie:plainTextContent");
-		tracker_sparql_builder_object_unvalidated (metadata, md.text);
-		g_free (md.text);
-	}
-
 	if (md.genre) {
 		tracker_sparql_builder_predicate (metadata, "nfo:genre");
 		tracker_sparql_builder_object_unvalidated (metadata, md.genre);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]