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