no message
[xbmc:xbmc-antiquated.git] / xbmc / lib / libID3 / tag.h
1 // -*- C++ -*-
2 // $Id$
3
4 // id3lib: a software library for creating and manipulating id3v1/v2 tags
5 // Copyright 1999, 2000  Scott Thomas Haug
6 // Copyright 2002 Thijmen Klok (thijmen@id3lib.org)
7
8 // This library is free software; you can redistribute it and/or modify it
9 // under the terms of the GNU Library General Public License as published by
10 // the Free Software Foundation; either version 2 of the License, or (at your
11 // option) any later version.
12 //
13 // This library is distributed in the hope that it will be useful, but WITHOUT
14 // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 // FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library General Public
16 // License for more details.
17 //
18 // You should have received a copy of the GNU Library General Public License
19 // along with this library; if not, write to the Free Software Foundation,
20 // Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
21
22 // The id3lib authors encourage improvements and optimisations to be sent to
23 // the id3lib coordinator.  Please see the README file for details on where to
24 // send such submissions.  See the AUTHORS file for a list of people who have
25 // contributed to id3lib.  See the ChangeLog file for a list of changes to
26 // id3lib.  These files are distributed with id3lib at
27 // http://download.sourceforge.net/id3lib/
28
29 #ifndef _ID3LIB_TAG_H_
30 #define _ID3LIB_TAG_H_
31
32 #include "id3lib_frame.h"
33 #include "field.h"
34 #include "utils.h"//for ID3_PATH_LENGTH
35
36 class ID3_Reader;
37 class ID3_Writer;
38 class ID3_TagImpl;
39 class ID3_Tag;
40
41 class ID3_CPP_EXPORT ID3_Tag
42 {
43   ID3_TagImpl* _impl;
44   char _tmp_filename[ID3_PATH_LENGTH];
45 public:
46
47   class Iterator
48   {
49   public:
50     virtual ID3_Frame*       GetNext()       = 0;
51   };
52
53   class ConstIterator
54   {
55   public:
56     virtual const ID3_Frame* GetNext()       = 0;
57   };
58
59 public:
60
61   ID3_Tag(const char *name = NULL);
62   ID3_Tag(const ID3_Tag &tag);
63   virtual ~ID3_Tag();
64
65   void       Clear();
66   bool       HasChanged() const;
67   size_t     Size() const;
68
69   bool       SetUnsync(bool);
70   bool       SetExtendedHeader(bool);
71   bool       SetExperimental(bool);
72
73   bool       GetUnsync() const;
74   bool       GetExtendedHeader() const;
75   bool       GetExperimental() const;
76
77   bool       SetPadding(bool);
78
79   void       AddFrame(const ID3_Frame&);
80   void       AddFrame(const ID3_Frame*);
81   bool       AttachFrame(ID3_Frame*);
82   ID3_Frame* RemoveFrame(const ID3_Frame *);
83
84   size_t     Parse(const uchar*, size_t);
85   bool       Parse(ID3_Reader& reader);
86   size_t     Render(uchar*, ID3_TagType = ID3TT_ID3V2) const;
87   size_t     Render(ID3_Writer&, ID3_TagType = ID3TT_ID3V2) const;
88
89   size_t     Link(const char *fileInfo, flags_t = (flags_t) ID3TT_ALL);
90   size_t     Link(ID3_Reader &reader, flags_t = (flags_t) ID3TT_ALL);
91   flags_t    Update(flags_t = (flags_t) ID3TT_ALL);
92   flags_t    Strip(flags_t = (flags_t) ID3TT_ALL);
93
94   size_t     GetPrependedBytes() const;
95   size_t     GetAppendedBytes() const;
96   size_t     GetFileSize() const;
97   const char* GetFileName() const;
98
99   ID3_Frame* Find(ID3_FrameID) const;
100   ID3_Frame* Find(ID3_FrameID, ID3_FieldID, uint32) const;
101   ID3_Frame* Find(ID3_FrameID, ID3_FieldID, const char*) const;
102   ID3_Frame* Find(ID3_FrameID, ID3_FieldID, const unicode_t*) const;
103
104   size_t     NumFrames() const;
105
106   const Mp3_Headerinfo* GetMp3HeaderInfo() const;
107
108   Iterator*  CreateIterator();
109   ConstIterator* CreateIterator() const;
110
111   ID3_Tag&   operator=( const ID3_Tag & );
112
113   bool       HasTagType(ID3_TagType tt) const;
114   ID3_V2Spec GetSpec() const;
115   bool       SetSpec(ID3_V2Spec);
116
117   static size_t IsV2Tag(const uchar*);
118   static size_t IsV2Tag(ID3_Reader&);
119
120   /* Deprecated! */
121   void       AddNewFrame(ID3_Frame* f);
122   size_t     Link(const char *fileInfo, bool parseID3v1, bool parseLyrics3);
123   void       SetCompression(bool);
124   void       AddFrames(const ID3_Frame *, size_t);
125   bool       HasLyrics() const;
126   bool       HasV2Tag()  const;
127   bool       HasV1Tag()  const;
128   size_t     Parse(const uchar header[ID3_TAGHEADERSIZE], const uchar *buffer);
129   //ID3_Frame* operator[](size_t) const;
130   //ID3_Frame* GetFrameNum(size_t) const;
131
132   ID3_Tag&   operator<<(const ID3_Frame &);
133   ID3_Tag&   operator<<(const ID3_Frame *);
134 };
135
136 // deprecated!
137 int32 ID3_C_EXPORT ID3_IsTagHeader(const uchar header[ID3_TAGHEADERSIZE]);
138
139
140 #endif /* _ID3LIB_TAG_H_ */
141