[tracker] tracker-extract-mp3: Prefer ID3v2 tags to ID3v1 tags
- From: Jürg Billeter <juergbi src gnome org>
- To: svn-commits-list gnome org
- Subject: [tracker] tracker-extract-mp3: Prefer ID3v2 tags to ID3v1 tags
- Date: Thu, 7 May 2009 05:35:35 -0400 (EDT)
commit 2cfe3c0b820e227fbab624f4478f458d407dffb7
Author: Jürg Billeter <j bitron ch>
Date: Thu May 7 11:29:46 2009 +0200
tracker-extract-mp3: Prefer ID3v2 tags to ID3v1 tags
---
src/tracker-extract/tracker-extract-mp3.c | 137 ++++++++++++++++------------
1 files changed, 78 insertions(+), 59 deletions(-)
diff --git a/src/tracker-extract/tracker-extract-mp3.c b/src/tracker-extract/tracker-extract-mp3.c
index 9d54afb..d538a5a 100644
--- a/src/tracker-extract/tracker-extract-mp3.c
+++ b/src/tracker-extract/tracker-extract-mp3.c
@@ -80,6 +80,7 @@ typedef struct {
const gchar *urn;
const gchar *rdf_type;
const gchar *predicate;
+ gchar **nullify;
} Matches;
typedef struct {
@@ -100,6 +101,8 @@ typedef struct {
unsigned char *albumartdata;
size_t albumartsize;
+
+ id3tag *id3v1_info;
} file_data;
enum {
@@ -747,26 +750,26 @@ get_id3v24_tags (const gchar *data,
{
guint pos = 0;
Matches tmap[] = {
- {"TCOP", NIE_PREFIX "copyright", NULL, NULL, NULL},
- {"TDRC", NIE_PREFIX "contentCreated", NULL, NULL, NULL},
- {"TCON", NFO_PREFIX "genre", NULL, NULL, NULL},
- {"TIT1", NFO_PREFIX "genre", NULL, NULL, NULL},
- {"TENC", NCO_PREFIX "publisher", "publisher", NMM_PREFIX "Artist", NMM_PREFIX "artistName"},
- {"TEXT", NIE_PREFIX "plainTextContent", FALSE},
- {"TPE1", NMM_PREFIX "performer", "artist", NMM_PREFIX "Artist", NMM_PREFIX "artistName"},
- {"TPE2", NMM_PREFIX "performer", "artist", NMM_PREFIX "Artist", NMM_PREFIX "artistName"},
- {"TPE3", NMM_PREFIX "performer", "artist", NMM_PREFIX "Artist", NMM_PREFIX "artistName"},
+ {"TCOP", NIE_PREFIX "copyright", NULL, NULL, NULL, NULL},
+ {"TDRC", NIE_PREFIX "contentCreated", NULL, NULL, NULL, &filedata->id3v1_info->year},
+ {"TCON", NFO_PREFIX "genre", NULL, NULL, NULL, &filedata->id3v1_info->genre},
+ {"TIT1", NFO_PREFIX "genre", NULL, NULL, NULL, &filedata->id3v1_info->genre},
+ {"TENC", NCO_PREFIX "publisher", "publisher", NMM_PREFIX "Artist", NMM_PREFIX "artistName", NULL},
+ {"TEXT", NIE_PREFIX "plainTextContent", NULL, NULL, NULL, NULL},
+ {"TPE1", NMM_PREFIX "performer", "artist", NMM_PREFIX "Artist", NMM_PREFIX "artistName", &filedata->id3v1_info->artist},
+ {"TPE2", NMM_PREFIX "performer", "artist", NMM_PREFIX "Artist", NMM_PREFIX "artistName", &filedata->id3v1_info->artist},
+ {"TPE3", NMM_PREFIX "performer", "artist", NMM_PREFIX "Artist", NMM_PREFIX "artistName", &filedata->id3v1_info->artist},
/* {"TOPE", NID3_LEAD_ARTIST}, We dont' want the original artist for now */
- {"TPUB", NCO_PREFIX "publisher", "publisher", NMM_PREFIX "Artist", NMM_PREFIX "artistName"},
- {"TOAL", NIE_PREFIX "musicAlbum", "album", NMM_PREFIX "MusicAlbum", NMM_PREFIX "albumTitle"},
- {"TALB", NIE_PREFIX "musicAlbum", "album", NMM_PREFIX "MusicAlbum", NMM_PREFIX "albumTitle"},
- {"TLAN", NIE_PREFIX "language", NULL, NULL, NULL},
- {"TIT2", NIE_PREFIX "title", NULL, NULL, NULL},
- {"TIT3", NIE_PREFIX "comment", NULL, NULL, NULL},
- {"TDRL", NIE_PREFIX "contentCreated", NULL, NULL, NULL},
- {"TRCK", NMM_PREFIX "trackNumber", NULL, NULL, NULL},
+ {"TPUB", NCO_PREFIX "publisher", "publisher", NMM_PREFIX "Artist", NMM_PREFIX "artistName", &filedata->id3v1_info->artist},
+ {"TOAL", NIE_PREFIX "musicAlbum", "album", NMM_PREFIX "MusicAlbum", NMM_PREFIX "albumTitle", &filedata->id3v1_info->album},
+ {"TALB", NIE_PREFIX "musicAlbum", "album", NMM_PREFIX "MusicAlbum", NMM_PREFIX "albumTitle", &filedata->id3v1_info->album},
+ {"TLAN", NIE_PREFIX "language", NULL, NULL, NULL, NULL},
+ {"TIT2", NIE_PREFIX "title", NULL, NULL, NULL, &filedata->id3v1_info->title},
+ {"TIT3", NIE_PREFIX "comment", NULL, NULL, NULL, &filedata->id3v1_info->comment},
+ {"TDRL", NIE_PREFIX "contentCreated", NULL, NULL, NULL, &filedata->id3v1_info->year},
+ {"TRCK", NMM_PREFIX "trackNumber", NULL, NULL, NULL, &filedata->id3v1_info->trackno},
/* TODO Nepomukify {"PCNT", "Audio:PlayCount"}, */
- {"TLEN", NMM_PREFIX "length", NULL, NULL, NULL},
+ {"TLEN", NMM_PREFIX "length", NULL, NULL, NULL, NULL},
{NULL, 0, NULL, NULL, NULL},
};
@@ -886,6 +889,11 @@ get_id3v24_tags (const gchar *data,
filedata->duration = duration/1000;
}
+ if (tmap[i].nullify) {
+ /* prefer ID3v2 tag over ID3v1 tag */
+ g_free (*tmap[i].nullify);
+ *tmap[i].nullify = NULL;
+ }
if (tmap[i].urn) {
gchar *canonical_uri = tmap[i].urn[0]!=':'?tracker_uri_printf_escaped ("urn:%s:%s", tmap[i].urn, word):g_strdup(tmap[i].urn);
tracker_statement_list_insert (metadata, canonical_uri, RDF_TYPE, tmap[i].rdf_type);
@@ -1012,25 +1020,25 @@ get_id3v23_tags (const gchar *data,
{
guint pos = 0;
Matches tmap[] = {
- {"TCOP", NIE_PREFIX "copyright", NULL, NULL, NULL},
- {"TDAT", NIE_PREFIX "contentCreated", NULL, NULL, NULL},
- {"TCON", NFO_PREFIX "genre", NULL, NULL, NULL},
- {"TIT1", NFO_PREFIX "genre", NULL, NULL, NULL},
- {"TENC", NCO_PREFIX "publisher", "publisher", NMM_PREFIX "Artist", NMM_PREFIX "artistName"},
- {"TEXT", NIE_PREFIX "plainTextContent", NULL, NULL, NULL},
- {"TPE1", NMM_PREFIX "performer", "artist", NMM_PREFIX "Artist", NMM_PREFIX "artistName"},
- {"TPE2", NMM_PREFIX "performer", "artist", NMM_PREFIX "Artist", NMM_PREFIX "artistName"},
- {"TPE3", NMM_PREFIX "performer", "artist", NMM_PREFIX "Artist", NMM_PREFIX "artistName"},
+ {"TCOP", NIE_PREFIX "copyright", NULL, NULL, NULL, NULL},
+ {"TDAT", NIE_PREFIX "contentCreated", NULL, NULL, NULL, &filedata->id3v1_info->year},
+ {"TCON", NFO_PREFIX "genre", NULL, NULL, NULL, &filedata->id3v1_info->genre},
+ {"TIT1", NFO_PREFIX "genre", NULL, NULL, NULL, &filedata->id3v1_info->genre},
+ {"TENC", NCO_PREFIX "publisher", "publisher", NMM_PREFIX "Artist", NMM_PREFIX "artistName", &filedata->id3v1_info->artist},
+ {"TEXT", NIE_PREFIX "plainTextContent", NULL, NULL, NULL, NULL},
+ {"TPE1", NMM_PREFIX "performer", "artist", NMM_PREFIX "Artist", NMM_PREFIX "artistName", &filedata->id3v1_info->artist},
+ {"TPE2", NMM_PREFIX "performer", "artist", NMM_PREFIX "Artist", NMM_PREFIX "artistName", &filedata->id3v1_info->artist},
+ {"TPE3", NMM_PREFIX "performer", "artist", NMM_PREFIX "Artist", NMM_PREFIX "artistName", &filedata->id3v1_info->artist},
/* {"TOPE", NID3_LEAD_ARTIST}, We don't want the original artist for now */
- {"TPUB", NCO_PREFIX "publisher", "publisher", NMM_PREFIX "Artist", NMM_PREFIX "artistName"},
- {"TOAL", NIE_PREFIX "musicAlbum", "album", NMM_PREFIX "MusicAlbum", NMM_PREFIX "albumTitle"},
- {"TALB", NIE_PREFIX "musicAlbum", "album", NMM_PREFIX "MusicAlbum", NMM_PREFIX "albumTitle"},
- {"TLAN", NIE_PREFIX "language", NULL, NULL, NULL},
- {"TIT2", NIE_PREFIX "title", NULL, NULL, NULL},
- {"TYER", NIE_PREFIX "contentCreated", NULL, NULL, NULL},
- {"TRCK", NMM_PREFIX "trackNumber", NULL, NULL, NULL},
+ {"TPUB", NCO_PREFIX "publisher", "publisher", NMM_PREFIX "Artist", NMM_PREFIX "artistName", NULL},
+ {"TOAL", NIE_PREFIX "musicAlbum", "album", NMM_PREFIX "MusicAlbum", NMM_PREFIX "albumTitle", &filedata->id3v1_info->album},
+ {"TALB", NIE_PREFIX "musicAlbum", "album", NMM_PREFIX "MusicAlbum", NMM_PREFIX "albumTitle", &filedata->id3v1_info->album},
+ {"TLAN", NIE_PREFIX "language", NULL, NULL, NULL, NULL},
+ {"TIT2", NIE_PREFIX "title", NULL, NULL, NULL, &filedata->id3v1_info->title},
+ {"TYER", NIE_PREFIX "contentCreated", NULL, NULL, NULL, &filedata->id3v1_info->year},
+ {"TRCK", NMM_PREFIX "trackNumber", NULL, NULL, NULL, &filedata->id3v1_info->trackno},
/* TODO Nepomukify {"PCNT", "Audio:PlayCount"}, */
- {"TLEN", NMM_PREFIX "duration", NULL, NULL, NULL},
+ {"TLEN", NMM_PREFIX "duration", NULL, NULL, NULL, NULL},
{NULL, 0, NULL, NULL, NULL},
};
@@ -1141,6 +1149,11 @@ get_id3v23_tags (const gchar *data,
filedata->duration = duration/1000;
}
+ if (tmap[i].nullify) {
+ /* prefer ID3v2 tag over ID3v1 tag */
+ g_free (*tmap[i].nullify);
+ *tmap[i].nullify = NULL;
+ }
if (tmap[i].urn) {
gchar *canonical_uri = tmap[i].urn[0]!=':'?tracker_uri_printf_escaped ("urn:%s:%s", tmap[i].urn, word):g_strdup(tmap[i].urn);
tracker_statement_list_insert (metadata, canonical_uri, RDF_TYPE, tmap[i].rdf_type);
@@ -1257,31 +1270,31 @@ get_id3v20_tags (const gchar *data,
{
guint pos = 0;
Matches tmap[] = {
- {"TAL", NIE_PREFIX "musicAlbum", "album", NMM_PREFIX "MusicAlbum", NMM_PREFIX "albumTitle"},
- {"TT1", NMM_PREFIX "performer", "artist", NMM_PREFIX "Artist", NMM_PREFIX "artistName"},
- {"TT2", NIE_PREFIX "title", NULL, NULL, NULL},
- {"TT3", NIE_PREFIX "title", NULL, NULL, NULL},
- {"TXT", NIE_PREFIX "comment", NULL, NULL, NULL},
- {"TPB", NCO_PREFIX "publisher", "publisher", NMM_PREFIX "Artist", NMM_PREFIX "artistName"},
+ {"TAL", NIE_PREFIX "musicAlbum", "album", NMM_PREFIX "MusicAlbum", NMM_PREFIX "albumTitle", &filedata->id3v1_info->album},
+ {"TT1", NMM_PREFIX "performer", "artist", NMM_PREFIX "Artist", NMM_PREFIX "artistName", &filedata->id3v1_info->artist},
+ {"TT2", NIE_PREFIX "title", NULL, NULL, NULL, &filedata->id3v1_info->title},
+ {"TT3", NIE_PREFIX "title", NULL, NULL, NULL, &filedata->id3v1_info->title},
+ {"TXT", NIE_PREFIX "comment", NULL, NULL, NULL, &filedata->id3v1_info->comment},
+ {"TPB", NCO_PREFIX "publisher", "publisher", NMM_PREFIX "Artist", NMM_PREFIX "artistName", &filedata->id3v1_info->artist},
/* TODO {"WAF", "DC:Location", NULL, NULL, NULL},
TODO {"WAR", "DC:Location", NULL, NULL, NULL},
TODO {"WAS", "DC:Location", NULL, NULL, NULL},
TODO {"WAF", "DC:Location", NULL, NULL, NULL}, */
- {"WCM", NIE_PREFIX "license", NULL, NULL, NULL},
- {"TYE", NIE_PREFIX "contentCreated"},
- {"TLA", NIE_PREFIX "language", NULL, NULL, NULL},
- {"TP1", NMM_PREFIX "performer", "artist", NMM_PREFIX "Artist", NMM_PREFIX "artistName"},
- {"TP2", NMM_PREFIX "performer", "artist", NMM_PREFIX "Artist", NMM_PREFIX "artistName"},
- {"TP3", NMM_PREFIX "performer", "artist", NMM_PREFIX "Artist", NMM_PREFIX "artistName"},
- {"TEN", NMM_PREFIX "performer", "artist", NMM_PREFIX "Artist", NMM_PREFIX "artistName"},
- {"TCO", NMM_PREFIX "genre", NULL, NULL, NULL},
- {"TCR", NIE_PREFIX "copyright", NULL, NULL, NULL},
- {"SLT", NIE_PREFIX "plainTextContent"}, /* Lyrics */
- {"TOA", NMM_PREFIX "performer", "artist", NMM_PREFIX "Artist", NMM_PREFIX "artistName"},
- {"TOT", NIE_PREFIX "musicAlbum", "album", NMM_PREFIX "MusicAlbum", NMM_PREFIX "albumTitle"},
- {"TOL", NMM_PREFIX "performer", "artist", NMM_PREFIX "Artist", NMM_PREFIX "artistName"},
- {"COM", NIE_PREFIX "comment", NULL, NULL, NULL},
- {"TLE", NMM_PREFIX "duration", NULL, NULL, NULL},
+ {"WCM", NIE_PREFIX "license", NULL, NULL, NULL, NULL},
+ {"TYE", NIE_PREFIX "contentCreated", NULL, NULL, NULL, &filedata->id3v1_info->year},
+ {"TLA", NIE_PREFIX "language", NULL, NULL, NULL, NULL},
+ {"TP1", NMM_PREFIX "performer", "artist", NMM_PREFIX "Artist", NMM_PREFIX "artistName", &filedata->id3v1_info->artist},
+ {"TP2", NMM_PREFIX "performer", "artist", NMM_PREFIX "Artist", NMM_PREFIX "artistName", &filedata->id3v1_info->artist},
+ {"TP3", NMM_PREFIX "performer", "artist", NMM_PREFIX "Artist", NMM_PREFIX "artistName", &filedata->id3v1_info->artist},
+ {"TEN", NMM_PREFIX "performer", "artist", NMM_PREFIX "Artist", NMM_PREFIX "artistName", &filedata->id3v1_info->artist},
+ {"TCO", NMM_PREFIX "genre", NULL, NULL, NULL, &filedata->id3v1_info->genre},
+ {"TCR", NIE_PREFIX "copyright", NULL, NULL, NULL, NULL},
+ {"SLT", NIE_PREFIX "plainTextContent", NULL, NULL, NULL, NULL}, /* Lyrics */
+ {"TOA", NMM_PREFIX "performer", "artist", NMM_PREFIX "Artist", NMM_PREFIX "artistName", &filedata->id3v1_info->artist},
+ {"TOT", NIE_PREFIX "musicAlbum", "album", NMM_PREFIX "MusicAlbum", NMM_PREFIX "albumTitle", &filedata->id3v1_info->album},
+ {"TOL", NMM_PREFIX "performer", "artist", NMM_PREFIX "Artist", NMM_PREFIX "artistName", &filedata->id3v1_info->artist},
+ {"COM", NIE_PREFIX "comment", NULL, NULL, NULL, &filedata->id3v1_info->comment},
+ {"TLE", NMM_PREFIX "duration", NULL, NULL, NULL, NULL},
{ NULL, 0, NULL, NULL, NULL},
};
@@ -1376,6 +1389,11 @@ get_id3v20_tags (const gchar *data,
filedata->duration = duration/1000;
}
+ if (tmap[i].nullify) {
+ /* prefer ID3v2 tag over ID3v1 tag */
+ g_free (*tmap[i].nullify);
+ *tmap[i].nullify = NULL;
+ }
if (tmap[i].urn) {
gchar *canonical_uri = tmap[i].urn[0]!=':'?tracker_uri_printf_escaped ("urn:%s:%s", tmap[i].urn, word):g_strdup(tmap[i].urn);
tracker_statement_list_insert (metadata, canonical_uri, RDF_TYPE, tmap[i].rdf_type);
@@ -1660,6 +1678,7 @@ extract_mp3 (const gchar *uri,
filedata.duration = 0;
filedata.albumartdata = NULL;
filedata.albumartsize = 0;
+ filedata.id3v1_info = &info;
filename = g_filename_from_uri (uri, NULL, NULL);
@@ -1722,6 +1741,9 @@ extract_mp3 (const gchar *uri,
RDF_TYPE,
NMM_PREFIX "MusicPiece");
+ /* Get other embedded tags */
+ audio_offset = parse_id3v2 (buffer, buffer_size, uri, metadata, &filedata);
+
if (!tracker_is_empty_string (info.title)) {
tracker_statement_list_insert (metadata, uri,
NIE_PREFIX "title",
@@ -1776,9 +1798,6 @@ extract_mp3 (const gchar *uri,
g_free (info.trackno);
g_free (info.genre);
- /* Get other embedded tags */
- audio_offset = parse_id3v2 (buffer, buffer_size, uri, metadata, &filedata);
-
/* Get mp3 stream info */
mp3_parse (buffer, buffer_size, audio_offset, uri, metadata, &filedata);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]