From 5e1eb18df931a85df69fc573e8fd389b2a773fdd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Lalinsk=C3=BD?= Date: Sat, 11 Jul 2009 13:17:06 +0000 Subject: [PATCH] Try to read track also from TRACKNUM and year from YEAR. Patch by David Bishop BUG:144396 git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@994811 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- taglib/ogg/xiphcomment.cpp | 18 +++++++---- tests/CMakeLists.txt | 2 ++ tests/test_xiphcomment.cpp | 64 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 78 insertions(+), 6 deletions(-) create mode 100644 tests/test_xiphcomment.cpp diff --git a/taglib/ogg/xiphcomment.cpp b/taglib/ogg/xiphcomment.cpp index d7c5c5c4..406137a0 100644 --- a/taglib/ogg/xiphcomment.cpp +++ b/taglib/ogg/xiphcomment.cpp @@ -103,16 +103,20 @@ String Ogg::XiphComment::genre() const TagLib::uint Ogg::XiphComment::year() const { - if(d->fieldListMap["DATE"].isEmpty()) - return 0; - return d->fieldListMap["DATE"].front().toInt(); + if(!d->fieldListMap["DATE"].isEmpty()) + return d->fieldListMap["DATE"].front().toInt(); + if(!d->fieldListMap["YEAR"].isEmpty()) + return d->fieldListMap["YEAR"].front().toInt(); + return 0; } TagLib::uint Ogg::XiphComment::track() const { - if(d->fieldListMap["TRACKNUMBER"].isEmpty()) - return 0; - return d->fieldListMap["TRACKNUMBER"].front().toInt(); + if(!d->fieldListMap["TRACKNUMBER"].isEmpty()) + return d->fieldListMap["TRACKNUMBER"].front().toInt(); + if(!d->fieldListMap["TRACKNUM"].isEmpty()) + return d->fieldListMap["TRACKNUM"].front().toInt(); + return 0; } void Ogg::XiphComment::setTitle(const String &s) @@ -142,6 +146,7 @@ void Ogg::XiphComment::setGenre(const String &s) void Ogg::XiphComment::setYear(uint i) { + removeField("YEAR"); if(i == 0) removeField("DATE"); else @@ -150,6 +155,7 @@ void Ogg::XiphComment::setYear(uint i) void Ogg::XiphComment::setTrack(uint i) { + removeField("TRACKNUM"); if(i == 0) removeField("TRACKNUMBER"); else diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index bde62c19..18b62a54 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -10,6 +10,7 @@ INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/mpeg ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/mp4 ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/trueaudio + ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/ogg ) SET(test_runner_SRCS @@ -24,6 +25,7 @@ SET(test_runner_SRCS test_fileref.cpp test_id3v1.cpp test_id3v2.cpp + test_xiphcomment.cpp ) IF(WITH_MP4) SET(test_runner_SRCS ${test_runner_SRCS} test_mp4.cpp) diff --git a/tests/test_xiphcomment.cpp b/tests/test_xiphcomment.cpp new file mode 100644 index 00000000..359206e8 --- /dev/null +++ b/tests/test_xiphcomment.cpp @@ -0,0 +1,64 @@ +#include +#include +#include +#include +#include +#include "utils.h" + +using namespace std; +using namespace TagLib; + +class TestXiphComment : public CppUnit::TestFixture +{ + CPPUNIT_TEST_SUITE(TestXiphComment); + CPPUNIT_TEST(testYear); + CPPUNIT_TEST(testSetYear); + CPPUNIT_TEST(testTrack); + CPPUNIT_TEST(testSetTrack); + CPPUNIT_TEST_SUITE_END(); + +public: + + void testYear() + { + Ogg::XiphComment cmt; + CPPUNIT_ASSERT_EQUAL(TagLib::uint(0), cmt.year()); + cmt.addField("YEAR", "2009"); + CPPUNIT_ASSERT_EQUAL(TagLib::uint(2009), cmt.year()); + cmt.addField("DATE", "2008"); + CPPUNIT_ASSERT_EQUAL(TagLib::uint(2008), cmt.year()); + } + + void testSetYear() + { + Ogg::XiphComment cmt; + cmt.addField("YEAR", "2009"); + cmt.addField("DATE", "2008"); + cmt.setYear(1995); + CPPUNIT_ASSERT(cmt.fieldListMap()["YEAR"].isEmpty()); + CPPUNIT_ASSERT_EQUAL(String("1995"), cmt.fieldListMap()["DATE"].front()); + } + + void testTrack() + { + Ogg::XiphComment cmt; + CPPUNIT_ASSERT_EQUAL(TagLib::uint(0), cmt.track()); + cmt.addField("TRACKNUM", "7"); + CPPUNIT_ASSERT_EQUAL(TagLib::uint(7), cmt.track()); + cmt.addField("TRACKNUMBER", "8"); + CPPUNIT_ASSERT_EQUAL(TagLib::uint(8), cmt.track()); + } + + void testSetTrack() + { + Ogg::XiphComment cmt; + cmt.addField("TRACKNUM", "7"); + cmt.addField("TRACKNUMBER", "8"); + cmt.setTrack(3); + CPPUNIT_ASSERT(cmt.fieldListMap()["TRACKNUM"].isEmpty()); + CPPUNIT_ASSERT_EQUAL(String("3"), cmt.fieldListMap()["TRACKNUMBER"].front()); + } + +}; + +CPPUNIT_TEST_SUITE_REGISTRATION(TestXiphComment);