Don't overwrite fields that already exist

We can have multiple fields in the Vorbis Comment (e.g. two artist names),
but TagUnion only takes the first one, so it will effectively strip the
extra fields.

https://bugs.kde.org/show_bug.cgi?id=268854
This commit is contained in:
Lukáš Lalinský 2011-03-19 07:37:28 +01:00
parent d3e79ddc38
commit f624d6e2af
2 changed files with 23 additions and 1 deletions

View File

@ -149,7 +149,7 @@ bool FLAC::File::save()
// Create new vorbis comments
Tag::duplicate(&d->tag, xiphComment(true), true);
Tag::duplicate(&d->tag, xiphComment(true), false);
d->xiphCommentData = xiphComment()->render(false);

View File

@ -5,6 +5,7 @@
#include <tstringlist.h>
#include <tbytevectorlist.h>
#include <flacfile.h>
#include <xiphcomment.h>
#include "utils.h"
using namespace std;
@ -20,6 +21,7 @@ class TestFLAC : public CppUnit::TestFixture
CPPUNIT_TEST(testReplacePicture);
CPPUNIT_TEST(testRemoveAllPictures);
CPPUNIT_TEST(testRepeatedSave);
CPPUNIT_TEST(testSaveMultipleValues);
CPPUNIT_TEST_SUITE_END();
public:
@ -186,6 +188,26 @@ public:
CPPUNIT_ASSERT_EQUAL(String("NEW TITLE 2"), tag->title());
}
void testSaveMultipleValues()
{
ScopedFileCopy copy("silence-44-s", ".flac", false);
string newname = copy.fileName();
FLAC::File *f = new FLAC::File(newname.c_str());
Ogg::XiphComment* c = f->xiphComment(true);
c->addField("ARTIST", "artist 1", true);
c->addField("ARTIST", "artist 2", false);
f->save();
delete f;
f = new FLAC::File(newname.c_str());
c = f->xiphComment(true);
Ogg::FieldListMap m = c->fieldListMap();
CPPUNIT_ASSERT_EQUAL(TagLib::uint(2), m["ARTIST"].size());
CPPUNIT_ASSERT_EQUAL(String("artist 1"), m["ARTIST"][0]);
CPPUNIT_ASSERT_EQUAL(String("artist 2"), m["ARTIST"][1]);
}
};
CPPUNIT_TEST_SUITE_REGISTRATION(TestFLAC);