1
/***************************************************************************
2
copyright : (C) 2002, 2003 by Scott Wheeler
3
email : wheeler@kde.org
4
copyright : (C) 2006 by Urs Fleisch
5
email : ufleisch@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 *
22
***************************************************************************/
24
#include "urllinkframe.h"
27
using namespace TagLib;
28
using namespace ID3v2;
30
class UrlLinkFrame::UrlLinkFramePrivate {
35
class UserUrlLinkFrame::UserUrlLinkFramePrivate {
37
UserUrlLinkFramePrivate() : textEncoding(String::Latin1) {}
38
String::Type textEncoding;
42
UrlLinkFrame::UrlLinkFrame(const ByteVector &data) :
45
d = new UrlLinkFramePrivate;
49
UrlLinkFrame::~UrlLinkFrame()
54
void UrlLinkFrame::setUrl(const String &s)
59
String UrlLinkFrame::url() const
64
void UrlLinkFrame::setText(const String &s)
69
String UrlLinkFrame::toString() const
74
void UrlLinkFrame::parseFields(const ByteVector &data)
76
d->url = String(data);
79
ByteVector UrlLinkFrame::renderFields() const
81
return d->url.data(String::Latin1);
84
UrlLinkFrame::UrlLinkFrame(const ByteVector &data, Header *h) : Frame(h)
86
d = new UrlLinkFramePrivate;
87
parseFields(fieldData(data));
91
UserUrlLinkFrame::UserUrlLinkFrame(String::Type encoding) :
94
d = new UserUrlLinkFramePrivate;
95
d->textEncoding = encoding;
98
UserUrlLinkFrame::UserUrlLinkFrame(const ByteVector &data) :
101
d = new UserUrlLinkFramePrivate;
105
UserUrlLinkFrame::~UserUrlLinkFrame()
110
String UserUrlLinkFrame::toString() const
112
return "[" + description() + "] " + url();
115
String::Type UserUrlLinkFrame::textEncoding() const
117
return d->textEncoding;
120
void UserUrlLinkFrame::setTextEncoding(String::Type encoding)
122
d->textEncoding = encoding;
125
String UserUrlLinkFrame::description() const
127
return d->description;
130
void UserUrlLinkFrame::setDescription(const String &s)
135
void UserUrlLinkFrame::parseFields(const ByteVector &data)
137
if (data.size() < 2) {
138
debug("A user URL link frame must contain at least 2 bytes.");
144
d->textEncoding = String::Type(data[0]);
147
if (d->textEncoding == String::Latin1 || d->textEncoding == String::UTF8) {
148
int offset = data.find(textDelimiter(d->textEncoding), pos);
152
d->description = String(data.mid(pos, offset - pos), d->textEncoding);
155
int len = data.mid(pos).find(textDelimiter(d->textEncoding), 0, 2);
159
d->description = String(data.mid(pos, len), d->textEncoding);
163
setUrl(String(data.mid(pos)));
166
ByteVector UserUrlLinkFrame::renderFields() const
170
v.append(char(d->textEncoding));
171
v.append(d->description.data(d->textEncoding));
172
v.append(textDelimiter(d->textEncoding));
173
v.append(url().data(String::Latin1));
178
UserUrlLinkFrame::UserUrlLinkFrame(const ByteVector &data, Header *h) : UrlLinkFrame(data, h)
180
d = new UserUrlLinkFramePrivate;
181
parseFields(fieldData(data));