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