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));