rtaglib 0.2.3 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|