Fixed minor bugs in ChapterFrame and TableOfContentsFrame headers.
#include <tdebug.h>
#include "id3v2tag.h"
-#include "uniquefileidentifierframe.h"
+#include "chapterframe.h"
using namespace TagLib;
using namespace ID3v2;
-class UniqueFileIdentifierFrame::UniqueFileIdentifierFramePrivate
+class ChapterFrame::ChapterFramePrivate
{
public:
- String owner;
- ByteVector identifier;
+ ByteVector elementID;
+ uint startTime;
+ uint endTime;
+ uint startOffset;
+ uint endOffset;
};
////////////////////////////////////////////////////////////////////////////////
// public methods
////////////////////////////////////////////////////////////////////////////////
-UniqueFileIdentifierFrame::UniqueFileIdentifierFrame(const ByteVector &data) :
+ChapterFrame::ChapterFrame(const ByteVector &data) :
ID3v2::Frame(data)
{
- d = new UniqueFileIdentifierFramePrivate;
+ d = new ChapterFramePrivate;
setData(data);
}
-UniqueFileIdentifierFrame::UniqueFileIdentifierFrame(const String &owner, const ByteVector &id) :
- ID3v2::Frame("UFID")
+ChapterFrame::ChapterFrame(const ByteVector &eID, const int &sT, const int &eT, const int &sO, const int &eO) :
+ ID3v2::Frame("CHAP")
{
- d = new UniqueFileIdentifierFramePrivate;
- d->owner = owner;
- d->identifier = id;
+ d = new ChapterFramePrivate;
+ d->elementID = eID;
+ d->startTime = sT;
+ d->endTime = eT;
+ d->startOffset = sO;
+ d->endOffset = e0;
}
-UniqueFileIdentifierFrame::~UniqueFileIdentifierFrame()
+ChapterFrame::~ChapterFrame()
{
delete d;
}
-String UniqueFileIdentifierFrame::owner() const
+ByteVector ChapterFrame::elementID() const
{
- return d->owner;
+ return d->elementID;
}
-ByteVector UniqueFileIdentifierFrame::identifier() const
+uint ChapterFrame::startTime() const
{
- return d->identifier;
+ return d->startTime;
}
-void UniqueFileIdentifierFrame::setOwner(const String &s)
+uint ChapterFrame::endTime() const
{
- d->owner = s;
+ return d->endTime;
}
-void UniqueFileIdentifierFrame::setIdentifier(const ByteVector &v)
+uint ChapterFrame::startOffset() const
{
- d->identifier = v;
+ return d->startOffset;
+}
+
+uint ChapterFrame::endOffset() const
+{
+ return d->endOffset;
+}
+
+void ChapterFrame::setElementID(const ByteVector &eID)
+{
+ d->elementID = eID;
+}
+
+void ChapterFrame::setStartTime(const uint &sT)
+{
+ d->startTime = sT;
+}
+
+void ChapterFrame::setEndTime(const uint &eT)
+{
+ d->endTime = eT;
+}
+
+void ChapterFrame::setStartOffset(const uint &sO)
+{
+ d->startOffset = sO;
+}
+
+void ChapterFrame::setEndOffset(const uint &eO)
+{
+ d->endOffset = eO;
}
String UniqueFileIdentifierFrame::toString() const
return String::null;
}
-PropertyMap UniqueFileIdentifierFrame::asProperties() const
+PropertyMap ChapterFrame::asProperties() const
{
+ //DODELAT
PropertyMap map;
if(d->owner == "http://musicbrainz.org") {
map.insert("MUSICBRAINZ_TRACKID", String(d->identifier));
return map;
}
-UniqueFileIdentifierFrame *UniqueFileIdentifierFrame::findByOwner(const ID3v2::Tag *tag, const String &o) // static
+ChapterFrame *ChapterFrame::findByElementID(const Tag *tag, const ByteVector &eID) // static
{
- ID3v2::FrameList comments = tag->frameList("UFID");
+ ID3v2::FrameList comments = tag->frameList("CHAP");
for(ID3v2::FrameList::ConstIterator it = comments.begin();
it != comments.end();
++it)
{
- UniqueFileIdentifierFrame *frame = dynamic_cast<UniqueFileIdentifierFrame *>(*it);
- if(frame && frame->owner() == o)
+ ChapterFrame *frame = dynamic_cast<ChapterFrame *>(*it);
+ if(frame && frame->elementID() == eID)
return frame;
}
return 0;
}
-void UniqueFileIdentifierFrame::parseFields(const ByteVector &data)
+void ChapterFrame::parseFields(const ByteVector &data)
{
+ //DODELAT
if(data.size() < 1) {
debug("An UFID frame must contain at least 1 byte.");
return;
d->identifier = data.mid(pos);
}
-ByteVector UniqueFileIdentifierFrame::renderFields() const
+ByteVector ChapterFrame::renderFields() const
{
+ //DODELAT
ByteVector data;
data.append(d->owner.data(String::Latin1));
return data;
}
-UniqueFileIdentifierFrame::UniqueFileIdentifierFrame(const ByteVector &data, Header *h) :
+ChapterFrame::ChapterFrame(const ByteVector &data, Header *h) :
Frame(h)
{
- d = new UniqueFileIdentifierFramePrivate;
+ d = new ChapterFramePrivate;
parseFields(fieldData(data));
}
* start time \a sT, end time \a eT, start offset \a sO
* and end offset \a eO.
*/
- ChapterFrame(const ByteVector &eID, const int &sT, const int &eT, const int &sO, const int &eO);
+ ChapterFrame(const ByteVector &eID, const uint &sT, const uint &eT, const uint &sO, const uint &eO);
/*!
* Destroys the frame.
/*!
* CHAP frames each have a unique element ID. This searches for a CHAP
- * frame with the element ID \a eID and returns a pointer to it.
+ * frame with the element ID \a eID and returns a pointer to it. This
+ * can be used to link CTOC and CHAP frames together.
*
* \see elementID()
*/
#include <tdebug.h>
#include "id3v2tag.h"
-#include "uniquefileidentifierframe.h"
+#include "tableofcontentsframe.h"
using namespace TagLib;
using namespace ID3v2;
-class UniqueFileIdentifierFrame::UniqueFileIdentifierFramePrivate
+class TableOfContentsFrame::TableOfContentsFramePrivate
{
public:
- String owner;
- ByteVector identifier;
+ ByteVector elementID;
+ bool isTopLevel;
+ bool isOrdered;
+ ByteVectorList childElements;
};
////////////////////////////////////////////////////////////////////////////////
// public methods
////////////////////////////////////////////////////////////////////////////////
-UniqueFileIdentifierFrame::UniqueFileIdentifierFrame(const ByteVector &data) :
+TableOfContentsFrame::TableOfContentsFrame(const ByteVector &data) :
ID3v2::Frame(data)
{
- d = new UniqueFileIdentifierFramePrivate;
+ d = new TableOfContentsFramePrivate;
setData(data);
}
-UniqueFileIdentifierFrame::UniqueFileIdentifierFrame(const String &owner, const ByteVector &id) :
- ID3v2::Frame("UFID")
+TableOfContentsFrame::TableOfContentsFrame(const ByteVector &eID, const ByteVectorList &ch) :
+ ID3v2::Frame("CTOC")
{
- d = new UniqueFileIdentifierFramePrivate;
- d->owner = owner;
- d->identifier = id;
+ d = new TableOfContentsFramePrivate;
+ d->elementID = eID;
+ d->childElements = ch;
}
-UniqueFileIdentifierFrame::~UniqueFileIdentifierFrame()
+TableOfContentsFrame::~TableOfContentsFrame()
{
delete d;
}
-String UniqueFileIdentifierFrame::owner() const
+ByteVector TableOfContentsFrame::elementID() const
{
- return d->owner;
+ return d->elementID;
}
-ByteVector UniqueFileIdentifierFrame::identifier() const
+bool TableOfContentsFrame::isTopLevel() const
{
- return d->identifier;
+ return d->isTopLevel;
}
-void UniqueFileIdentifierFrame::setOwner(const String &s)
+bool TableOfContentsFrame::isOrdered() const
{
- d->owner = s;
+ return d->isOrdered;
}
-void UniqueFileIdentifierFrame::setIdentifier(const ByteVector &v)
+unsigned char TableOfContentsFrame::entryCount() const
{
- d->identifier = v;
+ return (unsigned char)(d->childElements.size());
}
-String UniqueFileIdentifierFrame::toString() const
+ByteVectorList TableOfContentsFrame::childElements const
+{
+ return d->childElements;
+}
+
+void TableOfContentsFrame::setElementID(const ByteVector &eID)
+{
+ d->elementID = eID;
+}
+
+void TableOfContentsFrame::setIsTopLevel(const bool &t)
+{
+ d->isTopLevel = t;
+}
+
+void TableOfContentsFrame::setIsOrdered(const bool &o)
+{
+ d->isOrdered = o;
+}
+
+void TableOfContentsFrame::setChildElements(const ByteVectorList &l)
+{
+ d->childElements = l;
+}
+
+String TableOfContentsFrame::toString() const
{
return String::null;
}
-PropertyMap UniqueFileIdentifierFrame::asProperties() const
+PropertyMap TableOfContentsFrame::asProperties() const
{
+ //DODELAT
PropertyMap map;
if(d->owner == "http://musicbrainz.org") {
map.insert("MUSICBRAINZ_TRACKID", String(d->identifier));
return map;
}
-UniqueFileIdentifierFrame *UniqueFileIdentifierFrame::findByOwner(const ID3v2::Tag *tag, const String &o) // static
+TableOfContentsFrame *TableOfContentsFrame::findByElementID(const ID3v2::Tag *tag, const ByteVector &eID) // static
{
- ID3v2::FrameList comments = tag->frameList("UFID");
+ ID3v2::FrameList comments = tag->frameList("CTOC");
for(ID3v2::FrameList::ConstIterator it = comments.begin();
it != comments.end();
++it)
{
- UniqueFileIdentifierFrame *frame = dynamic_cast<UniqueFileIdentifierFrame *>(*it);
- if(frame && frame->owner() == o)
+ TableOfContentsFrame *frame = dynamic_cast<TableOfContentsFrame *>(*it);
+ if(frame && frame->elementID() == eID)
return frame;
}
return 0;
}
-void UniqueFileIdentifierFrame::parseFields(const ByteVector &data)
+void TableOfContentsFrame::parseFields(const ByteVector &data)
{
+ //DODELAT
if(data.size() < 1) {
debug("An UFID frame must contain at least 1 byte.");
return;
d->identifier = data.mid(pos);
}
-ByteVector UniqueFileIdentifierFrame::renderFields() const
+ByteVector TableOfContentsFrame::renderFields() const
{
+ //DODELAT
ByteVector data;
data.append(d->owner.data(String::Latin1));
return data;
}
-UniqueFileIdentifierFrame::UniqueFileIdentifierFrame(const ByteVector &data, Header *h) :
+TableOfContentsFrame::TableOfContentsFrame(const ByteVector &data, Header *h) :
Frame(h)
{
- d = new UniqueFileIdentifierFramePrivate;
+ d = new TableOfContentsFramePrivate;
parseFields(fieldData(data));
}
* Creates a table of contents frame with the element ID \a eID and
* the child elements \a ch.
*/
- UniqueFileIdentifierFrame(const ByteVector &eID, const List<ByteVector> &ch);
+ TableOfContentsFrame(const ByteVector &eID, const ByteVectorList &ch);
/*!
* Destroys the frame.
*/
- ~UniqueFileIdentifierFrame();
+ ~TableOfContentsFrame();
/*!
* Returns the elementID of the frame. Element ID
* Returns count of child elements of the frame. It allways
* corresponds to size of child elements list.
*
- * \note Return type should be uint8_t.
+ * \note Return type should be uint8_t, not unsigned char.
* \see childElements()
*/
unsigned char entryCount() const;
*
* \see setChildElements()
*/
- List<ByteVector> childElements() const;
+ ByteVectorList childElements() const;
/*!
* Sets the elementID of the frame to \a eID.
*
* \see childElements()
*/
- void setChildElements(const List<ByteVector> &l);
+ void setChildElements(const ByteVectorList &l);
virtual String toString() const;
/*!
* CTOC frames each have a unique element ID. This searches for a CTOC
- * frame with the element ID \a eID and returns a pointer to it.
+ * frame with the element ID \a eID and returns a pointer to it. This
+ * can be used to link together parent and child CTOC frames.
*
* \see elementID()
*/
- static UniqueFileIdentifierFrame *findByElementID(const Tag *tag, const ByteVector &eID);
+ static TableOfContentsFrame *findByElementID(const Tag *tag, const ByteVector &eID);
protected:
virtual void parseFields(const ByteVector &data);