[tracker] Added nfo:encodedBy property.



commit fefe77ce85e736158c9a3b9aec3d92d2bfe39e1d
Author: Mikael Ottela <mikael ottela ixonos com>
Date:   Tue Aug 3 20:39:15 2010 +0300

    Added nfo:encodedBy property.
    
    Fixes NB#177663, Tracker does not harvest ID3v2 tags

 data/ontologies/33-nfo.ontology           |    8 ++++++++
 src/tracker-extract/tracker-extract-mp3.c |   25 +++++++++++++++++++++++++
 2 files changed, 33 insertions(+), 0 deletions(-)
---
diff --git a/data/ontologies/33-nfo.ontology b/data/ontologies/33-nfo.ontology
index 609ff69..d12a0cc 100644
--- a/data/ontologies/33-nfo.ontology
+++ b/data/ontologies/33-nfo.ontology
@@ -639,6 +639,14 @@ nfo:codec a rdf:Property ;
 	rdfs:domain nfo:Media ;
 	rdfs:range xsd:string .
 
+# FIXME Added property
+nfo:encodedBy a rdf:Property ;
+	rdfs:label "encodedBy" ;
+	rdfs:comment "The contains the name of the person or organisation that encoded the media" ;
+	nrl:maxCardinality 1 ;
+	rdfs:domain nfo:Media ;
+	rdfs:range xsd:string .
+
 nfo:fontFamily a rdf:Property ;
 	rdfs:label "fontFamily" ;
 	rdfs:comment "The name of the font family." ;
diff --git a/src/tracker-extract/tracker-extract-mp3.c b/src/tracker-extract/tracker-extract-mp3.c
index d1ab435..4de6828 100644
--- a/src/tracker-extract/tracker-extract-mp3.c
+++ b/src/tracker-extract/tracker-extract-mp3.c
@@ -87,6 +87,7 @@ typedef struct {
 	gchar *comment;
 	gchar *content_type;
 	gchar *copyright;
+	gchar *encoded_by;
 	guint32 length;
 	gchar *performer1;
 	gchar *performer2;
@@ -109,6 +110,7 @@ typedef enum {
 	ID3V2_TAL,
 	ID3V2_TCO,
 	ID3V2_TCR,
+	ID3V2_TEN,
 	ID3V2_TLE,
 	ID3V2_TPB,
 	ID3V2_TP1,
@@ -129,6 +131,7 @@ typedef enum {
 	ID3V24_TCOP,
 	ID3V24_TDRC,
 	ID3V24_TDRL,
+	ID3V24_TENC,
 	ID3V24_TEXT,
 	ID3V24_TIT1,
 	ID3V24_TIT2,
@@ -159,6 +162,7 @@ typedef struct {
 	const gchar *genre;
 	const gchar *text;
 	const gchar *recording_time;
+	const gchar *encoded_by;
 	const gchar *copyright;
 	const gchar *publisher;
 	const gchar *comment;
@@ -208,6 +212,7 @@ static const struct {
 	{ "TCOP", ID3V24_TCOP },
 	{ "TDRC", ID3V24_TDRC },
 	{ "TDRL", ID3V24_TDRL },
+	{ "TENC", ID3V24_TENC },
 	{ "TOLY", ID3V24_TOLY },
 	{ "TEXT", ID3V24_TEXT },
 	{ "TIT1", ID3V24_TIT1 },
@@ -231,6 +236,7 @@ static const struct {
 	{ "TAL", ID3V2_TAL },
 	{ "TCO", ID3V2_TCO },
 	{ "TCR", ID3V2_TCR },
+	{ "TEN", ID3V2_TEN },
 	{ "TLE", ID3V2_TLE },
 	{ "TP1", ID3V2_TP1 },
 	{ "TP2", ID3V2_TP2 },
@@ -463,6 +469,7 @@ id3v2tag_free (id3v2tag *tags)
 	g_free (tags->publisher);
 	g_free (tags->recording_time);
 	g_free (tags->release_time);
+	g_free (tags->encoded_by);
 	g_free (tags->text);
 	g_free (tags->toly);
 	g_free (tags->title1);
@@ -1283,6 +1290,9 @@ get_id3v24_tags (const gchar          *data,
 				tag->release_time = tracker_date_guess (word);
 				g_free (word);
 				break;
+			case ID3V24_TENC:
+				tag->encoded_by = word;
+				break;
 			case ID3V24_TEXT:
 				tag->text = word;
 				break;
@@ -1488,6 +1498,9 @@ get_id3v23_tags (const gchar          *data,
 			case ID3V24_TCOP:
 				tag->copyright = word;
 				break;
+			case ID3V24_TENC:
+				tag->encoded_by = word;
+				break;
 			case ID3V24_TEXT:
 				tag->text = word;
 				break;
@@ -1640,6 +1653,9 @@ get_id3v20_tags (const gchar          *data,
 			case ID3V2_TCR:
 				tag->copyright = word;
 				break;
+			case ID3V2_TEN:
+				tag->encoded_by = word;
+				break;
 			case ID3V2_TLE:
 				tag->length = atoi (word) / 1000;
 				g_free (word);
@@ -2039,6 +2055,10 @@ extract_mp3 (const gchar          *uri,
 	                                     md.id3v22.comment,
 	                                     md.id3v1.comment);
 
+	md.encoded_by = tracker_coalesce_strip (3, md.id3v24.encoded_by,
+						md.id3v23.encoded_by,
+						md.id3v22.encoded_by);
+
 	if (md.id3v24.track_number != 0) {
 		md.track_number = md.id3v24.track_number;
 	} else if (md.id3v23.track_number != 0) {
@@ -2196,6 +2216,11 @@ extract_mp3 (const gchar          *uri,
 		tracker_sparql_builder_object_blank_close (metadata);
 	}
 
+	if (md.encoded_by) {
+		tracker_sparql_builder_predicate (metadata, "nfo:encodedBy");
+		tracker_sparql_builder_object_unvalidated (metadata, md.encoded_by);
+	}
+
 	if (md.track_number > 0) {
 		tracker_sparql_builder_predicate (metadata, "nmm:trackNumber");
 		tracker_sparql_builder_object_int64 (metadata, md.track_number);



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