From 2a48666f805366ca81a609925732a634a5ae45a7 Mon Sep 17 00:00:00 2001 From: Scott Wheeler Date: Sat, 7 Aug 2004 00:59:16 +0000 Subject: [PATCH] Adding support for the Unique File Identifier ID3v2 frame type (UFID). git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@336640 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- mpeg/id3v2/frames/Makefile.am | 2 + .../frames/uniquefileidentifierframe.cpp | 103 ++++++++++++++++++ mpeg/id3v2/frames/uniquefileidentifierframe.h | 60 ++++++++++ mpeg/id3v2/id3v2framefactory.cpp | 8 ++ 4 files changed, 173 insertions(+) create mode 100644 mpeg/id3v2/frames/uniquefileidentifierframe.cpp create mode 100644 mpeg/id3v2/frames/uniquefileidentifierframe.h diff --git a/mpeg/id3v2/frames/Makefile.am b/mpeg/id3v2/frames/Makefile.am index 5d1966b4..929485b3 100644 --- a/mpeg/id3v2/frames/Makefile.am +++ b/mpeg/id3v2/frames/Makefile.am @@ -11,6 +11,7 @@ libframes_la_SOURCES = \ commentsframe.cpp \ relativevolumeframe.cpp \ textidentificationframe.cpp \ + uniquefileidentifierframe.cpp \ unknownframe.cpp taglib_include_HEADERS = \ @@ -18,6 +19,7 @@ taglib_include_HEADERS = \ commentsframe.h \ relativevolumeframe.h \ textidentificationframe.h \ + uniquefileidentifierframe.h \ unknownframe.h taglib_includedir = $(includedir)/taglib diff --git a/mpeg/id3v2/frames/uniquefileidentifierframe.cpp b/mpeg/id3v2/frames/uniquefileidentifierframe.cpp new file mode 100644 index 00000000..40cade00 --- /dev/null +++ b/mpeg/id3v2/frames/uniquefileidentifierframe.cpp @@ -0,0 +1,103 @@ +/*************************************************************************** + copyright : (C) 2004 by Scott Wheeler + email : wheeler@kde.org + ***************************************************************************/ + +/*************************************************************************** + * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * + * USA * + ***************************************************************************/ + +#include + +#include "uniquefileidentifierframe.h" + +using namespace TagLib; +using namespace ID3v2; + +class UniqueFileIdentifierFrame::UniqueFileIdentifierFramePrivate +{ +public: + String owner; + ByteVector identifier; +}; + +UniqueFileIdentifierFrame::UniqueFileIdentifierFrame(const ByteVector &data) : + ID3v2::Frame(data) +{ + d = new UniqueFileIdentifierFramePrivate; + setData(data); +} + +UniqueFileIdentifierFrame::UniqueFileIdentifierFrame(const String &owner, const ByteVector &id) : + ID3v2::Frame("UFID") +{ + d = new UniqueFileIdentifierFramePrivate; + d->owner = owner; + d->identifier = id; +} + +String UniqueFileIdentifierFrame::owner() const +{ + return d->owner; +} + +ByteVector UniqueFileIdentifierFrame::identifier() const +{ + return d->identifier; +} + +void UniqueFileIdentifierFrame::setOwner(const String &s) +{ + d->owner = s; +} + +void UniqueFileIdentifierFrame::setIdentifier(const ByteVector &v) +{ + d->identifier = v; +} + +String UniqueFileIdentifierFrame::toString() const +{ + return String::null; +} + +void UniqueFileIdentifierFrame::parseFields(const ByteVector &data) +{ + ByteVectorList fields = ByteVectorList::split(data, char(0)); + + if(fields.size() != 2) + return; + + d->owner = fields.front(); + d->identifier = fields.back(); +} + +ByteVector UniqueFileIdentifierFrame::renderFields() const +{ + ByteVector data; + + data.append(d->owner.data(String::Latin1)); + data.append(char(0)); + data.append(d->identifier); + + return data; +} + +UniqueFileIdentifierFrame::UniqueFileIdentifierFrame(const ByteVector &data, Header *h) : + Frame(h) +{ + d = new UniqueFileIdentifierFramePrivate; + parseFields(fieldData(data)); +} diff --git a/mpeg/id3v2/frames/uniquefileidentifierframe.h b/mpeg/id3v2/frames/uniquefileidentifierframe.h new file mode 100644 index 00000000..0ad063fc --- /dev/null +++ b/mpeg/id3v2/frames/uniquefileidentifierframe.h @@ -0,0 +1,60 @@ +/*************************************************************************** + copyright : (C) 2004 by Scott Wheeler + email : wheeler@kde.org + ***************************************************************************/ + +/*************************************************************************** + * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * + * USA * + ***************************************************************************/ + +#ifndef TAGLIB_UNIQUEFILEIDENTIFIERFRAME +#define TAGLIB_UNIQUEFILEIDENTIFIERFRAME + +#include + +namespace TagLib { + + namespace ID3v2 { + + class UniqueFileIdentifierFrame : public ID3v2::Frame + { + friend class FrameFactory; + + public: + UniqueFileIdentifierFrame(const ByteVector &data); + UniqueFileIdentifierFrame(const String &owner, const ByteVector &id); + + String owner() const; + ByteVector identifier() const; + + void setOwner(const String &s); + void setIdentifier(const ByteVector &v); + + virtual String toString() const; + + protected: + virtual void parseFields(const ByteVector &data); + virtual ByteVector renderFields() const; + + private: + UniqueFileIdentifierFrame(const ByteVector &data, Header *h); + + class UniqueFileIdentifierFramePrivate; + UniqueFileIdentifierFramePrivate *d; + }; + } +} + +#endif diff --git a/mpeg/id3v2/id3v2framefactory.cpp b/mpeg/id3v2/id3v2framefactory.cpp index 320551d7..5b23d8db 100644 --- a/mpeg/id3v2/id3v2framefactory.cpp +++ b/mpeg/id3v2/id3v2framefactory.cpp @@ -27,6 +27,7 @@ #include "frames/commentsframe.h" #include "frames/relativevolumeframe.h" #include "frames/textidentificationframe.h" +#include "frames/uniquefileidentifierframe.h" #include "frames/unknownframe.h" using namespace TagLib; @@ -134,9 +135,16 @@ Frame *FrameFactory::createFrame(const ByteVector &data, uint version) const return f; } + // Relative Volume Adjustment (frames 4.11) + if(frameID == "RVA2") return new RelativeVolumeFrame(data, header); + // Unique File Identifier (frames 4.1) + + if(frameID == "UFID") + return new UniqueFileIdentifierFrame(data, header); + return new UnknownFrame(data, header); }