aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTsuda Kageyu <tsuda.kageyu@gmail.com>2013-07-04 18:11:33 +0900
committerTsuda Kageyu <tsuda.kageyu@gmail.com>2013-07-04 18:11:33 +0900
commit15039098245793a32f16be7ea2c0dba12a35eccf (patch)
tree1752a54e7bbffce6d24fee354c0f6687d461c8f7
parent7e866e11add5416fa8c0876ab8ee1ac3f0f396a9 (diff)
Added the methods to check which kind of tags the file actually has.
-rw-r--r--taglib/ape/apefile.cpp12
-rw-r--r--taglib/ape/apefile.h10
-rw-r--r--taglib/flac/flacfile.cpp14
-rw-r--r--taglib/flac/flacfile.h15
-rw-r--r--taglib/mpc/mpcfile.cpp11
-rw-r--r--taglib/mpc/mpcfile.h10
-rw-r--r--taglib/mpeg/mpegfile.h6
-rw-r--r--taglib/ogg/flac/oggflacfile.cpp5
-rw-r--r--taglib/ogg/flac/oggflacfile.h5
-rw-r--r--taglib/riff/aiff/aifffile.cpp1
-rw-r--r--taglib/riff/aiff/aifffile.h5
-rw-r--r--taglib/riff/wav/wavfile.cpp28
-rw-r--r--taglib/riff/wav/wavfile.h10
-rw-r--r--taglib/trueaudio/trueaudiofile.cpp10
-rw-r--r--taglib/trueaudio/trueaudiofile.h10
-rw-r--r--taglib/wavpack/wavpackfile.cpp10
-rw-r--r--taglib/wavpack/wavpackfile.h10
17 files changed, 164 insertions, 8 deletions
diff --git a/taglib/ape/apefile.cpp b/taglib/ape/apefile.cpp
index 415eb17e..3cb9d9a7 100644
--- a/taglib/ape/apefile.cpp
+++ b/taglib/ape/apefile.cpp
@@ -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
////////////////////////////////////////////////////////////////////////////////
diff --git a/taglib/ape/apefile.h b/taglib/ape/apefile.h
index 5ccef72f..5530edf3 100644
--- a/taglib/ape/apefile.h
+++ b/taglib/ape/apefile.h
@@ -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 &);
diff --git a/taglib/flac/flacfile.cpp b/taglib/flac/flacfile.cpp
index 9f6251cf..823170aa 100644
--- a/taglib/flac/flacfile.cpp
+++ b/taglib/flac/flacfile.cpp
@@ -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;
+}
diff --git a/taglib/flac/flacfile.h b/taglib/flac/flacfile.h
index 95b52142..e159c505 100644
--- a/taglib/flac/flacfile.h
+++ b/taglib/flac/flacfile.h
@@ -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 &);
diff --git a/taglib/mpc/mpcfile.cpp b/taglib/mpc/mpcfile.cpp
index ee992ebc..979c035e 100644
--- a/taglib/mpc/mpcfile.cpp
+++ b/taglib/mpc/mpcfile.cpp
@@ -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
diff --git a/taglib/mpc/mpcfile.h b/taglib/mpc/mpcfile.h
index ea66a5f9..4db906b5 100644
--- a/taglib/mpc/mpcfile.h
+++ b/taglib/mpc/mpcfile.h
@@ -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 &);
diff --git a/taglib/mpeg/mpegfile.h b/taglib/mpeg/mpegfile.h
index ef3a2b8f..be94be7f 100644
--- a/taglib/mpeg/mpegfile.h
+++ b/taglib/mpeg/mpegfile.h
@@ -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;
diff --git a/taglib/ogg/flac/oggflacfile.cpp b/taglib/ogg/flac/oggflacfile.cpp
index 18506b2e..d440a0c6 100644
--- a/taglib/ogg/flac/oggflacfile.cpp
+++ b/taglib/ogg/flac/oggflacfile.cpp
@@ -287,3 +287,8 @@ void Ogg::FLAC::File::scan()
d->scanned = true;
}
+
+bool Ogg::FLAC::File::hasXiphComment() const
+{
+ return d->hasXiphComment;
+}
diff --git a/taglib/ogg/flac/oggflacfile.h b/taglib/ogg/flac/oggflacfile.h
index 4b83df1f..77280eff 100644
--- a/taglib/ogg/flac/oggflacfile.h
+++ b/taglib/ogg/flac/oggflacfile.h
@@ -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 &);
diff --git a/taglib/riff/aiff/aifffile.cpp b/taglib/riff/aiff/aifffile.cpp
index 19b80c8a..d20c148b 100644
--- a/taglib/riff/aiff/aifffile.cpp
+++ b/taglib/riff/aiff/aifffile.cpp
@@ -123,6 +123,7 @@ bool RIFF::AIFF::File::save()
return true;
}
+
////////////////////////////////////////////////////////////////////////////////
// private members
////////////////////////////////////////////////////////////////////////////////
diff --git a/taglib/riff/aiff/aifffile.h b/taglib/riff/aiff/aifffile.h
index 4ddd43e8..ef72dcd7 100644
--- a/taglib/riff/aiff/aifffile.h
+++ b/taglib/riff/aiff/aifffile.h
@@ -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 &);
diff --git a/taglib/riff/wav/wavfile.cpp b/taglib/riff/wav/wavfile.cpp
index 43f2d812..abecea35 100644
--- a/taglib/riff/wav/wavfile.cpp
+++ b/taglib/riff/wav/wavfile.cpp
@@ -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;
+ }
}
}
diff --git a/taglib/riff/wav/wavfile.h b/taglib/riff/wav/wavfile.h
index e8dfb8f8..be5e5d15 100644
--- a/taglib/riff/wav/wavfile.h
+++ b/taglib/riff/wav/wavfile.h
@@ -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 &);
diff --git a/taglib/trueaudio/trueaudiofile.cpp b/taglib/trueaudio/trueaudiofile.cpp
index 9bac29f0..f98d6add 100644
--- a/taglib/trueaudio/trueaudiofile.cpp
+++ b/taglib/trueaudio/trueaudiofile.cpp
@@ -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
diff --git a/taglib/trueaudio/trueaudiofile.h b/taglib/trueaudio/trueaudiofile.h
index d805c8c5..94c6102b 100644
--- a/taglib/trueaudio/trueaudiofile.h
+++ b/taglib/trueaudio/trueaudiofile.h
@@ -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 &);
diff --git a/taglib/wavpack/wavpackfile.cpp b/taglib/wavpack/wavpackfile.cpp
index 3754ea86..13b8c570 100644
--- a/taglib/wavpack/wavpackfile.cpp
+++ b/taglib/wavpack/wavpackfile.cpp
@@ -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
////////////////////////////////////////////////////////////////////////////////
diff --git a/taglib/wavpack/wavpackfile.h b/taglib/wavpack/wavpackfile.h
index c507977e..f84d5d78 100644
--- a/taglib/wavpack/wavpackfile.h
+++ b/taglib/wavpack/wavpackfile.h
@@ -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 &);