]> granicus.if.org Git - taglib/commitdiff
Unify common functions for finding tags.
authorTsuda Kageyu <tsuda.kageyu@gmail.com>
Sat, 21 Nov 2015 00:30:04 +0000 (09:30 +0900)
committerTsuda Kageyu <tsuda.kageyu@gmail.com>
Sat, 21 Nov 2015 00:30:04 +0000 (09:30 +0900)
Several classes have exactly identical functions for finding tags.
This also hides the functions from public headers.

13 files changed:
taglib/CMakeLists.txt
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/tagutils.cpp [new file with mode: 0644]
taglib/tagutils.h [new file with mode: 0644]
taglib/trueaudio/trueaudiofile.cpp
taglib/trueaudio/trueaudiofile.h
taglib/wavpack/wavpackfile.cpp
taglib/wavpack/wavpackfile.h

index 31e2c49b9ef88325d5f2ab8c46cf0cdb4b8256fc..5a047bf1da50f5427038dc57123c2052ba3e20d7 100644 (file)
@@ -334,6 +334,7 @@ set(tag_LIB_SRCS
   tagunion.cpp
   fileref.cpp
   audioproperties.cpp
+  tagutils.cpp
 )
 
 add_library(tag ${tag_LIB_SRCS} ${tag_HDRS})
index 1349dfa3066b13aad39084743af02bf592d97736..caefe7371ff1bca7767a9c5da1a82798b2936107 100644 (file)
@@ -38,9 +38,9 @@
 #include <id3v1tag.h>
 #include <id3v2header.h>
 #include <tpropertymap.h>
+#include <tagutils.h>
 
 #include "apefile.h"
-
 #include "apetag.h"
 #include "apefooter.h"
 
@@ -258,7 +258,7 @@ void APE::File::read(bool readProperties)
 {
   // Look for an ID3v2 tag
 
-  d->ID3v2Location = findID3v2();
+  d->ID3v2Location = Utils::findID3v2(this);
 
   if(d->ID3v2Location >= 0) {
     seek(d->ID3v2Location);
@@ -269,7 +269,7 @@ void APE::File::read(bool readProperties)
 
   // Look for an ID3v1 tag
 
-  d->ID3v1Location = findID3v1();
+  d->ID3v1Location = Utils::findID3v1(this);
 
   if(d->ID3v1Location >= 0) {
     d->tag.set(ApeID3v1Index, new ID3v1::Tag(this, d->ID3v1Location));
@@ -278,7 +278,7 @@ void APE::File::read(bool readProperties)
 
   // Look for an APE tag
 
-  d->APELocation = findAPE();
+  d->APELocation = Utils::findAPE(this, d->ID3v1Location);
 
   if(d->APELocation >= 0) {
     d->tag.set(ApeAPEIndex, new APE::Tag(this, d->APELocation));
@@ -314,48 +314,3 @@ void APE::File::read(bool readProperties)
     d->properties = new Properties(this, streamLength);
   }
 }
-
-long APE::File::findAPE()
-{
-  if(!isValid())
-    return -1;
-
-  if(d->hasID3v1)
-    seek(-160, End);
-  else
-    seek(-32, End);
-
-  long p = tell();
-
-  if(readBlock(8) == APE::Tag::fileIdentifier())
-    return p;
-
-  return -1;
-}
-
-long APE::File::findID3v1()
-{
-  if(!isValid())
-    return -1;
-
-  seek(-128, End);
-  long p = tell();
-
-  if(readBlock(3) == ID3v1::Tag::fileIdentifier())
-    return p;
-
-  return -1;
-}
-
-long APE::File::findID3v2()
-{
-  if(!isValid())
-    return -1;
-
-  seek(0);
-
-  if(readBlock(3) == ID3v2::Header::fileIdentifier())
-    return 0;
-
-  return -1;
-}
index 1d2e5c67502cec601766263e849714dc0b8f10db..e638d8653d0f494d6be4cd736170fa1586b13687 100644 (file)
@@ -219,9 +219,6 @@ namespace TagLib {
       File &operator=(const File &);
 
       void read(bool readProperties);
-      long findAPE();
-      long findID3v1();
-      long findID3v2();
 
       class FilePrivate;
       FilePrivate *d;
index dc8f4011ed4251df38b84662e6f01c9606e68bcf..252907d062f3c38656ab171d9e1bfdd6946d32a5 100644 (file)
@@ -29,6 +29,7 @@
 #include <tdebug.h>
 #include <tagunion.h>
 #include <tpropertymap.h>
+#include <tagutils.h>
 
 #include <id3v2header.h>
 #include <id3v2tag.h>
@@ -362,7 +363,7 @@ void FLAC::File::read(bool readProperties)
 {
   // Look for an ID3v2 tag
 
-  d->ID3v2Location = findID3v2();
+  d->ID3v2Location = Utils::findID3v2(this);
 
   if(d->ID3v2Location >= 0) {
 
@@ -378,7 +379,7 @@ void FLAC::File::read(bool readProperties)
 
   // Look for an ID3v1 tag
 
-  d->ID3v1Location = findID3v1();
+  d->ID3v1Location = Utils::findID3v1(this);
 
   if(d->ID3v1Location >= 0) {
     d->tag.set(FlacID3v1Index, new ID3v1::Tag(this, d->ID3v1Location));
@@ -539,30 +540,3 @@ void FLAC::File::scan()
 
   d->scanned = true;
 }
-
-long FLAC::File::findID3v1()
-{
-  if(!isValid())
-    return -1;
-
-  seek(-128, End);
-  long p = tell();
-
-  if(readBlock(3) == ID3v1::Tag::fileIdentifier())
-    return p;
-
-  return -1;
-}
-
-long FLAC::File::findID3v2()
-{
-  if(!isValid())
-    return -1;
-
-  seek(0);
-
-  if(readBlock(3) == ID3v2::Header::fileIdentifier())
-    return 0;
-
-  return -1;
-}
index 1c055d3392d8186829c6840ea9a9cfa2e534156c..6cbcb5a0aecb8ee461b2dd929f1aaac1b729d367 100644 (file)
@@ -295,8 +295,6 @@ namespace TagLib {
 
       void read(bool readProperties);
       void scan();
-      long findID3v2();
-      long findID3v1();
 
       class FilePrivate;
       FilePrivate *d;
index 6d8dae5a197204ed48c9288fc6b4193b26f7dbf4..1d798212c37f358177154c922c37b5e8c50aa95f 100644 (file)
@@ -28,6 +28,7 @@
 #include <tagunion.h>
 #include <tdebug.h>
 #include <tpropertymap.h>
+#include <tagutils.h>
 
 #include "mpcfile.h"
 #include "id3v1tag.h"
@@ -266,7 +267,7 @@ void MPC::File::read(bool readProperties)
 {
   // Look for an ID3v1 tag
 
-  d->ID3v1Location = findID3v1();
+  d->ID3v1Location = Utils::findID3v1(this);
 
   if(d->ID3v1Location >= 0) {
     d->tag.set(MPCID3v1Index, new ID3v1::Tag(this, d->ID3v1Location));
@@ -275,7 +276,7 @@ void MPC::File::read(bool readProperties)
 
   // Look for an APE tag
 
-  d->APELocation = findAPE();
+  d->APELocation = Utils::findAPE(this, d->ID3v1Location);
 
   if(d->APELocation >= 0) {
     d->tag.set(MPCAPEIndex, new APE::Tag(this, d->APELocation));
@@ -290,7 +291,7 @@ void MPC::File::read(bool readProperties)
 
   // Look for an ID3v2 tag
 
-  d->ID3v2Location = findID3v2();
+  d->ID3v2Location = Utils::findID3v2(this);
 
   if(d->ID3v2Location >= 0) {
     seek(d->ID3v2Location);
@@ -323,48 +324,3 @@ void MPC::File::read(bool readProperties)
     d->properties = new Properties(this, streamLength);
   }
 }
-
-long MPC::File::findAPE()
-{
-  if(!isValid())
-    return -1;
-
-  if(d->hasID3v1)
-    seek(-160, End);
-  else
-    seek(-32, End);
-
-  long p = tell();
-
-  if(readBlock(8) == APE::Tag::fileIdentifier())
-    return p;
-
-  return -1;
-}
-
-long MPC::File::findID3v1()
-{
-  if(!isValid())
-    return -1;
-
-  seek(-128, End);
-  long p = tell();
-
-  if(readBlock(3) == ID3v1::Tag::fileIdentifier())
-    return p;
-
-  return -1;
-}
-
-long MPC::File::findID3v2()
-{
-  if(!isValid())
-    return -1;
-
-  seek(0);
-
-  if(readBlock(3) == ID3v2::Header::fileIdentifier())
-    return 0;
-
-  return -1;
-}
index 0980a5cd3656fd4ffc48f57e2c075947812f4d8b..98e7480f88d0db754211f54c3b51501ccf6bde56 100644 (file)
@@ -222,9 +222,6 @@ namespace TagLib {
       File &operator=(const File &);
 
       void read(bool readProperties);
-      long findAPE();
-      long findID3v1();
-      long findID3v2();
 
       class FilePrivate;
       FilePrivate *d;
diff --git a/taglib/tagutils.cpp b/taglib/tagutils.cpp
new file mode 100644 (file)
index 0000000..dc04704
--- /dev/null
@@ -0,0 +1,79 @@
+/***************************************************************************
+    copyright            : (C) 2015 by Tsuda Kageyu
+    email                : tsuda.kageyu@gmail.com
+ ***************************************************************************/
+
+/***************************************************************************
+ *   This library is free software; you can redistribute it and/or modify  *
+ *   it under the terms of the GNU Lesser General Public License version   *
+ *   2.1 as published by the Free Software Foundation.                     *
+ *                                                                         *
+ *   This library is distributed in the hope that it will be useful, but   *
+ *   WITHOUT ANY WARRANTY; without even the implied warranty of            *
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU     *
+ *   Lesser General Public License for more details.                       *
+ *                                                                         *
+ *   You should have received a copy of the GNU Lesser General Public      *
+ *   License along with this library; if not, write to the Free Software   *
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA         *
+ *   02110-1301  USA                                                       *
+ *                                                                         *
+ *   Alternatively, this file is available under the Mozilla Public        *
+ *   License Version 1.1.  You may obtain a copy of the License at         *
+ *   http://www.mozilla.org/MPL/                                           *
+ ***************************************************************************/
+
+#include <tfile.h>
+
+#include "id3v1tag.h"
+#include "id3v2header.h"
+#include "apetag.h"
+
+#include "tagutils.h"
+
+using namespace TagLib;
+
+long Utils::findID3v1(File *file)
+{
+  if(!file->isValid())
+    return -1;
+
+  file->seek(-128, File::End);
+  const long p = file->tell();
+
+  if(file->readBlock(3) == ID3v1::Tag::fileIdentifier())
+    return p;
+
+  return -1;
+}
+
+long Utils::findID3v2(File *file)
+{
+  if(!file->isValid())
+    return -1;
+
+  file->seek(0);
+
+  if(file->readBlock(3) == ID3v2::Header::fileIdentifier())
+    return 0;
+
+  return -1;
+}
+
+long Utils::findAPE(File *file, long id3v1Location)
+{
+  if(!file->isValid())
+    return -1;
+
+  if(id3v1Location >= 0)
+    file->seek(id3v1Location - 32, File::Beginning);
+  else
+    file->seek(-32, File::End);
+
+  const long p = file->tell();
+
+  if(file->readBlock(8) == APE::Tag::fileIdentifier())
+    return p;
+
+  return -1;
+}
diff --git a/taglib/tagutils.h b/taglib/tagutils.h
new file mode 100644 (file)
index 0000000..fb11d1e
--- /dev/null
@@ -0,0 +1,49 @@
+/***************************************************************************
+    copyright            : (C) 2015 by Tsuda Kageyu
+    email                : tsuda.kageyu@gmail.com
+ ***************************************************************************/
+
+/***************************************************************************
+ *   This library is free software; you can redistribute it and/or modify  *
+ *   it under the terms of the GNU Lesser General Public License version   *
+ *   2.1 as published by the Free Software Foundation.                     *
+ *                                                                         *
+ *   This library is distributed in the hope that it will be useful, but   *
+ *   WITHOUT ANY WARRANTY; without even the implied warranty of            *
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU     *
+ *   Lesser General Public License for more details.                       *
+ *                                                                         *
+ *   You should have received a copy of the GNU Lesser General Public      *
+ *   License along with this library; if not, write to the Free Software   *
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA         *
+ *   02110-1301  USA                                                       *
+ *                                                                         *
+ *   Alternatively, this file is available under the Mozilla Public        *
+ *   License Version 1.1.  You may obtain a copy of the License at         *
+ *   http://www.mozilla.org/MPL/                                           *
+ ***************************************************************************/
+
+#ifndef TAGLIB_TAGUTILS_H
+#define TAGLIB_TAGUTILS_H
+
+// THIS FILE IS NOT A PART OF THE TAGLIB API
+
+#ifndef DO_NOT_DOCUMENT  // tell Doxygen not to document this header
+
+namespace TagLib {
+
+  class File;
+
+  namespace Utils {
+
+    long findID3v1(File *file);
+
+    long findID3v2(File *file);
+
+    long findAPE(File *file, long id3v1Location);
+  }
+}
+
+#endif
+
+#endif
index 4ca60915c2c9f0f7647ff8208f1b71c283a1d987..0ff3fa5e72d23b8d64c2099b8bd6eee71cbc4f8f 100644 (file)
@@ -33,6 +33,7 @@
 #include <tagunion.h>
 #include <tstringlist.h>
 #include <tpropertymap.h>
+#include <tagutils.h>
 
 #include "trueaudiofile.h"
 #include "id3v1tag.h"
@@ -248,7 +249,7 @@ void TrueAudio::File::read(bool readProperties)
 {
   // Look for an ID3v2 tag
 
-  d->ID3v2Location = findID3v2();
+  d->ID3v2Location = Utils::findID3v2(this);
 
   if(d->ID3v2Location >= 0) {
 
@@ -264,7 +265,7 @@ void TrueAudio::File::read(bool readProperties)
 
   // Look for an ID3v1 tag
 
-  d->ID3v1Location = findID3v1();
+  d->ID3v1Location = Utils::findID3v1(this);
 
   if(d->ID3v1Location >= 0) {
     d->tag.set(TrueAudioID3v1Index, new ID3v1::Tag(this, d->ID3v1Location));
@@ -296,30 +297,3 @@ void TrueAudio::File::read(bool readProperties)
     d->properties = new Properties(readBlock(TrueAudio::HeaderSize), streamLength);
   }
 }
-
-long TrueAudio::File::findID3v1()
-{
-  if(!isValid())
-    return -1;
-
-  seek(-128, End);
-  long p = tell();
-
-  if(readBlock(3) == ID3v1::Tag::fileIdentifier())
-    return p;
-
-  return -1;
-}
-
-long TrueAudio::File::findID3v2()
-{
-  if(!isValid())
-    return -1;
-
-  seek(0);
-
-  if(readBlock(3) == ID3v2::Header::fileIdentifier())
-    return 0;
-
-  return -1;
-}
index 3fc515f6a318f15cf272da65d57caf06825fff7a..4bcb722af664a8493d18d2ee4566c803b33bfe51 100644 (file)
@@ -240,8 +240,6 @@ namespace TagLib {
       File &operator=(const File &);
 
       void read(bool readProperties);
-      long findID3v1();
-      long findID3v2();
 
       class FilePrivate;
       FilePrivate *d;
index 90f79d162974faeea49ca7820b9a5c9eab1610a2..7273e103b625e6043f531d7a1c9c023f930d7c2c 100644 (file)
@@ -32,6 +32,7 @@
 #include <tdebug.h>
 #include <tagunion.h>
 #include <tpropertymap.h>
+#include <tagutils.h>
 
 #include "wavpackfile.h"
 #include "id3v1tag.h"
@@ -243,7 +244,7 @@ void WavPack::File::read(bool readProperties)
 {
   // Look for an ID3v1 tag
 
-  d->ID3v1Location = findID3v1();
+  d->ID3v1Location = Utils::findID3v1(this);
 
   if(d->ID3v1Location >= 0) {
     d->tag.set(WavID3v1Index, new ID3v1::Tag(this, d->ID3v1Location));
@@ -252,7 +253,7 @@ void WavPack::File::read(bool readProperties)
 
   // Look for an APE tag
 
-  d->APELocation = findAPE();
+  d->APELocation = Utils::findAPE(this, d->ID3v1Location);
 
   if(d->APELocation >= 0) {
     d->tag.set(WavAPEIndex, new APE::Tag(this, d->APELocation));
@@ -280,35 +281,3 @@ void WavPack::File::read(bool readProperties)
     d->properties = new Properties(this, streamLength);
   }
 }
-
-long WavPack::File::findAPE()
-{
-  if(!isValid())
-    return -1;
-
-  if(d->hasID3v1)
-    seek(-160, End);
-  else
-    seek(-32, End);
-
-  long p = tell();
-
-  if(readBlock(8) == APE::Tag::fileIdentifier())
-    return p;
-
-  return -1;
-}
-
-long WavPack::File::findID3v1()
-{
-  if(!isValid())
-    return -1;
-
-  seek(-128, End);
-  long p = tell();
-
-  if(readBlock(3) == ID3v1::Tag::fileIdentifier())
-    return p;
-
-  return -1;
-}
index 24511581bb0fb45128497f31c2e0ed4997c1a02a..abcabd944d4f08be1020c4ba42b960493e7aa6e7 100644 (file)
@@ -208,8 +208,6 @@ namespace TagLib {
       File &operator=(const File &);
 
       void read(bool readProperties);
-      long findID3v1();
-      long findAPE();
 
       class FilePrivate;
       FilePrivate *d;