mirror of
https://github.com/taglib/taglib.git
synced 2025-05-27 21:20:26 -04:00
Add alternative methods to XiphComment::removeField().
Using XiphComment::removeField() may lead to a linkage error, however we can't fix the method itself without breaking the ABI or changing its behavior. So we added some alternative method and marked the old one deprecated.
This commit is contained in:
parent
ce1c03faa3
commit
84e3582332
@ -264,22 +264,36 @@ void Ogg::XiphComment::addField(const String &key, const String &value, bool rep
|
||||
|
||||
void Ogg::XiphComment::removeField(const String &key, const String &value)
|
||||
{
|
||||
if(!value.isNull()) {
|
||||
StringList::Iterator it = d->fieldListMap[key].begin();
|
||||
while(it != d->fieldListMap[key].end()) {
|
||||
if(value == *it)
|
||||
it = d->fieldListMap[key].erase(it);
|
||||
else
|
||||
it++;
|
||||
}
|
||||
}
|
||||
if(!value.isNull())
|
||||
removeFields(key, value);
|
||||
else
|
||||
d->fieldListMap.erase(key);
|
||||
removeFields(key);
|
||||
}
|
||||
|
||||
void Ogg::XiphComment::removeFields(const String &key)
|
||||
{
|
||||
d->fieldListMap.erase(key.upper());
|
||||
}
|
||||
|
||||
void Ogg::XiphComment::removeFields(const String &key, const String &value)
|
||||
{
|
||||
StringList &fields = d->fieldListMap[key.upper()];
|
||||
for(StringList::Iterator it = fields.begin(); it != fields.end(); ) {
|
||||
if(*it == value)
|
||||
it = fields.erase(it);
|
||||
else
|
||||
++it;
|
||||
}
|
||||
}
|
||||
|
||||
void Ogg::XiphComment::removeAllFields()
|
||||
{
|
||||
d->fieldListMap.clear();
|
||||
}
|
||||
|
||||
bool Ogg::XiphComment::contains(const String &key) const
|
||||
{
|
||||
return d->fieldListMap.contains(key) && !d->fieldListMap[key].isEmpty();
|
||||
return !d->fieldListMap[key.upper()].isEmpty();
|
||||
}
|
||||
|
||||
ByteVector Ogg::XiphComment::render() const
|
||||
|
@ -181,9 +181,33 @@ namespace TagLib {
|
||||
/*!
|
||||
* Remove the field specified by \a key with the data \a value. If
|
||||
* \a value is null, all of the fields with the given key will be removed.
|
||||
*
|
||||
* \deprecated Using this method may lead to a linkage error.
|
||||
*/
|
||||
// BIC: remove and merge with below
|
||||
void removeField(const String &key, const String &value = String::null);
|
||||
|
||||
/*!
|
||||
* Remove all the fields specified by \a key.
|
||||
*
|
||||
* \see removeAllFields()
|
||||
*/
|
||||
void removeFields(const String &key);
|
||||
|
||||
/*!
|
||||
* Remove all the fields specified by \a key with the data \a value.
|
||||
*
|
||||
* \see removeAllFields()
|
||||
*/
|
||||
void removeFields(const String &key, const String &value);
|
||||
|
||||
/*!
|
||||
* Remove all the fields in the comment.
|
||||
*
|
||||
* \see removeFields()
|
||||
*/
|
||||
void removeAllFields();
|
||||
|
||||
/*!
|
||||
* Returns true if the field is contained within the comment.
|
||||
*
|
||||
|
@ -1,7 +1,7 @@
|
||||
#include <string>
|
||||
#include <stdio.h>
|
||||
#include <flacfile.h>
|
||||
#include <xiphcomment.h>
|
||||
#include <vorbisfile.h>
|
||||
#include <tpropertymap.h>
|
||||
#include <tdebug.h>
|
||||
#include <cppunit/extensions/HelperMacros.h>
|
||||
@ -19,6 +19,7 @@ class TestXiphComment : public CppUnit::TestFixture
|
||||
CPPUNIT_TEST(testSetTrack);
|
||||
CPPUNIT_TEST(testInvalidKeys);
|
||||
CPPUNIT_TEST(testClearComment);
|
||||
CPPUNIT_TEST(testRemoveFields);
|
||||
CPPUNIT_TEST_SUITE_END();
|
||||
|
||||
public:
|
||||
@ -78,20 +79,46 @@ public:
|
||||
|
||||
void testClearComment()
|
||||
{
|
||||
ScopedFileCopy copy("no-tags", ".flac");
|
||||
ScopedFileCopy copy("empty", ".ogg");
|
||||
|
||||
{
|
||||
FLAC::File f(copy.fileName().c_str());
|
||||
f.xiphComment()->addField("COMMENT", "Comment1");
|
||||
Ogg::Vorbis::File f(copy.fileName().c_str());
|
||||
f.tag()->addField("COMMENT", "Comment1");
|
||||
f.save();
|
||||
}
|
||||
{
|
||||
FLAC::File f(copy.fileName().c_str());
|
||||
f.xiphComment()->setComment("");
|
||||
CPPUNIT_ASSERT_EQUAL(String(""), f.xiphComment()->comment());
|
||||
Ogg::Vorbis::File f(copy.fileName().c_str());
|
||||
f.tag()->setComment("");
|
||||
CPPUNIT_ASSERT_EQUAL(String(""), f.tag()->comment());
|
||||
}
|
||||
}
|
||||
|
||||
void testRemoveFields()
|
||||
{
|
||||
Ogg::Vorbis::File f(TEST_FILE_PATH_C("empty.ogg"));
|
||||
f.tag()->addField("title", "Title1");
|
||||
f.tag()->addField("Title", "Title1", false);
|
||||
f.tag()->addField("titlE", "Title2", false);
|
||||
f.tag()->addField("TITLE", "Title3", false);
|
||||
f.tag()->addField("artist", "Artist1");
|
||||
f.tag()->addField("ARTIST", "Artist2", false);
|
||||
CPPUNIT_ASSERT_EQUAL(String("Title1 Title1 Title2 Title3"), f.tag()->title());
|
||||
CPPUNIT_ASSERT_EQUAL(String("Artist1 Artist2"), f.tag()->artist());
|
||||
|
||||
f.tag()->removeFields("title", "Title1");
|
||||
CPPUNIT_ASSERT_EQUAL(String("Title2 Title3"), f.tag()->title());
|
||||
CPPUNIT_ASSERT_EQUAL(String("Artist1 Artist2"), f.tag()->artist());
|
||||
|
||||
f.tag()->removeFields("Artist");
|
||||
CPPUNIT_ASSERT_EQUAL(String("Title2 Title3"), f.tag()->title());
|
||||
CPPUNIT_ASSERT(f.tag()->artist().isEmpty());
|
||||
|
||||
f.tag()->removeAllFields();
|
||||
CPPUNIT_ASSERT(f.tag()->title().isEmpty());
|
||||
CPPUNIT_ASSERT(f.tag()->artist().isEmpty());
|
||||
CPPUNIT_ASSERT_EQUAL(String("Xiph.Org libVorbis I 20050304"), f.tag()->vendorID());
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
CPPUNIT_TEST_SUITE_REGISTRATION(TestXiphComment);
|
||||
|
Loading…
Reference in New Issue
Block a user