1/**************************************************************************
2 copyright : (C) 2005-2007 by Lukáš Lalinský
3 email : lalinsky@gmail.com
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., 51 Franklin Street, Fifth Floor, Boston, MA *
19 * 02110-1301 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_ASFFILE_H
27#define TAGLIB_ASFFILE_H
28
29#include "tag.h"
30#include "tfile.h"
31#include "taglib_export.h"
32#include "asfproperties.h"
33#include "asftag.h"
34
35namespace TagLib {
36
37 //! An implementation of ASF (WMA) metadata
38 namespace ASF {
39
40 /*!
41 * This implements and provides an interface for ASF files to the
42 * TagLib::Tag and TagLib::AudioProperties interfaces by way of implementing
43 * the abstract TagLib::File API as well as providing some additional
44 * information specific to ASF files.
45 */
46 class TAGLIB_EXPORT File : public TagLib::File
47 {
48 public:
49
50 /*!
51 * Constructs an ASF file from \a file.
52 *
53 * \note In the current implementation, both \a readProperties and
54 * \a propertiesStyle are ignored. The audio properties are always
55 * read.
56 */
57 File(FileName file, bool readProperties = true,
58 Properties::ReadStyle propertiesStyle = Properties::Average);
59
60 /*!
61 * Constructs an ASF file from \a stream.
62 *
63 * \note In the current implementation, both \a readProperties and
64 * \a propertiesStyle are ignored. The audio properties are always
65 * read.
66 *
67 * \note TagLib will *not* take ownership of the stream, the caller is
68 * responsible for deleting it after the File object.
69 */
70 File(IOStream *stream, bool readProperties = true,
71 Properties::ReadStyle propertiesStyle = Properties::Average);
72
73 /*!
74 * Destroys this instance of the File.
75 */
76 virtual ~File();
77
78 /*!
79 * Returns a pointer to the ASF tag of the file.
80 *
81 * ASF::Tag implements the tag interface, so this serves as the
82 * reimplementation of TagLib::File::tag().
83 *
84 * \note The Tag <b>is still</b> owned by the ASF::File and should not be
85 * deleted by the user. It will be deleted when the file (object) is
86 * destroyed.
87 */
88 virtual Tag *tag() const;
89
90 /*!
91 * Implements the unified property interface -- export function.
92 */
93 PropertyMap properties() const;
94
95 /*!
96 * Removes unsupported properties. Forwards to the actual Tag's
97 * removeUnsupportedProperties() function.
98 */
99 void removeUnsupportedProperties(const StringList &properties);
100
101 /*!
102 * Implements the unified property interface -- import function.
103 */
104 PropertyMap setProperties(const PropertyMap &);
105
106 /*!
107 * Returns the ASF audio properties for this file.
108 */
109 virtual Properties *audioProperties() const;
110
111 /*!
112 * Save the file.
113 *
114 * This returns true if the save was successful.
115 */
116 virtual bool save();
117
118 private:
119 void read();
120
121 class FilePrivate;
122 FilePrivate *d;
123 };
124
125 }
126
127}
128
129#endif
130