summaryrefslogtreecommitdiff
path: root/firmware
diff options
context:
space:
mode:
authorRobert Keevil <rkeevil+rockbox@gmail.com>2008-10-07 18:39:44 +0000
committerRobert Keevil <rkeevil+rockbox@gmail.com>2008-10-07 18:39:44 +0000
commit2c170356f38f5630b9fefdc5b1e7e57babb5cc40 (patch)
tree9ba565416427f76e6cf4754ef199ed02f804edf6 /firmware
parent7eb194477a19a12d76bceb64108ffad2da784c9f (diff)
downloadrockbox-2c170356f38f5630b9fefdc5b1e7e57babb5cc40.zip
rockbox-2c170356f38f5630b9fefdc5b1e7e57babb5cc40.tar.gz
rockbox-2c170356f38f5630b9fefdc5b1e7e57babb5cc40.tar.bz2
rockbox-2c170356f38f5630b9fefdc5b1e7e57babb5cc40.tar.xz
FS#9139 - support for ver 1.1 scrobbler log files. Upload any old files first - uploading software may need updating, see the LastFMLog wiki page
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@18732 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware')
-rw-r--r--firmware/export/id3.h3
-rw-r--r--firmware/id3.c28
2 files changed, 31 insertions, 0 deletions
diff --git a/firmware/export/id3.h b/firmware/export/id3.h
index 3e4db06..da2faf1 100644
--- a/firmware/export/id3.h
+++ b/firmware/export/id3.h
@@ -223,6 +223,9 @@ struct mp3entry {
/* Cuesheet support */
int cuesheet_type; /* 0: none, 1: external, 2: embedded */
+
+ /* Musicbrainz Track ID */
+ char* mb_track_id;
};
enum {
diff --git a/firmware/id3.c b/firmware/id3.c
index 3b7d165..c1541e3 100644
--- a/firmware/id3.c
+++ b/firmware/id3.c
@@ -486,6 +486,31 @@ static int parserva2( struct mp3entry* entry, char* tag, int bufferpos )
}
#endif
+static int parsembtid( struct mp3entry* entry, char* tag, int bufferpos )
+{
+ char* value = NULL;
+ int desc_len = strlen(tag);
+ /*DEBUGF("MBID len: %d\n", desc_len);*/
+ int value_len = 0;
+
+ if ((tag - entry->id3v2buf + desc_len + 2) < bufferpos)
+ {
+ value = tag + desc_len + 1;
+
+ if (strcasecmp(tag, "http://musicbrainz.org") == 0)
+ {
+ /* Musicbrainz track IDs are always 36 chars long plus null */
+ value_len = 37;
+
+ entry->mb_track_id = value;
+
+ /*DEBUGF("ENTRY: %s LEN: %d\n", entry->mb_track_id, strlen(entry->mb_track_id));*/
+ }
+ }
+
+ return tag - entry->id3v2buf + value_len;
+}
+
static const struct tag_resolver taglist[] = {
{ "TPE1", 4, offsetof(struct mp3entry, artist), NULL, false },
{ "TP1", 3, offsetof(struct mp3entry, artist), NULL, false },
@@ -511,6 +536,7 @@ static const struct tag_resolver taglist[] = {
{ "TXXX", 4, 0, &parseuser, false },
{ "RVA2", 4, 0, &parserva2, true },
#endif
+ { "UFID", 4, 0, &parsembtid, false },
};
#define TAGLIST_SIZE ((int)(sizeof(taglist) / sizeof(taglist[0])))
@@ -1261,6 +1287,8 @@ void adjust_mp3entry(struct mp3entry *entry, void *dest, const void *orig)
if (entry->album_gain_string)
entry->album_gain_string += offset;
#endif
+ if (entry->mb_track_id)
+ entry->mb_track_id += offset;
}
void copy_mp3entry(struct mp3entry *dest, const struct mp3entry *orig)