]> granicus.if.org Git - taglib/commitdiff
Added the methods to check which kind of tags the file actually has.
authorTsuda Kageyu <tsuda.kageyu@gmail.com>
Thu, 4 Jul 2013 09:11:33 +0000 (18:11 +0900)
committerTsuda Kageyu <tsuda.kageyu@gmail.com>
Thu, 4 Jul 2013 09:11:33 +0000 (18:11 +0900)
17 files changed:
taglib/ape/apefile.cpp
taglib/ape/apefile.h
taglib/flac/flacfile.cpp
taglib/flac/flacfile.h
taglib/mpc/mpcfile.cpp
taglib/mpc/mpcfile.h
taglib/mpeg/mpegfile.h
taglib/ogg/flac/oggflacfile.cpp
taglib/ogg/flac/oggflacfile.h
taglib/riff/aiff/aifffile.cpp
taglib/riff/aiff/aifffile.h
taglib/riff/wav/wavfile.cpp
taglib/riff/wav/wavfile.h
taglib/trueaudio/trueaudiofile.cpp
taglib/trueaudio/trueaudiofile.h
taglib/wavpack/wavpackfile.cpp
taglib/wavpack/wavpackfile.h

index 415eb17edaf808b5ff0526c06911fa2684e61dd1..3cb9d9a70459cf53407f3e80bd1a0346c1a17389 100644 (file)
@@ -47,7 +47,7 @@ using namespace TagLib;
 
 namespace
 {
-  enum { ApeAPEIndex, ApeID3v1Index };
+  enum { ApeAPEIndex = 0, ApeID3v1Index = 1 };
 }
 
 class APE::File::FilePrivate
@@ -235,6 +235,16 @@ void APE::File::strip(int tags)
   }
 }
 
+bool APE::File::hasAPETag() const
+{
+  return d->hasAPE;
+}
+
+bool APE::File::hasID3v1Tag() const
+{
+  return d->hasID3v1;
+}
+
 ////////////////////////////////////////////////////////////////////////////////
 // private members
 ////////////////////////////////////////////////////////////////////////////////
index 5ccef72fa6134f77dab460e6e93622206ab6adc7..5530edf34f88d80170416743361dedf9b53f23be 100644 (file)
@@ -186,6 +186,16 @@ namespace TagLib {
        */
       void strip(int tags = AllTags);
 
+      /*!
+       * Returns whether or not the file on disk contains an APE tag.
+       */
+      bool hasAPETag() const;
+
+      /*!
+       * Returns whether or not the file on disk contains an ID3v1 tag.
+       */
+      bool hasID3v1Tag() const;
+
     private:
       File(const File &);
       File &operator=(const File &);
index 9f6251cf828e74e8fd97af16981dda76484fa2c6..823170aae602d0e40f0548a97edeb651ddfb8aa4 100644 (file)
@@ -552,3 +552,17 @@ void FLAC::File::removePictures()
   d->blocks = newBlocks;
 }
 
+bool FLAC::File::hasXiphComment() const
+{
+  return d->hasXiphComment;
+}
+
+bool FLAC::File::hasID3v1Tag() const
+{
+  return d->hasID3v1;
+}
+
+bool FLAC::File::hasID3v2Tag() const
+{
+  return d->hasID3v2;
+}
index 95b52142689a27d18027010bfc331da32f1991ad..e159c505d80685dd0d7eeb14ac058ad47c793068 100644 (file)
@@ -246,6 +246,21 @@ namespace TagLib {
        */
       void addPicture(Picture *picture);
 
+      /*!
+       * Returns whether or not the file on disk contains a Xiph comment.
+       */
+      bool hasXiphComment() const;
+
+      /*!
+       * Returns whether or not the file on disk contains an ID3v1 tag.
+       */
+      bool hasID3v1Tag() const;
+
+      /*!
+       * Returns whether or not the file on disk contains an ID3v2 tag.
+       */
+      bool hasID3v2Tag() const;
+
     private:
       File(const File &);
       File &operator=(const File &);
index ee992ebc3a67882478bb2949dfb7ffbd388ac343..979c035e9affa510cc4f6b05da0d202f7df70528 100644 (file)
@@ -39,7 +39,7 @@ using namespace TagLib;
 
 namespace
 {
-  enum { MPCAPEIndex, MPCID3v1Index };
+  enum { MPCAPEIndex = 0, MPCID3v1Index = 1 };
 }
 
 class MPC::File::FilePrivate
@@ -256,6 +256,15 @@ void MPC::File::remove(int tags)
   strip(tags);
 }
 
+bool MPC::File::hasID3v1Tag() const
+{
+  return d->hasID3v1;
+}
+
+bool MPC::File::hasAPETag() const
+{
+  return d->hasAPE;
+}
 
 ////////////////////////////////////////////////////////////////////////////////
 // private members
index ea66a5f905807c2dcc93ada5908ecbaed1a8e7fd..4db906b57d7cb8beeb9d32e0374084b4c1e200b6 100644 (file)
@@ -187,6 +187,16 @@ namespace TagLib {
        */
       void remove(int tags = AllTags);
 
+      /*!
+       * Returns whether or not the file on disk contains an ID3v1 tag.
+       */
+      bool hasID3v1Tag() const;
+
+      /*!
+       * Returns whether or not the file on disk contains an APE tag.
+       */
+      bool hasAPETag() const;
+
     private:
       File(const File &);
       File &operator=(const File &);
index ef3a2b8f9ccfb7f42b4d26b4ed4f9af4c229db8f..be94be7f99f7ee45963538685bd86600afb1e8c3 100644 (file)
@@ -327,17 +327,17 @@ namespace TagLib {
       long lastFrameOffset();
 
       /*!
-       * Returns whether or not the file on disk contains ID3v1 tag.
+       * Returns whether or not the file on disk contains an ID3v1 tag.
        */
       bool hasID3v1Tag() const;
 
       /*!
-       * Returns whether or not the file on disk contains ID3v2 tag.
+       * Returns whether or not the file on disk contains an ID3v2 tag.
        */
       bool hasID3v2Tag() const;
 
       /*!
-       * Returns whether or not the file on disk contains APE tag.
+       * Returns whether or not the file on disk contains an APE tag.
        */
       bool hasAPETag() const;
 
index 18506b2e6a223714aae3eddf80c9cebda2781868..d440a0c6025cf2ca55bd11e92c9803bb7ffb848d 100644 (file)
@@ -287,3 +287,8 @@ void Ogg::FLAC::File::scan()
 
   d->scanned = true;
 }
+
+bool Ogg::FLAC::File::hasXiphComment() const
+{
+  return d->hasXiphComment;
+}
index 4b83df1f1d759048e982dfcedcbd89938fa6c875..77280eff6498d4da60a37d54fd174481a171858c 100644 (file)
@@ -128,6 +128,11 @@ namespace TagLib {
        */
       long streamLength();
 
+      /*!
+       * Returns whether or not the file on disk contains a Xiph comment.
+       */
+      bool hasXiphComment() const;
+
     private:
       File(const File &);
       File &operator=(const File &);
index 19b80c8af4a7a7a575c2d0fa68d70f3f4fe2b8e4..d20c148beec1c62b170197e21ef785fd5eb824ce 100644 (file)
@@ -123,6 +123,7 @@ bool RIFF::AIFF::File::save()
   return true;
 }
 
+
 ////////////////////////////////////////////////////////////////////////////////
 // private members
 ////////////////////////////////////////////////////////////////////////////////
index 4ddd43e8f95937ca44124b4fbb0fcbe3bfd893a9..ef72dcd7b168ddc75b534caeffe97b5ed3cd6301 100644 (file)
@@ -113,6 +113,11 @@ namespace TagLib {
          */
         virtual bool save();
 
+        /*!
+         * Returns whether or not the file on disk contains an ID3v2 tag.
+         */
+        bool hasID3v2Tag() const;
+
       private:
         File(const File &);
         File &operator=(const File &);
index 43f2d8121eec862e4f5f30e2d2307cc66710d681..abecea3516da468eae4607ece4de853cd30563f3 100644 (file)
@@ -45,7 +45,9 @@ class RIFF::WAV::File::FilePrivate
 public:
   FilePrivate() :
     properties(0),
-    tagChunkID("ID3 ")
+    tagChunkID("ID3 "),
+    hasID3v2(false),
+    hasInfo(false)
   {
   }
 
@@ -59,6 +61,9 @@ public:
   ByteVector tagChunkID;
 
   TagUnion tag;
+
+  bool hasID3v2;
+  bool hasInfo;
 };
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -143,8 +148,10 @@ bool RIFF::WAV::File::save(TagTypes tags, bool stripOthers, int id3v2Version)
 
   ID3v2::Tag *id3v2tag = d->tag.access<ID3v2::Tag>(ID3v2Index, false);
   if(!id3v2tag->isEmpty()) {
-    if(tags & ID3v2)
+    if(tags & ID3v2) {
       setChunkData(d->tagChunkID, id3v2tag->render(id3v2Version));
+      d->hasID3v2 = true;
+    }
   }
 
   Info::Tag *infotag = d->tag.access<Info::Tag>(InfoIndex, false);
@@ -155,12 +162,24 @@ bool RIFF::WAV::File::save(TagTypes tags, bool stripOthers, int id3v2Version)
         setChunkData(chunkId, infotag->render());
       else
         setChunkData("LIST", infotag->render(), true);
+
+      d->hasInfo = true;
     }
   }
 
   return true;
 }
 
+bool RIFF::WAV::File::hasID3v2Tag() const
+{
+  return d->hasID3v2;
+}
+
+bool RIFF::WAV::File::hasInfoTag() const
+{
+  return d->hasInfo;
+}
+
 ////////////////////////////////////////////////////////////////////////////////
 // private members
 ////////////////////////////////////////////////////////////////////////////////
@@ -174,6 +193,7 @@ void RIFF::WAV::File::read(bool readProperties, Properties::ReadStyle properties
     if(name == "ID3 " || name == "id3 ") {
       d->tagChunkID = chunkName(i);
       d->tag.set(ID3v2Index, new ID3v2::Tag(this, chunkOffset(i)));
+      d->hasID3v2 = true;
     }
     else if(name == "fmt " && readProperties)
       formatData = chunkData(i);
@@ -183,8 +203,10 @@ void RIFF::WAV::File::read(bool readProperties, Properties::ReadStyle properties
       ByteVector data = chunkData(i);
       ByteVector type = data.mid(0, 4);
 
-      if(type == "INFO")
+      if(type == "INFO") {
         d->tag.set(InfoIndex, new RIFF::Info::Tag(data));
+        d->hasInfo = true;
+      }
     }
   }
 
index e8dfb8f89f7aa58ab4f3f48d0a41acabbc451616..be5e5d15a4a1c0f5bcbc53cdeb8b00db20119a0a 100644 (file)
@@ -139,6 +139,16 @@ namespace TagLib {
         virtual bool save();
 
         bool save(TagTypes tags, bool stripOthers = true, int id3v2Version = 4);
+        
+        /*!
+         * Returns whether or not the file on disk contains an ID3v2 tag.
+         */
+        bool hasID3v2Tag() const;
+
+        /*!
+         * Returns whether or not the file on disk contains an RIFF INFO tag.
+         */
+        bool hasInfoTag() const;
 
       private:
         File(const File &);
index 9bac29f0d8a5bc9f190ff12c1914b4de19891387..f98d6addcf62bc166b99ae6fb276b5c31c6e7236 100644 (file)
@@ -236,6 +236,16 @@ void TrueAudio::File::strip(int tags)
   }
 }
 
+bool TrueAudio::File::hasID3v1Tag() const
+{
+  return d->hasID3v1;
+}
+
+bool TrueAudio::File::hasID3v2Tag() const
+{
+  return d->hasID3v2;
+}
+
 
 ////////////////////////////////////////////////////////////////////////////////
 // private members
index d805c8c50f923fee76f36770ca82c1138f31c6a8..94c6102b05bbafaa5164d482ba0c4c8e44ed1eb1 100644 (file)
@@ -209,7 +209,17 @@ namespace TagLib {
        * \note In order to make the removal permanent save() still needs to be called
        */
       void strip(int tags = AllTags);
+      
+      /*!
+       * Returns whether or not the file on disk contains an ID3v1 tag.
+       */
+      bool hasID3v1Tag() const;
 
+      /*!
+       * Returns whether or not the file on disk contains an ID3v2 tag.
+       */
+      bool hasID3v2Tag() const;
+    
     private:
       File(const File &);
       File &operator=(const File &);
index 3754ea86d9383a74a78169c8ee1fcc9c2310b024..13b8c570d614529a0d9ce0977bb137e9777ced1c 100644 (file)
@@ -231,6 +231,16 @@ void WavPack::File::strip(int tags)
   }
 }
 
+bool WavPack::File::hasID3v1Tag() const
+{
+  return d->hasID3v1;
+}
+
+bool WavPack::File::hasAPETag() const
+{
+  return d->hasAPE;
+}
+
 ////////////////////////////////////////////////////////////////////////////////
 // private members
 ////////////////////////////////////////////////////////////////////////////////
index c507977e24d9c38eccf99b067b65b9cdd3b75916..f84d5d7867a68c25b8b83d168d271480736c2b21 100644 (file)
@@ -173,7 +173,17 @@ namespace TagLib {
        * \note In order to make the removal permanent save() still needs to be called
        */
       void strip(int tags = AllTags);
+      
+      /*!
+       * Returns whether or not the file on disk contains an ID3v1 tag.
+       */
+      bool hasID3v1Tag() const;
 
+      /*!
+       * Returns whether or not the file on disk contains an APE tag.
+       */
+      bool hasAPETag() const;
+    
     private:
       File(const File &);
       File &operator=(const File &);