]> granicus.if.org Git - taglib/commitdiff
Implement missing AIFF::File::hasID3v2Tag().
authorTsuda Kageyu <tsuda.kageyu@gmail.com>
Mon, 5 Jan 2015 09:20:31 +0000 (18:20 +0900)
committerTsuda Kageyu <tsuda.kageyu@gmail.com>
Mon, 5 Jan 2015 09:20:31 +0000 (18:20 +0900)
taglib/riff/aiff/aifffile.cpp
tests/test_aiff.cpp

index d20c148beec1c62b170197e21ef785fd5eb824ce..2f79920c36844ce99de516f8ffb01abffbaf33d2 100644 (file)
@@ -39,7 +39,8 @@ public:
   FilePrivate() :
     properties(0),
     tag(0),
-    tagChunkID("ID3 ")
+    tagChunkID("ID3 "),
+    hasID3v2(false)
   {
 
   }
@@ -53,6 +54,8 @@ public:
   Properties *properties;
   ID3v2::Tag *tag;
   ByteVector tagChunkID;
+
+  bool hasID3v2;
 };
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -100,7 +103,6 @@ PropertyMap RIFF::AIFF::File::setProperties(const PropertyMap &properties)
   return d->tag->setProperties(properties);
 }
 
-
 RIFF::AIFF::Properties *RIFF::AIFF::File::audioProperties() const
 {
   return d->properties;
@@ -119,10 +121,15 @@ bool RIFF::AIFF::File::save()
   }
 
   setChunkData(d->tagChunkID, d->tag->render());
+  d->hasID3v2 = true;
 
   return true;
 }
 
+bool RIFF::AIFF::File::hasID3v2Tag() const
+{
+  return d->hasID3v2;
+}
 
 ////////////////////////////////////////////////////////////////////////////////
 // private members
@@ -134,6 +141,7 @@ void RIFF::AIFF::File::read(bool readProperties, Properties::ReadStyle propertie
     if(chunkName(i) == "ID3 " || chunkName(i) == "id3 ") {
       d->tagChunkID = chunkName(i);
       d->tag = new ID3v2::Tag(this, chunkOffset(i));
+      d->hasID3v2 = true;
     }
     else if(chunkName(i) == "COMM" && readProperties)
       d->properties = new Properties(chunkData(i), propertiesStyle);
index 495049b232489798785cdc2192eff4d375142470..4df8d893d08076e08fbace418b79ed2ec707171d 100644 (file)
@@ -13,6 +13,7 @@ class TestAIFF : public CppUnit::TestFixture
 {
   CPPUNIT_TEST_SUITE(TestAIFF);
   CPPUNIT_TEST(testReading);
+  CPPUNIT_TEST(testSaveID3v2);
   CPPUNIT_TEST(testAiffCProperties);
   CPPUNIT_TEST(testFuzzedFile1);
   CPPUNIT_TEST(testFuzzedFile2);
@@ -26,6 +27,25 @@ public:
     CPPUNIT_ASSERT_EQUAL(705, f.audioProperties()->bitrate());
   }
 
+  void testSaveID3v2()
+  {
+    ScopedFileCopy copy("empty", ".aiff");
+    string newname = copy.fileName();
+
+    {
+      RIFF::AIFF::File f(newname.c_str());
+      CPPUNIT_ASSERT(!f.hasID3v2Tag());
+      f.tag()->setTitle(L"TitleXXX");
+      f.save();
+    }
+
+    {
+      RIFF::AIFF::File f(newname.c_str());
+      CPPUNIT_ASSERT(f.hasID3v2Tag());
+      CPPUNIT_ASSERT_EQUAL(String(L"TitleXXX"), f.tag()->title());
+    }
+  }
+
   void testAiffCProperties()
   {
     RIFF::AIFF::File f(TEST_FILE_PATH_C("alaw.aifc"));