1 /***************************************************************************
2 copyright : (C) 2002 - 2008 by Scott Wheeler
3 email : wheeler@kde.org
4 copyright : (C) 2006 by Aaron VonderHaar
5 email : avh4@users.sourceforge.net
6 ***************************************************************************/
8 /***************************************************************************
9 * This library is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU Lesser General Public License version *
11 * 2.1 as published by the Free Software Foundation. *
13 * This library is distributed in the hope that it will be useful, but *
14 * WITHOUT ANY WARRANTY; without even the implied warranty of *
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
16 * Lesser General Public License for more details. *
18 * You should have received a copy of the GNU Lesser General Public *
19 * License along with this library; if not, write to the Free Software *
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
23 * Alternatively, this file is available under the Mozilla Public *
24 * License Version 1.1. You may obtain a copy of the License at *
25 * http://www.mozilla.org/MPL/ *
26 ***************************************************************************/
30 #include "generalencapsulatedobjectframe.h"
32 using namespace TagLib;
33 using namespace ID3v2;
35 class GeneralEncapsulatedObjectFrame::GeneralEncapsulatedObjectFramePrivate
38 GeneralEncapsulatedObjectFramePrivate() : textEncoding(String::Latin1) {}
40 String::Type textEncoding;
47 ////////////////////////////////////////////////////////////////////////////////
49 ////////////////////////////////////////////////////////////////////////////////
51 GeneralEncapsulatedObjectFrame::GeneralEncapsulatedObjectFrame() : Frame("GEOB")
53 d = new GeneralEncapsulatedObjectFramePrivate;
56 GeneralEncapsulatedObjectFrame::GeneralEncapsulatedObjectFrame(const ByteVector &data) : Frame(data)
58 d = new GeneralEncapsulatedObjectFramePrivate;
62 GeneralEncapsulatedObjectFrame::~GeneralEncapsulatedObjectFrame()
67 String GeneralEncapsulatedObjectFrame::toString() const
69 String text = "[" + d->mimeType + "]";
71 if(!d->fileName.isEmpty())
72 text += " " + d->fileName;
74 if(!d->description.isEmpty())
75 text += " \"" + d->description + "\"";
80 String::Type GeneralEncapsulatedObjectFrame::textEncoding() const
82 return d->textEncoding;
85 void GeneralEncapsulatedObjectFrame::setTextEncoding(String::Type encoding)
87 d->textEncoding = encoding;
90 String GeneralEncapsulatedObjectFrame::mimeType() const
95 void GeneralEncapsulatedObjectFrame::setMimeType(const String &type)
100 String GeneralEncapsulatedObjectFrame::fileName() const
105 void GeneralEncapsulatedObjectFrame::setFileName(const String &name)
110 String GeneralEncapsulatedObjectFrame::description() const
112 return d->description;
115 void GeneralEncapsulatedObjectFrame::setDescription(const String &desc)
117 d->description = desc;
120 ByteVector GeneralEncapsulatedObjectFrame::object() const
125 void GeneralEncapsulatedObjectFrame::setObject(const ByteVector &data)
130 ////////////////////////////////////////////////////////////////////////////////
132 ////////////////////////////////////////////////////////////////////////////////
134 void GeneralEncapsulatedObjectFrame::parseFields(const ByteVector &data)
136 if(data.size() < 4) {
137 debug("An object frame must contain at least 4 bytes.");
141 d->textEncoding = String::Type(data[0]);
145 d->mimeType = readStringField(data, String::Latin1, &pos);
146 d->fileName = readStringField(data, d->textEncoding, &pos);
147 d->description = readStringField(data, d->textEncoding, &pos);
149 d->data = data.mid(pos);
152 ByteVector GeneralEncapsulatedObjectFrame::renderFields() const
156 data.append(char(d->textEncoding));
157 data.append(d->mimeType.data(String::Latin1));
158 data.append(textDelimiter(String::Latin1));
159 data.append(d->fileName.data(d->textEncoding));
160 data.append(textDelimiter(d->textEncoding));
161 data.append(d->description.data(d->textEncoding));
162 data.append(textDelimiter(d->textEncoding));
163 data.append(d->data);
168 ////////////////////////////////////////////////////////////////////////////////
170 ////////////////////////////////////////////////////////////////////////////////
172 GeneralEncapsulatedObjectFrame::GeneralEncapsulatedObjectFrame(const ByteVector &data, Header *h) : Frame(h)
174 d = new GeneralEncapsulatedObjectFramePrivate;
175 parseFields(fieldData(data));