1 /****************************************************************************************
2  * Copyright (c) 2007 Maximilian Kossick <maximilian.kossick@googlemail.com>            *
3  * Copyright (c) 2009 Nikolaj Hald Nielsen <nhn@kde.org>                                *
4  *                                                                                      *
5  * This program is free software; you can redistribute it and/or modify it under        *
6  * the terms of the GNU General Public License as published by the Free Software        *
7  * Foundation; either version 2 of the License, or (at your option) any later           *
8  * version.                                                                             *
9  *                                                                                      *
10  * This program is distributed in the hope that it will be useful, but WITHOUT ANY      *
11  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A      *
12  * PARTICULAR PURPOSE. See the GNU General Public License for more details.             *
13  *                                                                                      *
14  * You should have received a copy of the GNU General Public License along with         *
15  * this program.  If not, see <http://www.gnu.org/licenses/>.                           *
16  ****************************************************************************************/
17 
18 #ifndef AUDIOCDMETA_H
19 #define AUDIOCDMETA_H
20 
21 #include "core/meta/Meta.h"
22 
23 namespace Collections {
24     class AudioCdCollection;
25 }
26 
27 namespace Meta
28 {
29 
30 class AudioCdTrack;
31 class AudioCdAlbum;
32 class AudioCdArtist;
33 class AudioCdGenre;
34 class AudioCdComposer;
35 class AudioCdYear;
36 
37 typedef AmarokSharedPointer<AudioCdTrack> AudioCdTrackPtr;
38 typedef AmarokSharedPointer<AudioCdArtist> AudioCdArtistPtr;
39 typedef AmarokSharedPointer<AudioCdAlbum> AudioCdAlbumPtr;
40 typedef AmarokSharedPointer<AudioCdGenre> AudioCdGenrePtr;
41 typedef AmarokSharedPointer<AudioCdComposer> AudioCdComposerPtr;
42 typedef AmarokSharedPointer<AudioCdYear> AudioCdYearPtr;
43 
44 class AudioCdTrack : public Meta::Track
45 {
46     public:
47         AudioCdTrack( Collections::AudioCdCollection *collection, const QString &name, const QUrl &url );
48         ~AudioCdTrack() override;
49 
50         QString name() const override;
51 
52         QUrl playableUrl() const override;
53         QString uidUrl() const override;
54         QString prettyUrl() const override;
55         QString notPlayableReason() const override;
56 
57         AlbumPtr album() const override;
58         ArtistPtr artist() const override;
59         GenrePtr genre() const override;
60         ComposerPtr composer() const override;
61         YearPtr year() const override;
62 
63         virtual void setTitle( const QString &newTitle );
64 
65         qreal bpm() const override;
66 
67         QString comment() const override;
68         virtual void setComment ( const QString &newComment );
69 
70         qint64 length() const override;
71 
72         int filesize() const override;
73         int sampleRate() const override;
74         int bitrate() const override;
75 
76         int trackNumber() const override;
77         virtual void setTrackNumber ( int newTrackNumber );
78 
79         int discNumber() const override;
80         virtual void setDiscNumber ( int newDiscNumber );
81 
82         QString type() const override;
83 
84         bool inCollection() const override;
85         Collections::Collection* collection() const override;
86 
87         //AudioCdTrack specific methods
88         void setAlbum( AudioCdAlbumPtr album );
89         void setArtist( AudioCdArtistPtr artist );
90         void setComposer( AudioCdComposerPtr composer );
91         void setGenre( AudioCdGenrePtr genre );
92         void setYear( AudioCdYearPtr year );
93 
94         void setLength( qint64 length );
95 
96         void setFileNameBase( const QString &fileNameBase );
97         QString fileNameBase();
98 
99     private:
100         Collections::AudioCdCollection *m_collection;
101 
102         AudioCdArtistPtr m_artist;
103         AudioCdAlbumPtr m_album;
104         AudioCdGenrePtr m_genre;
105         AudioCdComposerPtr m_composer;
106         AudioCdYearPtr m_year;
107 
108         QString m_name;
109         qint64 m_length;
110         int m_trackNumber;
111         QUrl m_playableUrl;
112         QString m_fileNameBase;
113 };
114 
115 class AudioCdArtist : public Meta::Artist
116 {
117     public:
118         explicit AudioCdArtist( const QString &name );
119         ~AudioCdArtist() override;
120 
121         QString name() const override;
122 
123         TrackList tracks() override;
124 
125         virtual AlbumList albums();
126 
127         //AudioCdArtist specific methods
128         void addTrack( AudioCdTrackPtr track );
129 
130     private:
131         QString m_name;
132         TrackList m_tracks;
133 };
134 
135 class AudioCdAlbum : public Meta::Album
136 {
137     public:
138         explicit AudioCdAlbum( const QString &name );
139         ~AudioCdAlbum() override;
140 
141         QString name() const override;
142 
143         bool isCompilation() const override;
144         bool canUpdateCompilation() const override;
145         void setCompilation( bool compilation ) override;
146 
147         bool hasAlbumArtist() const override;
148         ArtistPtr albumArtist() const override;
149         TrackList tracks() override;
150 
151         QImage image( int size = 0 ) const override;
152         bool hasImage( int size = 0 ) const override;
153         bool canUpdateImage() const override;
154         void setImage( const QImage &image ) override;
155 
156         //AudioCdAlbum specific methods
157         void addTrack( AudioCdTrackPtr track );
158         void setAlbumArtist( AudioCdArtistPtr artist );
159 
160     private:
161         QString m_name;
162         TrackList m_tracks;
163         bool m_isCompilation;
164         AudioCdArtistPtr m_albumArtist;
165         QImage m_cover;
166 };
167 
168 class AudioCdGenre : public Meta::Genre
169 {
170     public:
171         explicit AudioCdGenre( const QString &name );
172         ~AudioCdGenre() override;
173 
174         QString name() const override;
175 
176         TrackList tracks() override;
177 
178         //AudioCdGenre specific methods
179         void addTrack( AudioCdTrackPtr track );
180 
181     private:
182         QString m_name;
183         TrackList m_tracks;
184 };
185 
186 class AudioCdComposer : public Meta::Composer
187 {
188     public:
189         explicit AudioCdComposer( const QString &name );
190         ~AudioCdComposer() override;
191 
192         QString name() const override;
193 
194         TrackList tracks() override;
195 
196         //AudioCdComposer specific methods
197         void addTrack( AudioCdTrackPtr track );
198 
199     private:
200         QString m_name;
201         TrackList m_tracks;
202 };
203 
204 class AudioCdYear : public Meta::Year
205 {
206     public:
207         explicit AudioCdYear( const QString &name );
208         ~AudioCdYear() override;
209 
210         QString name() const override;
211 
212         TrackList tracks() override;
213 
214         //AudioCdYear specific methods
215         void addTrack( AudioCdTrackPtr track );
216 
217     private:
218         QString m_name;
219         TrackList m_tracks;
220 };
221 
222 }
223 
224 #endif
225 
226