From 9ae596a2e5495a54a9042a4fc1e978b6a3b8b596 Mon Sep 17 00:00:00 2001 From: Scott Wheeler <wheeler@kde.org> Date: Wed, 30 Jan 2008 11:29:23 +0000 Subject: [PATCH] include APE tags in the unified tag, switch these over to some not-so-pretty but more concise macros. WISH:141381 git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@768559 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- taglib/mpeg/mpegfile.cpp | 108 ++++++++++++++++----------------------- 1 file changed, 45 insertions(+), 63 deletions(-) diff --git a/taglib/mpeg/mpegfile.cpp b/taglib/mpeg/mpegfile.cpp index 5eae5f1d..f677a760 100644 --- a/taglib/mpeg/mpegfile.cpp +++ b/taglib/mpeg/mpegfile.cpp @@ -37,6 +37,37 @@ using namespace TagLib; +#define combine(method) \ + if(file->ID3v2Tag() && !file->ID3v2Tag()->method().isEmpty()) \ + return file->ID3v2Tag()->method(); \ + \ + if(file->APETag() && !file->APETag()->method().isEmpty()) \ + return file->APETag()->method(); \ + \ + if(file->ID3v1Tag()) \ + return file->ID3v1Tag()->method(); \ + \ + return String::null \ + +#define combineNumber(method) \ + if(file->ID3v2Tag() && file->ID3v2Tag()->method() > 0) \ + return file->ID3v2Tag()->method(); \ + \ + if(file->APETag() && file->APETag()->method() > 0) \ + return file->APETag()->method(); \ + if(file->ID3v1Tag()) \ + return file->ID3v1Tag()->method(); \ + \ + return 0 + +#define setCombined(method, value) \ + file->ID3v2Tag(true)->set##method(value); \ + file->ID3v1Tag(true)->set##method(value); \ + if(file->APETag(false)) \ + file->APETag(false)->set##method(value) + + + namespace TagLib { /*! * A union of the ID3v2 and ID3v1 tags. @@ -48,121 +79,72 @@ namespace TagLib { virtual String title() const { - if(file->ID3v2Tag() && !file->ID3v2Tag()->title().isEmpty()) - return file->ID3v2Tag()->title(); - - if(file->ID3v1Tag()) - return file->ID3v1Tag()->title(); - - return String::null; + combine(title); } virtual String artist() const { - if(file->ID3v2Tag() && !file->ID3v2Tag()->artist().isEmpty()) - return file->ID3v2Tag()->artist(); - - if(file->ID3v1Tag()) - return file->ID3v1Tag()->artist(); - - return String::null; + combine(artist); } virtual String album() const { - if(file->ID3v2Tag() && !file->ID3v2Tag()->album().isEmpty()) - return file->ID3v2Tag()->album(); - - if(file->ID3v1Tag()) - return file->ID3v1Tag()->album(); - - return String::null; + combine(album); } virtual String comment() const { - if(file->ID3v2Tag() && !file->ID3v2Tag()->comment().isEmpty()) - return file->ID3v2Tag()->comment(); - - if(file->ID3v1Tag()) - return file->ID3v1Tag()->comment(); - - return String::null; + combine(comment); } virtual String genre() const { - if(file->ID3v2Tag() && !file->ID3v2Tag()->genre().isEmpty()) - return file->ID3v2Tag()->genre(); - - if(file->ID3v1Tag()) - return file->ID3v1Tag()->genre(); - - return String::null; + combine(genre); } virtual uint year() const { - if(file->ID3v2Tag() && file->ID3v2Tag()->year() > 0) - return file->ID3v2Tag()->year(); - - if(file->ID3v1Tag()) - return file->ID3v1Tag()->year(); - - return 0; + combineNumber(year); } virtual uint track() const { - if(file->ID3v2Tag() && file->ID3v2Tag()->track() > 0) - return file->ID3v2Tag()->track(); - - if(file->ID3v1Tag()) - return file->ID3v1Tag()->track(); - - return 0; + combineNumber(track); } virtual void setTitle(const String &s) { - file->ID3v2Tag(true)->setTitle(s); - file->ID3v1Tag(true)->setTitle(s); + setCombined(Title, s); } virtual void setArtist(const String &s) { - file->ID3v2Tag(true)->setArtist(s); - file->ID3v1Tag(true)->setArtist(s); + setCombined(Artist, s); } virtual void setAlbum(const String &s) { - file->ID3v2Tag(true)->setAlbum(s); - file->ID3v1Tag(true)->setAlbum(s); + setCombined(Album, s); } virtual void setComment(const String &s) { - file->ID3v2Tag(true)->setComment(s); - file->ID3v1Tag(true)->setComment(s); + setCombined(Comment, s); } virtual void setGenre(const String &s) { - file->ID3v2Tag(true)->setGenre(s); - file->ID3v1Tag(true)->setGenre(s); + setCombined(Genre, s); } virtual void setYear(uint i) { - file->ID3v2Tag(true)->setYear(i); - file->ID3v1Tag(true)->setYear(i); + setCombined(Year, i); } virtual void setTrack(uint i) { - file->ID3v2Tag(true)->setTrack(i); - file->ID3v1Tag(true)->setTrack(i); + setCombined(Track, i); } private: -- 2.40.0