rtaglib 0.2.3 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +4 -0
- data/Manifest.txt +84 -9
- data/README.txt +0 -0
- data/Rakefile +30 -27
- data/{test/data → data}/440Hz-5sec.flac +0 -0
- data/{test/data → data}/440Hz-5sec.mp3 +0 -0
- data/{test/data → data}/440Hz-5sec.mpc +0 -0
- data/{test/data → data}/440Hz-5sec.ogg +0 -0
- data/{test/data → data}/440Hz-5sec.wv +0 -0
- data/data/test_jason.mp3 +0 -0
- data/data/test_jason.ogg +0 -0
- data/ext/Rakefile +10 -0
- data/ext/tagfile/Rakefile.rb +42 -0
- data/ext/tagfile/rake_ext_conf.rb +29 -0
- data/ext/tagfile/tagfile.c +11 -7
- data/ext/taglib/Rakefile.rb +48 -0
- data/ext/taglib/rake_ext_conf.rb +33 -0
- data/ext/taglib/taglib-mswin32/bin/tag.dll +0 -0
- data/ext/taglib/taglib-mswin32/bin/tag_c.dll +0 -0
- data/ext/taglib/taglib-mswin32/bin/tag_cd.dll +0 -0
- data/ext/taglib/taglib-mswin32/bin/tagd.dll +0 -0
- data/ext/taglib/taglib-mswin32/bin/taglib-config +55 -0
- data/ext/taglib/taglib-mswin32/include/taglib/apefooter.h +173 -0
- data/ext/taglib/taglib-mswin32/include/taglib/apeitem.h +204 -0
- data/ext/taglib/taglib-mswin32/include/taglib/apetag.h +162 -0
- data/ext/taglib/taglib-mswin32/include/taglib/attachedpictureframe.h +220 -0
- data/ext/taglib/taglib-mswin32/include/taglib/audioproperties.h +110 -0
- data/ext/taglib/taglib-mswin32/include/taglib/commentsframe.h +168 -0
- data/ext/taglib/taglib-mswin32/include/taglib/fileref.h +262 -0
- data/ext/taglib/taglib-mswin32/include/taglib/flacfile.h +201 -0
- data/ext/taglib/taglib-mswin32/include/taglib/flacproperties.h +92 -0
- data/ext/taglib/taglib-mswin32/include/taglib/generalencapsulatedobjectframe.h +174 -0
- data/ext/taglib/taglib-mswin32/include/taglib/id3v1genres.h +66 -0
- data/ext/taglib/taglib-mswin32/include/taglib/id3v1tag.h +180 -0
- data/ext/taglib/taglib-mswin32/include/taglib/id3v2extendedheader.h +93 -0
- data/ext/taglib/taglib-mswin32/include/taglib/id3v2footer.h +82 -0
- data/ext/taglib/taglib-mswin32/include/taglib/id3v2frame.h +414 -0
- data/ext/taglib/taglib-mswin32/include/taglib/id3v2framefactory.h +167 -0
- data/ext/taglib/taglib-mswin32/include/taglib/id3v2header.h +175 -0
- data/ext/taglib/taglib-mswin32/include/taglib/id3v2synchdata.h +70 -0
- data/ext/taglib/taglib-mswin32/include/taglib/id3v2tag.h +300 -0
- data/ext/taglib/taglib-mswin32/include/taglib/mpcfile.h +175 -0
- data/ext/taglib/taglib-mswin32/include/taglib/mpcproperties.h +85 -0
- data/ext/taglib/taglib-mswin32/include/taglib/mpegfile.h +277 -0
- data/ext/taglib/taglib-mswin32/include/taglib/mpegheader.h +166 -0
- data/ext/taglib/taglib-mswin32/include/taglib/mpegproperties.h +118 -0
- data/ext/taglib/taglib-mswin32/include/taglib/oggfile.h +112 -0
- data/ext/taglib/taglib-mswin32/include/taglib/oggflacfile.h +118 -0
- data/ext/taglib/taglib-mswin32/include/taglib/oggpage.h +203 -0
- data/ext/taglib/taglib-mswin32/include/taglib/oggpageheader.h +232 -0
- data/ext/taglib/taglib-mswin32/include/taglib/relativevolumeframe.h +274 -0
- data/ext/taglib/taglib-mswin32/include/taglib/speexfile.h +99 -0
- data/ext/taglib/taglib-mswin32/include/taglib/speexproperties.h +89 -0
- data/ext/taglib/taglib-mswin32/include/taglib/tag.h +173 -0
- data/ext/taglib/taglib-mswin32/include/taglib/tag_c.h +288 -0
- data/ext/taglib/taglib-mswin32/include/taglib/taglib.h +177 -0
- data/ext/taglib/taglib-mswin32/include/taglib/taglib_export.h +39 -0
- data/ext/taglib/taglib-mswin32/include/taglib/tbytevector.h +409 -0
- data/ext/taglib/taglib-mswin32/include/taglib/tbytevectorlist.h +91 -0
- data/ext/taglib/taglib-mswin32/include/taglib/textidentificationframe.h +258 -0
- data/ext/taglib/taglib-mswin32/include/taglib/tfile.h +271 -0
- data/ext/taglib/taglib-mswin32/include/taglib/tlist.h +252 -0
- data/ext/taglib/taglib-mswin32/include/taglib/tlist.tcc +316 -0
- data/ext/taglib/taglib-mswin32/include/taglib/tmap.h +200 -0
- data/ext/taglib/taglib-mswin32/include/taglib/tmap.tcc +196 -0
- data/ext/taglib/taglib-mswin32/include/taglib/trueaudiofile.h +180 -0
- data/ext/taglib/taglib-mswin32/include/taglib/trueaudioproperties.h +93 -0
- data/ext/taglib/taglib-mswin32/include/taglib/tstring.h +456 -0
- data/ext/taglib/taglib-mswin32/include/taglib/tstringlist.h +115 -0
- data/ext/taglib/taglib-mswin32/include/taglib/uniquefileidentifierframe.h +113 -0
- data/ext/taglib/taglib-mswin32/include/taglib/unknownframe.h +79 -0
- data/ext/taglib/taglib-mswin32/include/taglib/unsynchronizedlyricsframe.h +157 -0
- data/ext/taglib/taglib-mswin32/include/taglib/urllinkframe.h +172 -0
- data/ext/taglib/taglib-mswin32/include/taglib/vorbisfile.h +118 -0
- data/ext/taglib/taglib-mswin32/include/taglib/vorbisproperties.h +125 -0
- data/ext/taglib/taglib-mswin32/include/taglib/wavpackfile.h +164 -0
- data/ext/taglib/taglib-mswin32/include/taglib/wavpackproperties.h +94 -0
- data/ext/taglib/taglib-mswin32/include/taglib/xingheader.h +100 -0
- data/ext/taglib/taglib-mswin32/include/taglib/xiphcomment.h +202 -0
- data/ext/taglib/taglib-mswin32/lib/pkgconfig/taglib_c.pc +12 -0
- data/ext/taglib/taglib-mswin32/lib/tag.lib +0 -0
- data/ext/taglib/taglib-mswin32/lib/tag_c.lib +0 -0
- data/ext/taglib/taglib_i386-mingw32.source +22645 -0
- data/ext/taglib/taglib_i386-mswin32.source +22645 -0
- data/ext/taglib/{taglib.cxx → taglib_x86_64-linux.source} +508 -75
- data/lib/TagLib.rb +3 -2
- data/lib/TagLib_doc.rb +1532 -1526
- data/lib/rtaglib_mswin32.rb +4 -0
- data/lib/tagfile.rb +6 -0
- data/swig/Doxyfile +0 -0
- data/swig/Rakefile +44 -19
- data/swig/TagLib_doc.rb +2755 -0
- data/swig/make_doc.rb +5 -4
- data/swig/process_cxx.rb +2 -2
- data/swig/rake_ext_conf.rb +33 -0
- data/swig/taglib.i +8 -5
- data/swig/test.rb +47 -39
- data/test/test_read.rb +4 -3
- data/test/test_taglib.rb +47 -39
- data/test/test_write.rb +4 -3
- metadata +96 -20
- data/ext/tagfile/extconf.rb +0 -14
- data/ext/taglib/extconf.rb +0 -22
- data/swig/extconf.rb +0 -22
@@ -0,0 +1,91 @@
|
|
1
|
+
/***************************************************************************
|
2
|
+
copyright : (C) 2002 - 2008 by Scott Wheeler
|
3
|
+
email : wheeler@kde.org
|
4
|
+
***************************************************************************/
|
5
|
+
|
6
|
+
/***************************************************************************
|
7
|
+
* This library is free software; you can redistribute it and/or modify *
|
8
|
+
* it under the terms of the GNU Lesser General Public License version *
|
9
|
+
* 2.1 as published by the Free Software Foundation. *
|
10
|
+
* *
|
11
|
+
* This library is distributed in the hope that it will be useful, but *
|
12
|
+
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
13
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
|
14
|
+
* Lesser General Public License for more details. *
|
15
|
+
* *
|
16
|
+
* You should have received a copy of the GNU Lesser General Public *
|
17
|
+
* License along with this library; if not, write to the Free Software *
|
18
|
+
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
19
|
+
* USA *
|
20
|
+
* *
|
21
|
+
* Alternatively, this file is available under the Mozilla Public *
|
22
|
+
* License Version 1.1. You may obtain a copy of the License at *
|
23
|
+
* http://www.mozilla.org/MPL/ *
|
24
|
+
***************************************************************************/
|
25
|
+
|
26
|
+
#ifndef TAGLIB_BYTEVECTORLIST_H
|
27
|
+
#define TAGLIB_BYTEVECTORLIST_H
|
28
|
+
|
29
|
+
#include "taglib_export.h"
|
30
|
+
#include "tbytevector.h"
|
31
|
+
#include "tlist.h"
|
32
|
+
|
33
|
+
namespace TagLib {
|
34
|
+
|
35
|
+
//! A list of ByteVectors
|
36
|
+
|
37
|
+
/*!
|
38
|
+
* A List specialization with some handy features useful for ByteVectors.
|
39
|
+
*/
|
40
|
+
|
41
|
+
class TAGLIB_EXPORT ByteVectorList : public List<ByteVector>
|
42
|
+
{
|
43
|
+
public:
|
44
|
+
|
45
|
+
/*!
|
46
|
+
* Construct an empty ByteVectorList.
|
47
|
+
*/
|
48
|
+
ByteVectorList();
|
49
|
+
|
50
|
+
/*!
|
51
|
+
* Destroys this ByteVectorList instance.
|
52
|
+
*/
|
53
|
+
virtual ~ByteVectorList();
|
54
|
+
|
55
|
+
/*!
|
56
|
+
* Make a shallow, implicitly shared, copy of \a l. Because this is
|
57
|
+
* implicitly shared, this method is lightweight and suitable for
|
58
|
+
* pass-by-value usage.
|
59
|
+
*/
|
60
|
+
ByteVectorList(const ByteVectorList &l);
|
61
|
+
|
62
|
+
/*!
|
63
|
+
* Convert the ByteVectorList to a ByteVector separated by \a separator. By
|
64
|
+
* default a space is used.
|
65
|
+
*/
|
66
|
+
ByteVector toByteVector(const ByteVector &separator = " ") const;
|
67
|
+
|
68
|
+
/*!
|
69
|
+
* Splits the ByteVector \a v into several strings at \a pattern. This will
|
70
|
+
* not include the pattern in the returned ByteVectors.
|
71
|
+
*/
|
72
|
+
static ByteVectorList split(const ByteVector &v, const ByteVector &pattern,
|
73
|
+
int byteAlign = 1);
|
74
|
+
/*!
|
75
|
+
* Splits the ByteVector \a v into several strings at \a pattern. This will
|
76
|
+
* not include the pattern in the returned ByteVectors. \a max is the
|
77
|
+
* maximum number of entries that will be separated. If \a max for instance
|
78
|
+
* is 2 then a maximum of 1 match will be found and the vector will be split
|
79
|
+
* on that match.
|
80
|
+
*/
|
81
|
+
// BIC: merge with the function above
|
82
|
+
static ByteVectorList split(const ByteVector &v, const ByteVector &pattern,
|
83
|
+
int byteAlign, int max);
|
84
|
+
private:
|
85
|
+
class ByteVectorListPrivate;
|
86
|
+
ByteVectorListPrivate *d;
|
87
|
+
};
|
88
|
+
|
89
|
+
}
|
90
|
+
|
91
|
+
#endif
|
@@ -0,0 +1,258 @@
|
|
1
|
+
/***************************************************************************
|
2
|
+
copyright : (C) 2002 - 2008 by Scott Wheeler
|
3
|
+
email : wheeler@kde.org
|
4
|
+
***************************************************************************/
|
5
|
+
|
6
|
+
/***************************************************************************
|
7
|
+
* This library is free software; you can redistribute it and/or modify *
|
8
|
+
* it under the terms of the GNU Lesser General Public License version *
|
9
|
+
* 2.1 as published by the Free Software Foundation. *
|
10
|
+
* *
|
11
|
+
* This library is distributed in the hope that it will be useful, but *
|
12
|
+
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
13
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
|
14
|
+
* Lesser General Public License for more details. *
|
15
|
+
* *
|
16
|
+
* You should have received a copy of the GNU Lesser General Public *
|
17
|
+
* License along with this library; if not, write to the Free Software *
|
18
|
+
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
19
|
+
* USA *
|
20
|
+
* *
|
21
|
+
* Alternatively, this file is available under the Mozilla Public *
|
22
|
+
* License Version 1.1. You may obtain a copy of the License at *
|
23
|
+
* http://www.mozilla.org/MPL/ *
|
24
|
+
***************************************************************************/
|
25
|
+
|
26
|
+
#ifndef TAGLIB_TEXTIDENTIFICATIONFRAME_H
|
27
|
+
#define TAGLIB_TEXTIDENTIFICATIONFRAME_H
|
28
|
+
|
29
|
+
#include <tstringlist.h>
|
30
|
+
#include "taglib_export.h"
|
31
|
+
|
32
|
+
#include <id3v2frame.h>
|
33
|
+
|
34
|
+
namespace TagLib {
|
35
|
+
|
36
|
+
namespace ID3v2 {
|
37
|
+
|
38
|
+
class Tag;
|
39
|
+
|
40
|
+
//! An ID3v2 text identification frame implementation
|
41
|
+
|
42
|
+
/*!
|
43
|
+
* This is an implementation of the most common type of ID3v2 frame -- text
|
44
|
+
* identification frames. There are a number of variations on this. Those
|
45
|
+
* enumerated in the ID3v2.4 standard are:
|
46
|
+
*
|
47
|
+
* <ul>
|
48
|
+
* <li><b>TALB</b> Album/Movie/Show title</li>
|
49
|
+
* <li><b>TBPM</b> BPM (beats per minute)</li>
|
50
|
+
* <li><b>TCOM</b> Composer</li>
|
51
|
+
* <li><b>TCON</b> Content type</li>
|
52
|
+
* <li><b>TCOP</b> Copyright message</li>
|
53
|
+
* <li><b>TDEN</b> Encoding time</li>
|
54
|
+
* <li><b>TDLY</b> Playlist delay</li>
|
55
|
+
* <li><b>TDOR</b> Original release time</li>
|
56
|
+
* <li><b>TDRC</b> Recording time</li>
|
57
|
+
* <li><b>TDRL</b> Release time</li>
|
58
|
+
* <li><b>TDTG</b> Tagging time</li>
|
59
|
+
* <li><b>TENC</b> Encoded by</li>
|
60
|
+
* <li><b>TEXT</b> Lyricist/Text writer</li>
|
61
|
+
* <li><b>TFLT</b> File type</li>
|
62
|
+
* <li><b>TIPL</b> Involved people list</li>
|
63
|
+
* <li><b>TIT1</b> Content group description</li>
|
64
|
+
* <li><b>TIT2</b> Title/songname/content description</li>
|
65
|
+
* <li><b>TIT3</b> Subtitle/Description refinement</li>
|
66
|
+
* <li><b>TKEY</b> Initial key</li>
|
67
|
+
* <li><b>TLAN</b> Language(s)</li>
|
68
|
+
* <li><b>TLEN</b> Length</li>
|
69
|
+
* <li><b>TMCL</b> Musician credits list</li>
|
70
|
+
* <li><b>TMED</b> Media type</li>
|
71
|
+
* <li><b>TMOO</b> Mood</li>
|
72
|
+
* <li><b>TOAL</b> Original album/movie/show title</li>
|
73
|
+
* <li><b>TOFN</b> Original filename</li>
|
74
|
+
* <li><b>TOLY</b> Original lyricist(s)/text writer(s)</li>
|
75
|
+
* <li><b>TOPE</b> Original artist(s)/performer(s)</li>
|
76
|
+
* <li><b>TOWN</b> File owner/licensee</li>
|
77
|
+
* <li><b>TPE1</b> Lead performer(s)/Soloist(s)</li>
|
78
|
+
* <li><b>TPE2</b> Band/orchestra/accompaniment</li>
|
79
|
+
* <li><b>TPE3</b> Conductor/performer refinement</li>
|
80
|
+
* <li><b>TPE4</b> Interpreted, remixed, or otherwise modified by</li>
|
81
|
+
* <li><b>TPOS</b> Part of a set</li>
|
82
|
+
* <li><b>TPRO</b> Produced notice</li>
|
83
|
+
* <li><b>TPUB</b> Publisher</li>
|
84
|
+
* <li><b>TRCK</b> Track number/Position in set</li>
|
85
|
+
* <li><b>TRSN</b> Internet radio station name</li>
|
86
|
+
* <li><b>TRSO</b> Internet radio station owner</li>
|
87
|
+
* <li><b>TSOA</b> Album sort order</li>
|
88
|
+
* <li><b>TSOP</b> Performer sort order</li>
|
89
|
+
* <li><b>TSOT</b> Title sort order</li>
|
90
|
+
* <li><b>TSRC</b> ISRC (international standard recording code)</li>
|
91
|
+
* <li><b>TSSE</b> Software/Hardware and settings used for encoding</li>
|
92
|
+
* <li><b>TSST</b> Set subtitle</li>
|
93
|
+
* </ul>
|
94
|
+
*
|
95
|
+
* The ID3v2 Frames document gives a description of each of these formats
|
96
|
+
* and the expected order of strings in each. ID3v2::Header::frameID() can
|
97
|
+
* be used to determine the frame type.
|
98
|
+
*
|
99
|
+
* \note If non-Latin1 compatible strings are used with this class, even if
|
100
|
+
* the text encoding is set to Latin1, the frame will be written using UTF8
|
101
|
+
* (with the encoding flag appropriately set in the output).
|
102
|
+
*/
|
103
|
+
|
104
|
+
class TAGLIB_EXPORT TextIdentificationFrame : public Frame
|
105
|
+
{
|
106
|
+
friend class FrameFactory;
|
107
|
+
|
108
|
+
public:
|
109
|
+
/*!
|
110
|
+
* Construct an empty frame of type \a type. Uses \a encoding as the
|
111
|
+
* default text encoding.
|
112
|
+
*
|
113
|
+
* \note In this case you must specify the text encoding as it
|
114
|
+
* resolves the ambiguity between constructors.
|
115
|
+
*
|
116
|
+
* \note Please see the note in the class description regarding Latin1.
|
117
|
+
*/
|
118
|
+
TextIdentificationFrame(const ByteVector &type, String::Type encoding);
|
119
|
+
|
120
|
+
/*!
|
121
|
+
* This is a dual purpose constructor. \a data can either be binary data
|
122
|
+
* that should be parsed or (at a minimum) the frame ID.
|
123
|
+
*/
|
124
|
+
explicit TextIdentificationFrame(const ByteVector &data);
|
125
|
+
|
126
|
+
/*!
|
127
|
+
* Destroys this TextIdentificationFrame instance.
|
128
|
+
*/
|
129
|
+
virtual ~TextIdentificationFrame();
|
130
|
+
|
131
|
+
/*!
|
132
|
+
* Text identification frames are a list of string fields.
|
133
|
+
*
|
134
|
+
* This function will accept either a StringList or a String (using the
|
135
|
+
* StringList constructor that accepts a single String).
|
136
|
+
*
|
137
|
+
* \note This will not change the text encoding of the frame even if the
|
138
|
+
* strings passed in are not of the same encoding. Please use
|
139
|
+
* setEncoding(s.type()) if you wish to change the encoding of the frame.
|
140
|
+
*/
|
141
|
+
void setText(const StringList &l);
|
142
|
+
|
143
|
+
// Reimplementations.
|
144
|
+
|
145
|
+
virtual void setText(const String &s);
|
146
|
+
virtual String toString() const;
|
147
|
+
|
148
|
+
/*!
|
149
|
+
* Returns the text encoding that will be used in rendering this frame.
|
150
|
+
* This defaults to the type that was either specified in the constructor
|
151
|
+
* or read from the frame when parsed.
|
152
|
+
*
|
153
|
+
* \note Please see the note in the class description regarding Latin1.
|
154
|
+
*
|
155
|
+
* \see setTextEncoding()
|
156
|
+
* \see render()
|
157
|
+
*/
|
158
|
+
String::Type textEncoding() const;
|
159
|
+
|
160
|
+
/*!
|
161
|
+
* Sets the text encoding to be used when rendering this frame to
|
162
|
+
* \a encoding.
|
163
|
+
*
|
164
|
+
* \note Please see the note in the class description regarding Latin1.
|
165
|
+
*
|
166
|
+
* \see textEncoding()
|
167
|
+
* \see render()
|
168
|
+
*/
|
169
|
+
void setTextEncoding(String::Type encoding);
|
170
|
+
|
171
|
+
/*!
|
172
|
+
* Returns a list of the strings in this frame.
|
173
|
+
*/
|
174
|
+
StringList fieldList() const;
|
175
|
+
|
176
|
+
protected:
|
177
|
+
// Reimplementations.
|
178
|
+
|
179
|
+
virtual void parseFields(const ByteVector &data);
|
180
|
+
virtual ByteVector renderFields() const;
|
181
|
+
|
182
|
+
/*!
|
183
|
+
* The constructor used by the FrameFactory.
|
184
|
+
*/
|
185
|
+
TextIdentificationFrame(const ByteVector &data, Header *h);
|
186
|
+
|
187
|
+
private:
|
188
|
+
TextIdentificationFrame(const TextIdentificationFrame &);
|
189
|
+
TextIdentificationFrame &operator=(const TextIdentificationFrame &);
|
190
|
+
|
191
|
+
class TextIdentificationFramePrivate;
|
192
|
+
TextIdentificationFramePrivate *d;
|
193
|
+
};
|
194
|
+
|
195
|
+
/*!
|
196
|
+
* This is a specialization of text identification frames that allows for
|
197
|
+
* user defined entries. Each entry has a description in addition to the
|
198
|
+
* normal list of fields that a text identification frame has.
|
199
|
+
*
|
200
|
+
* This description identifies the frame and must be unique.
|
201
|
+
*/
|
202
|
+
|
203
|
+
//! An ID3v2 custom text identification frame implementationx
|
204
|
+
|
205
|
+
class TAGLIB_EXPORT UserTextIdentificationFrame : public TextIdentificationFrame
|
206
|
+
{
|
207
|
+
friend class FrameFactory;
|
208
|
+
|
209
|
+
public:
|
210
|
+
/*!
|
211
|
+
* Constructs an empty user defined text identification frame. For this to be
|
212
|
+
* a useful frame both a description and text must be set.
|
213
|
+
*/
|
214
|
+
explicit UserTextIdentificationFrame(String::Type encoding = String::Latin1);
|
215
|
+
|
216
|
+
/*!
|
217
|
+
* Creates a frame based on \a data.
|
218
|
+
*/
|
219
|
+
explicit UserTextIdentificationFrame(const ByteVector &data);
|
220
|
+
|
221
|
+
virtual String toString() const;
|
222
|
+
|
223
|
+
/*!
|
224
|
+
* Returns the description for this frame.
|
225
|
+
*/
|
226
|
+
String description() const;
|
227
|
+
|
228
|
+
/*!
|
229
|
+
* Sets the description of the frame to \a s. \a s must be unique. You can
|
230
|
+
* check for the presence of another user defined text frame of the same type
|
231
|
+
* using find() and testing for null.
|
232
|
+
*/
|
233
|
+
void setDescription(const String &s);
|
234
|
+
|
235
|
+
StringList fieldList() const;
|
236
|
+
void setText(const String &text);
|
237
|
+
void setText(const StringList &fields);
|
238
|
+
|
239
|
+
/*!
|
240
|
+
* Searches for the user defined text frame with the description \a description
|
241
|
+
* in \a tag. This returns null if no matching frames were found.
|
242
|
+
*/
|
243
|
+
static UserTextIdentificationFrame *find(Tag *tag, const String &description);
|
244
|
+
|
245
|
+
private:
|
246
|
+
UserTextIdentificationFrame(const ByteVector &data, Header *h);
|
247
|
+
UserTextIdentificationFrame(const TextIdentificationFrame &);
|
248
|
+
UserTextIdentificationFrame &operator=(const UserTextIdentificationFrame &);
|
249
|
+
|
250
|
+
void checkFields();
|
251
|
+
|
252
|
+
class UserTextIdentificationFramePrivate;
|
253
|
+
UserTextIdentificationFramePrivate *d;
|
254
|
+
};
|
255
|
+
|
256
|
+
}
|
257
|
+
}
|
258
|
+
#endif
|
@@ -0,0 +1,271 @@
|
|
1
|
+
/***************************************************************************
|
2
|
+
copyright : (C) 2002 - 2008 by Scott Wheeler
|
3
|
+
email : wheeler@kde.org
|
4
|
+
***************************************************************************/
|
5
|
+
|
6
|
+
/***************************************************************************
|
7
|
+
* This library is free software; you can redistribute it and/or modify *
|
8
|
+
* it under the terms of the GNU Lesser General Public License version *
|
9
|
+
* 2.1 as published by the Free Software Foundation. *
|
10
|
+
* *
|
11
|
+
* This library is distributed in the hope that it will be useful, but *
|
12
|
+
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
13
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
|
14
|
+
* Lesser General Public License for more details. *
|
15
|
+
* *
|
16
|
+
* You should have received a copy of the GNU Lesser General Public *
|
17
|
+
* License along with this library; if not, write to the Free Software *
|
18
|
+
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
19
|
+
* USA *
|
20
|
+
* *
|
21
|
+
* Alternatively, this file is available under the Mozilla Public *
|
22
|
+
* License Version 1.1. You may obtain a copy of the License at *
|
23
|
+
* http://www.mozilla.org/MPL/ *
|
24
|
+
***************************************************************************/
|
25
|
+
|
26
|
+
#ifndef TAGLIB_FILE_H
|
27
|
+
#define TAGLIB_FILE_H
|
28
|
+
|
29
|
+
#include "taglib_export.h"
|
30
|
+
#include "taglib.h"
|
31
|
+
#include "tbytevector.h"
|
32
|
+
|
33
|
+
namespace TagLib {
|
34
|
+
|
35
|
+
class String;
|
36
|
+
class Tag;
|
37
|
+
class AudioProperties;
|
38
|
+
|
39
|
+
#ifdef _WIN32
|
40
|
+
class TAGLIB_EXPORT FileName
|
41
|
+
{
|
42
|
+
public:
|
43
|
+
FileName(const wchar_t *name) : m_wname(name) {}
|
44
|
+
FileName(const char *name) : m_name(name) {}
|
45
|
+
operator const wchar_t *() const { return m_wname.c_str(); }
|
46
|
+
operator const char *() const { return m_name.c_str(); }
|
47
|
+
private:
|
48
|
+
std::string m_name;
|
49
|
+
std::wstring m_wname;
|
50
|
+
};
|
51
|
+
#else
|
52
|
+
typedef const char *FileName;
|
53
|
+
#endif
|
54
|
+
|
55
|
+
//! A file class with some useful methods for tag manipulation
|
56
|
+
|
57
|
+
/*!
|
58
|
+
* This class is a basic file class with some methods that are particularly
|
59
|
+
* useful for tag editors. It has methods to take advantage of
|
60
|
+
* ByteVector and a binary search method for finding patterns in a file.
|
61
|
+
*/
|
62
|
+
|
63
|
+
class TAGLIB_EXPORT File
|
64
|
+
{
|
65
|
+
public:
|
66
|
+
/*!
|
67
|
+
* Position in the file used for seeking.
|
68
|
+
*/
|
69
|
+
enum Position {
|
70
|
+
//! Seek from the beginning of the file.
|
71
|
+
Beginning,
|
72
|
+
//! Seek from the current position in the file.
|
73
|
+
Current,
|
74
|
+
//! Seek from the end of the file.
|
75
|
+
End
|
76
|
+
};
|
77
|
+
|
78
|
+
/*!
|
79
|
+
* Destroys this File instance.
|
80
|
+
*/
|
81
|
+
virtual ~File();
|
82
|
+
|
83
|
+
/*!
|
84
|
+
* Returns the file name in the local file system encoding.
|
85
|
+
*/
|
86
|
+
FileName name() const;
|
87
|
+
|
88
|
+
/*!
|
89
|
+
* Returns a pointer to this file's tag. This should be reimplemented in
|
90
|
+
* the concrete subclasses.
|
91
|
+
*/
|
92
|
+
virtual Tag *tag() const = 0;
|
93
|
+
|
94
|
+
/*!
|
95
|
+
* Returns a pointer to this file's audio properties. This should be
|
96
|
+
* reimplemented in the concrete subclasses. If no audio properties were
|
97
|
+
* read then this will return a null pointer.
|
98
|
+
*/
|
99
|
+
virtual AudioProperties *audioProperties() const = 0;
|
100
|
+
|
101
|
+
/*!
|
102
|
+
* Save the file and its associated tags. This should be reimplemented in
|
103
|
+
* the concrete subclasses. Returns true if the save succeeds.
|
104
|
+
*
|
105
|
+
* \warning On UNIX multiple processes are able to write to the same file at
|
106
|
+
* the same time. This can result in serious file corruption. If you are
|
107
|
+
* developing a program that makes use of TagLib from multiple processes you
|
108
|
+
* must insure that you are only doing writes to a particular file from one
|
109
|
+
* of them.
|
110
|
+
*/
|
111
|
+
virtual bool save() = 0;
|
112
|
+
|
113
|
+
/*!
|
114
|
+
* Reads a block of size \a length at the current get pointer.
|
115
|
+
*/
|
116
|
+
ByteVector readBlock(ulong length);
|
117
|
+
|
118
|
+
/*!
|
119
|
+
* Attempts to write the block \a data at the current get pointer. If the
|
120
|
+
* file is currently only opened read only -- i.e. readOnly() returns true --
|
121
|
+
* this attempts to reopen the file in read/write mode.
|
122
|
+
*
|
123
|
+
* \note This should be used instead of using the streaming output operator
|
124
|
+
* for a ByteVector. And even this function is significantly slower than
|
125
|
+
* doing output with a char[].
|
126
|
+
*/
|
127
|
+
void writeBlock(const ByteVector &data);
|
128
|
+
|
129
|
+
/*!
|
130
|
+
* Returns the offset in the file that \a pattern occurs at or -1 if it can
|
131
|
+
* not be found. If \a before is set, the search will only continue until the
|
132
|
+
* pattern \a before is found. This is useful for tagging purposes to search
|
133
|
+
* for a tag before the synch frame.
|
134
|
+
*
|
135
|
+
* Searching starts at \a fromOffset, which defaults to the beginning of the
|
136
|
+
* file.
|
137
|
+
*
|
138
|
+
* \note This has the practial limitation that \a pattern can not be longer
|
139
|
+
* than the buffer size used by readBlock(). Currently this is 1024 bytes.
|
140
|
+
*/
|
141
|
+
long find(const ByteVector &pattern,
|
142
|
+
long fromOffset = 0,
|
143
|
+
const ByteVector &before = ByteVector::null);
|
144
|
+
|
145
|
+
/*!
|
146
|
+
* Returns the offset in the file that \a pattern occurs at or -1 if it can
|
147
|
+
* not be found. If \a before is set, the search will only continue until the
|
148
|
+
* pattern \a before is found. This is useful for tagging purposes to search
|
149
|
+
* for a tag before the synch frame.
|
150
|
+
*
|
151
|
+
* Searching starts at \a fromOffset and proceeds from the that point to the
|
152
|
+
* beginning of the file and defaults to the end of the file.
|
153
|
+
*
|
154
|
+
* \note This has the practial limitation that \a pattern can not be longer
|
155
|
+
* than the buffer size used by readBlock(). Currently this is 1024 bytes.
|
156
|
+
*/
|
157
|
+
long rfind(const ByteVector &pattern,
|
158
|
+
long fromOffset = 0,
|
159
|
+
const ByteVector &before = ByteVector::null);
|
160
|
+
|
161
|
+
/*!
|
162
|
+
* Insert \a data at position \a start in the file overwriting \a replace
|
163
|
+
* bytes of the original content.
|
164
|
+
*
|
165
|
+
* \note This method is slow since it requires rewriting all of the file
|
166
|
+
* after the insertion point.
|
167
|
+
*/
|
168
|
+
void insert(const ByteVector &data, ulong start = 0, ulong replace = 0);
|
169
|
+
|
170
|
+
/*!
|
171
|
+
* Removes a block of the file starting a \a start and continuing for
|
172
|
+
* \a length bytes.
|
173
|
+
*
|
174
|
+
* \note This method is slow since it involves rewriting all of the file
|
175
|
+
* after the removed portion.
|
176
|
+
*/
|
177
|
+
void removeBlock(ulong start = 0, ulong length = 0);
|
178
|
+
|
179
|
+
/*!
|
180
|
+
* Returns true if the file is read only (or if the file can not be opened).
|
181
|
+
*/
|
182
|
+
bool readOnly() const;
|
183
|
+
|
184
|
+
/*!
|
185
|
+
* Since the file can currently only be opened as an argument to the
|
186
|
+
* constructor (sort-of by design), this returns if that open succeeded.
|
187
|
+
*/
|
188
|
+
bool isOpen() const;
|
189
|
+
|
190
|
+
/*!
|
191
|
+
* Returns true if the file is open and readble and valid information for
|
192
|
+
* the Tag and / or AudioProperties was found.
|
193
|
+
*/
|
194
|
+
bool isValid() const;
|
195
|
+
|
196
|
+
/*!
|
197
|
+
* Move the I/O pointer to \a offset in the file from position \a p. This
|
198
|
+
* defaults to seeking from the beginning of the file.
|
199
|
+
*
|
200
|
+
* \see Position
|
201
|
+
*/
|
202
|
+
void seek(long offset, Position p = Beginning);
|
203
|
+
|
204
|
+
/*!
|
205
|
+
* Reset the end-of-file and error flags on the file.
|
206
|
+
*/
|
207
|
+
void clear();
|
208
|
+
|
209
|
+
/*!
|
210
|
+
* Returns the current offset withing the file.
|
211
|
+
*/
|
212
|
+
long tell() const;
|
213
|
+
|
214
|
+
/*!
|
215
|
+
* Returns the length of the file.
|
216
|
+
*/
|
217
|
+
long length();
|
218
|
+
|
219
|
+
/*!
|
220
|
+
* Returns true if \a file can be opened for reading. If the file does not
|
221
|
+
* exist, this will return false.
|
222
|
+
*
|
223
|
+
* \deprecated
|
224
|
+
*/
|
225
|
+
static bool isReadable(const char *file);
|
226
|
+
|
227
|
+
/*!
|
228
|
+
* Returns true if \a file can be opened for writing.
|
229
|
+
*
|
230
|
+
* \deprecated
|
231
|
+
*/
|
232
|
+
static bool isWritable(const char *name);
|
233
|
+
|
234
|
+
protected:
|
235
|
+
/*!
|
236
|
+
* Construct a File object and opens the \a file. \a file should be a
|
237
|
+
* be a C-string in the local file system encoding.
|
238
|
+
*
|
239
|
+
* \note Constructor is protected since this class should only be
|
240
|
+
* instantiated through subclasses.
|
241
|
+
*/
|
242
|
+
File(FileName file);
|
243
|
+
|
244
|
+
/*!
|
245
|
+
* Marks the file as valid or invalid.
|
246
|
+
*
|
247
|
+
* \see isValid()
|
248
|
+
*/
|
249
|
+
void setValid(bool valid);
|
250
|
+
|
251
|
+
/*!
|
252
|
+
* Truncates the file to a \a length.
|
253
|
+
*/
|
254
|
+
void truncate(long length);
|
255
|
+
|
256
|
+
/*!
|
257
|
+
* Returns the buffer size that is used for internal buffering.
|
258
|
+
*/
|
259
|
+
static uint bufferSize();
|
260
|
+
|
261
|
+
private:
|
262
|
+
File(const File &);
|
263
|
+
File &operator=(const File &);
|
264
|
+
|
265
|
+
class FilePrivate;
|
266
|
+
FilePrivate *d;
|
267
|
+
};
|
268
|
+
|
269
|
+
}
|
270
|
+
|
271
|
+
#endif
|