return previousFrameOffset(ID3v1Tag() ? d->ID3v1Location - 1 : length());
}
+bool MPEG::File::hasID3v1Tag() const
+{
+ return d->hasID3v1;
+}
+
+bool MPEG::File::hasID3v2Tag() const
+{
+ return d->hasID3v2;
+}
+
+bool MPEG::File::hasAPETag() const
+{
+ return d->hasAPE;
+}
+
////////////////////////////////////////////////////////////////////////////////
// private members
////////////////////////////////////////////////////////////////////////////////
*/
long lastFrameOffset();
+ /*!
+ * Returns whether or not the file on disk contains ID3v1 tag.
+ */
+ bool hasID3v1Tag() const;
+
+ /*!
+ * Returns whether or not the file on disk contains ID3v2 tag.
+ */
+ bool hasID3v2Tag() const;
+
+ /*!
+ * Returns whether or not the file on disk contains APE tag.
+ */
+ bool hasAPETag() const;
+
private:
File(const File &);
File &operator=(const File &);
String xxx = ByteVector(254, 'X');
MPEG::File f(newname.c_str());
+ CPPUNIT_ASSERT_EQUAL(false, f.hasID3v2Tag());
+
f.tag()->setTitle(xxx);
f.tag()->setArtist("Artist A");
f.save(MPEG::File::AllTags, true, 4);
+ CPPUNIT_ASSERT_EQUAL(true, f.hasID3v2Tag());
MPEG::File f2(newname.c_str());
CPPUNIT_ASSERT_EQUAL(TagLib::uint(4), f2.ID3v2Tag()->header()->majorVersion());
String xxx = ByteVector(254, 'X');
MPEG::File f(newname.c_str());
+ CPPUNIT_ASSERT_EQUAL(false, f.hasID3v2Tag());
+
f.tag()->setTitle(xxx);
f.tag()->setArtist("Artist A");
f.save(MPEG::File::AllTags, true, 3);
+ CPPUNIT_ASSERT_EQUAL(true, f.hasID3v2Tag());
MPEG::File f2(newname.c_str());
CPPUNIT_ASSERT_EQUAL(TagLib::uint(3), f2.ID3v2Tag()->header()->majorVersion());