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
/*!
* 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.
*
#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>
CPPUNIT_TEST(testSetTrack);
CPPUNIT_TEST(testInvalidKeys);
CPPUNIT_TEST(testClearComment);
+ CPPUNIT_TEST(testRemoveFields);
CPPUNIT_TEST_SUITE_END();
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);