summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikael Ottela <mikael.ottela@ixonos.com>2010-08-03 20:39:15 +0300
committerMikael Ottela <mikael.ottela@ixonos.com>2010-08-12 17:21:54 +0300
commitfefe77ce85e736158c9a3b9aec3d92d2bfe39e1d (patch)
tree03b4fbd29af50e1f438ebebf08dad21c5a7afa0b
parentb4508c4d8309427ea055a9f1000ab6083e251062 (diff)
downloadtracker-fefe77ce85e736158c9a3b9aec3d92d2bfe39e1d.tar.gz
Added nfo:encodedBy property.
Fixes NB#177663, Tracker does not harvest ID3v2 tags
-rw-r--r--data/ontologies/33-nfo.ontology8
-rw-r--r--src/tracker-extract/tracker-extract-mp3.c25
2 files changed, 33 insertions, 0 deletions
diff --git a/data/ontologies/33-nfo.ontology b/data/ontologies/33-nfo.ontology
index 609ff6962..d12a0cc06 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 d1ab435a6..4de682874 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);