1
/***************************************************************************
2
copyright : (C) 2002 - 2008 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 *
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
***************************************************************************/
28
#include "urllinkframe.h"
30
#include <tstringlist.h>
32
using namespace TagLib;
33
using namespace ID3v2;
35
class UrlLinkFrame::UrlLinkFramePrivate
41
class UserUrlLinkFrame::UserUrlLinkFramePrivate
44
UserUrlLinkFramePrivate() : textEncoding(String::Latin1) {}
45
String::Type textEncoding;
49
UrlLinkFrame::UrlLinkFrame(const ByteVector &data) :
52
d = new UrlLinkFramePrivate;
56
UrlLinkFrame::~UrlLinkFrame()
61
void UrlLinkFrame::setUrl(const String &s)
66
String UrlLinkFrame::url() const
71
void UrlLinkFrame::setText(const String &s)
76
String UrlLinkFrame::toString() const
81
void UrlLinkFrame::parseFields(const ByteVector &data)
83
d->url = String(data);
86
ByteVector UrlLinkFrame::renderFields() const
88
return d->url.data(String::Latin1);
91
UrlLinkFrame::UrlLinkFrame(const ByteVector &data, Header *h) : Frame(h)
93
d = new UrlLinkFramePrivate;
94
parseFields(fieldData(data));
98
UserUrlLinkFrame::UserUrlLinkFrame(String::Type encoding) :
101
d = new UserUrlLinkFramePrivate;
102
d->textEncoding = encoding;
105
UserUrlLinkFrame::UserUrlLinkFrame(const ByteVector &data) :
108
d = new UserUrlLinkFramePrivate;
112
UserUrlLinkFrame::~UserUrlLinkFrame()
117
String UserUrlLinkFrame::toString() const
119
return "[" + description() + "] " + url();
122
String::Type UserUrlLinkFrame::textEncoding() const
124
return d->textEncoding;
127
void UserUrlLinkFrame::setTextEncoding(String::Type encoding)
129
d->textEncoding = encoding;
132
String UserUrlLinkFrame::description() const
134
return d->description;
137
void UserUrlLinkFrame::setDescription(const String &s)
142
void UserUrlLinkFrame::parseFields(const ByteVector &data)
144
if(data.size() < 2) {
145
debug("A user URL link frame must contain at least 2 bytes.");
151
d->textEncoding = String::Type(data[0]);
154
if(d->textEncoding == String::Latin1 || d->textEncoding == String::UTF8) {
155
int offset = data.find(textDelimiter(d->textEncoding), pos);
159
d->description = String(data.mid(pos, offset - pos), d->textEncoding);
163
int len = data.mid(pos).find(textDelimiter(d->textEncoding), 0, 2);
167
d->description = String(data.mid(pos, len), d->textEncoding);
171
setUrl(String(data.mid(pos)));
174
ByteVector UserUrlLinkFrame::renderFields() const
178
String::Type encoding = checkEncoding(d->description, d->textEncoding);
180
v.append(char(encoding));
181
v.append(d->description.data(encoding));
182
v.append(textDelimiter(encoding));
183
v.append(url().data(String::Latin1));
188
UserUrlLinkFrame::UserUrlLinkFrame(const ByteVector &data, Header *h) : UrlLinkFrame(data, h)
190
d = new UserUrlLinkFramePrivate;
191
parseFields(fieldData(data));