~njh-aelius/maxosx/musicbrainz-tags

« back to all changes in this revision

Viewing changes to Frameworks/taglib/taglib/taglib/mpeg/id3v2/frames/urllinkframe.cpp

  • Committer: stephen_booth
  • Date: 2008-04-30 01:48:01 UTC
  • Revision ID: svn-v4:6b6cea13-1402-0410-9567-a7afb52bf336:trunk:1371
Fixing the taglib source tree

Show diffs side-by-side

added added

removed removed

Lines of Context:
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
 
 ***************************************************************************/
7
 
 
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.                     *
12
 
 *                                                                         *
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.                       *
17
 
 *                                                                         *
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  *
21
 
 *   USA                                                                   *
22
 
 *                                                                         *
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
 
 ***************************************************************************/
27
 
 
28
 
#include "urllinkframe.h"
29
 
#include <tdebug.h>
30
 
#include <tstringlist.h>
31
 
 
32
 
using namespace TagLib;
33
 
using namespace ID3v2;
34
 
 
35
 
class UrlLinkFrame::UrlLinkFramePrivate
36
 
{
37
 
public:
38
 
  String url;
39
 
};
40
 
 
41
 
class UserUrlLinkFrame::UserUrlLinkFramePrivate
42
 
{
43
 
public:
44
 
  UserUrlLinkFramePrivate() : textEncoding(String::Latin1) {}
45
 
  String::Type textEncoding;
46
 
  String description;
47
 
};
48
 
 
49
 
UrlLinkFrame::UrlLinkFrame(const ByteVector &data) :
50
 
  Frame(data)
51
 
{
52
 
  d = new UrlLinkFramePrivate;
53
 
  setData(data);
54
 
}
55
 
 
56
 
UrlLinkFrame::~UrlLinkFrame()
57
 
{
58
 
  delete d;
59
 
}
60
 
 
61
 
void UrlLinkFrame::setUrl(const String &s)
62
 
{
63
 
  d->url = s;
64
 
}
65
 
 
66
 
String UrlLinkFrame::url() const
67
 
{
68
 
  return d->url;
69
 
}
70
 
 
71
 
void UrlLinkFrame::setText(const String &s)
72
 
{
73
 
  setUrl(s);
74
 
}
75
 
 
76
 
String UrlLinkFrame::toString() const
77
 
{
78
 
  return url();
79
 
}
80
 
 
81
 
void UrlLinkFrame::parseFields(const ByteVector &data)
82
 
{
83
 
  d->url = String(data);
84
 
}
85
 
 
86
 
ByteVector UrlLinkFrame::renderFields() const
87
 
{
88
 
  return d->url.data(String::Latin1);
89
 
}
90
 
 
91
 
UrlLinkFrame::UrlLinkFrame(const ByteVector &data, Header *h) : Frame(h)
92
 
{
93
 
  d = new UrlLinkFramePrivate;
94
 
  parseFields(fieldData(data));
95
 
}
96
 
 
97
 
 
98
 
UserUrlLinkFrame::UserUrlLinkFrame(String::Type encoding) :
99
 
  UrlLinkFrame("WXXX")
100
 
{
101
 
  d = new UserUrlLinkFramePrivate;
102
 
  d->textEncoding = encoding;
103
 
}
104
 
 
105
 
UserUrlLinkFrame::UserUrlLinkFrame(const ByteVector &data) :
106
 
  UrlLinkFrame(data)
107
 
{
108
 
  d = new UserUrlLinkFramePrivate;
109
 
  setData(data);
110
 
}
111
 
 
112
 
UserUrlLinkFrame::~UserUrlLinkFrame()
113
 
{
114
 
  delete d;
115
 
}
116
 
 
117
 
String UserUrlLinkFrame::toString() const
118
 
{
119
 
  return "[" + description() + "] " + url();
120
 
}
121
 
 
122
 
String::Type UserUrlLinkFrame::textEncoding() const
123
 
{
124
 
  return d->textEncoding;
125
 
}
126
 
 
127
 
void UserUrlLinkFrame::setTextEncoding(String::Type encoding)
128
 
{
129
 
  d->textEncoding = encoding;
130
 
}
131
 
 
132
 
String UserUrlLinkFrame::description() const
133
 
{
134
 
  return d->description;
135
 
}
136
 
 
137
 
void UserUrlLinkFrame::setDescription(const String &s)
138
 
{
139
 
  d->description = s;
140
 
}
141
 
 
142
 
void UserUrlLinkFrame::parseFields(const ByteVector &data)
143
 
{
144
 
  if(data.size() < 2) {
145
 
    debug("A user URL link frame must contain at least 2 bytes.");
146
 
    return;
147
 
  }
148
 
 
149
 
  int pos = 0;
150
 
 
151
 
  d->textEncoding = String::Type(data[0]);
152
 
  pos += 1;
153
 
 
154
 
  if(d->textEncoding == String::Latin1 || d->textEncoding == String::UTF8) {
155
 
    int offset = data.find(textDelimiter(d->textEncoding), pos);
156
 
    if(offset < pos)
157
 
      return;
158
 
 
159
 
    d->description = String(data.mid(pos, offset - pos), d->textEncoding);
160
 
    pos = offset + 1;
161
 
  }
162
 
  else {
163
 
    int len = data.mid(pos).find(textDelimiter(d->textEncoding), 0, 2);
164
 
    if(len < 0)
165
 
      return;
166
 
 
167
 
    d->description = String(data.mid(pos, len), d->textEncoding);
168
 
    pos += len + 2;
169
 
  }
170
 
 
171
 
  setUrl(String(data.mid(pos)));
172
 
}
173
 
 
174
 
ByteVector UserUrlLinkFrame::renderFields() const
175
 
{
176
 
  ByteVector v;
177
 
 
178
 
  String::Type encoding = checkEncoding(d->description, d->textEncoding);
179
 
 
180
 
  v.append(char(encoding));
181
 
  v.append(d->description.data(encoding));
182
 
  v.append(textDelimiter(encoding));
183
 
  v.append(url().data(String::Latin1));
184
 
 
185
 
  return v;
186
 
}
187
 
 
188
 
UserUrlLinkFrame::UserUrlLinkFrame(const ByteVector &data, Header *h) : UrlLinkFrame(data, h)
189
 
{
190
 
  d = new UserUrlLinkFramePrivate;
191
 
  parseFields(fieldData(data));
192
 
}