summaryrefslogtreecommitdiffstats
path: root/src/metadata/rmff/taglib_realmediafile.h
blob: 0f0ca58d9e3aec2fe9b0a609b2d531a53f280840 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/***************************************************************************
      copyright            : (C) 2005 by Paul Cifarelli
      email                : [email protected]

      copyright            : (C) 2005 by Lukas Lalinsky
      email                : [email protected]
                             (portions)
 ***************************************************************************/

/***************************************************************************
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 ***************************************************************************/

/***************************************************************************
 *   This library is free software; you can redistribute it and/or modify  *
 *   it  under the terms of the GNU Lesser General Public License version  *
 *   2 or higher as published by the Free Software Foundation.             *
 *                                                                         *
 *   This library is distributed in the hope that it will be useful, but   *
 *   WITHOUT ANY WARRANTY; without even the implied warranty of            *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU     *
 *   Lesser General Public License for more details.                       *
 *                                                                         *
 *   You should have received a copy of the GNU Lesser General Public      *
 *   License along with this library; if not, write to the Free Software   *
 *   Foundation, Inc., 51 Franklin St, 5th fl, Boston, MA 02110-1301,      *
 *   USA, or check http://www.fsf.org/about/contact.html                   *
 ***************************************************************************/
#ifndef _TAGLIB_REALMEDIAFILE_H_
#define _TAGLIB_REALMEDIAFILE_H_

#include <tfile.h>
#include <audioproperties.h>
#include <tag.h>

#include <iostream>

class RealMediaFF;
namespace TagLib {

   namespace RealMedia {

      class Tag : public TagLib::Tag
      {
      public:
         Tag(RealMediaFF *rmff, bool allocnew = false);
         virtual   ~Tag ();
         virtual String   title () const;
         virtual String   artist () const;
         virtual String   album () const;
         virtual String   comment () const;
         virtual String   genre () const;
         virtual uint   year () const;
         virtual uint   track () const;
         virtual void   setTitle (const String &s);
         virtual void   setArtist (const String &s);
         virtual void   setAlbum (const String &s);
         virtual void   setComment (const String &s);
         virtual void   setGenre (const String &s);
         virtual void   setYear (uint i);
         virtual void   setTrack (uint i);

         bool isEmpty() const;
         void duplicate(const Tag *source, Tag *target, bool overwrite); 

      private:
         Tag();
         RealMediaFF *m_rmff;
         bool m_owner;
      };


      class Properties : public TagLib::AudioProperties
      {
      public:
         Properties(RealMediaFF *rmff) : TagLib::AudioProperties(Average), m_rmff(rmff) {}
         virtual ~Properties() {}  // you don't own rmff
         virtual int length () const;
         virtual int bitrate () const;
         virtual int sampleRate () const;
         virtual int channels () const;

      private:
         Properties();
         RealMediaFF *m_rmff;
      };
  
      class File : public TagLib::File
      {
      public:

         File(const char *file, bool readProperties = true, Properties::ReadStyle propertiesStyle = Properties::Average);
      
         virtual ~File();
    
         /*
          * Returns the TagLib::Tag for this file. 
          */
         virtual TagLib::Tag *tag() const;
         
         /*
          * Returns the RealMedia::RealMediaTag for this file. 
          */
         virtual Tag *RealMediaTag() const;
         
         /*
          * Returns the RealMedia::Properties for this file. 
          */
         virtual Properties *audioProperties() const;


         /*
          * Save the file. 
          *
          * This returns true if the save was successful.
          */
         virtual bool save() { return false; } // for now
    
      private:
      
         RealMediaFF *m_rmfile;
         Tag         *m_tag;
         Properties  *m_props;
      };
      
   }

}  

#endif