}
// Create the tags if we've been asked to. Copy the values from the tag that
- // does exist into the new tag.
+ // does exist into the new tag, except if the existing tag is to be stripped.
- if((tags & ID3v2) && ID3v1Tag())
+ if((tags & ID3v2) && ID3v1Tag() && !(stripOthers && !(tags & ID3v1)))
Tag::duplicate(ID3v1Tag(), ID3v2Tag(true), false);
- if((tags & ID3v1) && d->tag[ID3v2Index])
+ if((tags & ID3v1) && d->tag[ID3v2Index] && !(stripOthers && !(tags & ID3v2)))
Tag::duplicate(ID3v2Tag(), ID3v1Tag(true), false);
bool success = true;
CPPUNIT_TEST(testCompressedFrameWithBrokenLength);
CPPUNIT_TEST(testPropertyInterface);
CPPUNIT_TEST(testPropertyInterface2);
+ CPPUNIT_TEST(testSaveAndStripID3v1ShouldNotAddFrameFromID3v1ToId3v2);
CPPUNIT_TEST_SUITE_END();
public:
CPPUNIT_ASSERT(tag.frameList("TIPL").isEmpty());
}
+ void testSaveAndStripID3v1ShouldNotAddFrameFromID3v1ToId3v2()
+ {
+ ScopedFileCopy copy("xing", ".mp3");
+ string newname = copy.fileName();
+
+ {
+ MPEG::File foo(newname.c_str());
+ foo.tag()->setArtist("Artist");
+ foo.save(MPEG::File::ID3v1 | MPEG::File::ID3v2);
+ }
+
+ {
+ MPEG::File bar(newname.c_str());
+ bar.ID3v2Tag()->removeFrames("TPE1");
+ // Should strip ID3v1 here and not add old values to ID3v2 again
+ bar.save(MPEG::File::ID3v2, true);
+ }
+
+ MPEG::File f(newname.c_str());
+ CPPUNIT_ASSERT(!f.ID3v2Tag()->frameListMap().contains("TPE1"));
+ }
+
};
CPPUNIT_TEST_SUITE_REGISTRATION(TestID3v2);