MediaDeviceArtist::albums() is not used, do not maintain album list
[amarok:rengelss-amarok.git] / src / core-impl / collections / mediadevicecollection / MediaDeviceMeta.h
1 /****************************************************************************************
2  * Copyright (c) 2009 Alejandro Wainzinger <aikawarazuni@gmail.com>                     *
3  *                                                                                      *
4  * This program is free software; you can redistribute it and/or modify it under        *
5  * the terms of the GNU General Public License as published by the Free Software        *
6  * Foundation; either version 2 of the License, or (at your option) any later           *
7  * version.                                                                             *
8  *                                                                                      *
9  * This program is distributed in the hope that it will be useful, but WITHOUT ANY      *
10  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A      *
11  * PARTICULAR PURPOSE. See the GNU General Public License for more details.             *
12  *                                                                                      *
13  * You should have received a copy of the GNU General Public License along with         *
14  * this program.  If not, see <http://www.gnu.org/licenses/>.                           *
15  ****************************************************************************************/
16
17 #ifndef MEDIADEVICEMETA_H
18 #define MEDIADEVICEMETA_H
19
20 #include "core/support/Debug.h"
21 #include "core/meta/Meta.h"
22 #include "mediadevicecollection_export.h"
23
24 #include <QList>
25 #include <QMultiMap>
26 #include <QWeakPointer>
27
28 namespace Collections {
29     class MediaDeviceCollection;
30 }
31
32 class QAction;
33
34 namespace Handler { class ArtworkCapability; }
35
36 namespace Meta
37 {
38
39 class MediaDeviceTrack;
40 class MediaDeviceAlbum;
41 class MediaDeviceArtist;
42 class MediaDeviceGenre;
43 class MediaDeviceComposer;
44 class MediaDeviceYear;
45
46 typedef KSharedPtr<MediaDeviceTrack> MediaDeviceTrackPtr;
47 typedef KSharedPtr<MediaDeviceArtist> MediaDeviceArtistPtr;
48 typedef KSharedPtr<MediaDeviceAlbum> MediaDeviceAlbumPtr;
49 typedef KSharedPtr<MediaDeviceGenre> MediaDeviceGenrePtr;
50 typedef KSharedPtr<MediaDeviceComposer> MediaDeviceComposerPtr;
51 typedef KSharedPtr<MediaDeviceYear> MediaDeviceYearPtr;
52
53 typedef QList<MediaDeviceTrackPtr> MediaDeviceTrackList;
54
55 class MEDIADEVICECOLLECTION_EXPORT MediaDeviceTrack : public Meta::Track
56 {
57     public:
58         MediaDeviceTrack( Collections::MediaDeviceCollection *collection );
59         virtual ~MediaDeviceTrack();
60
61         virtual QString name() const;
62
63         virtual KUrl playableUrl() const;
64         virtual QString uidUrl() const;
65         virtual void setUidUrl( const QString &newUidUrl ) const;
66         virtual QString prettyUrl() const;
67
68         virtual bool isPlayable() const;
69         virtual bool isEditable() const;
70
71         virtual AlbumPtr album() const;
72         virtual ArtistPtr artist() const;
73         virtual GenrePtr genre() const;
74         virtual ComposerPtr composer() const;
75         virtual YearPtr year() const;
76
77         virtual void setAlbum ( const QString &newAlbum );
78         virtual void setAlbumArtist( const QString &newAlbumArtist );
79         virtual void setArtist ( const QString &newArtist );
80         virtual void setGenre ( const QString &newGenre );
81         virtual void setComposer ( const QString &newComposer );
82         virtual void setYear ( int newYear );
83
84         virtual QString title() const;
85         virtual void setTitle( const QString &newTitle );
86
87         virtual QString comment() const;
88         virtual void setComment ( const QString &newComment );
89
90         virtual double score() const;
91         virtual void setScore ( double newScore );
92
93         virtual int rating() const;
94         virtual void setRating ( int newRating );
95
96         virtual qint64 length() const;
97
98         void setFileSize( int newFileSize );
99         virtual int filesize() const;
100
101         virtual int bitrate() const;
102         virtual void setBitrate( int newBitrate );
103
104         virtual int sampleRate() const;
105         virtual void setSamplerate( int newSamplerate );
106
107         virtual qreal bpm() const;
108         virtual void setBpm( const qreal newBpm );
109
110         virtual int trackNumber() const;
111         virtual void setTrackNumber ( int newTrackNumber );
112
113         virtual int discNumber() const;
114         virtual void setDiscNumber ( int newDiscNumber );
115
116         virtual QDateTime lastPlayed() const;
117         void setLastPlayed( const QDateTime &newTime );
118
119         virtual int playCount() const;
120         void setPlayCount( const int newCount );
121
122         virtual QString type() const;
123         virtual void prepareToPlay();
124
125         virtual void beginMetaDataUpdate() { DEBUG_BLOCK }
126         virtual void endMetaDataUpdate();
127 /*
128         virtual void subscribe ( Observer *observer );
129         virtual void unsubscribe ( Observer *observer );
130 */
131         virtual bool inCollection() const;
132         virtual Collections::Collection* collection() const;
133
134         virtual bool hasCapabilityInterface( Capabilities::Capability::Type type ) const;
135         virtual Capabilities::Capability* createCapabilityInterface( Capabilities::Capability::Type type );
136
137         //MediaDeviceTrack specific methods
138
139         // These methods are for Handler
140         void setAlbum( MediaDeviceAlbumPtr album );
141         void setArtist( MediaDeviceArtistPtr artist );
142         void setComposer( MediaDeviceComposerPtr composer );
143         void setGenre( MediaDeviceGenrePtr genre );
144         void setYear( MediaDeviceYearPtr year );
145
146         void setType( const QString & type );
147
148         void setLength( qint64 length );
149         void setPlayableUrl( const KUrl &url) { m_playableUrl = url; }
150
151     private:
152         QWeakPointer<Collections::MediaDeviceCollection> m_collection;
153
154         MediaDeviceArtistPtr m_artist;
155         MediaDeviceAlbumPtr m_album;
156         MediaDeviceGenrePtr m_genre;
157         MediaDeviceComposerPtr m_composer;
158         MediaDeviceYearPtr m_year;
159
160         // For MediaDeviceTrack-specific use
161
162         QImage m_image;
163
164         QString m_comment;
165         QString m_name;
166         QString m_type;
167         int m_bitrate;
168         int m_filesize;
169         qint64 m_length;
170         int m_discNumber;
171         int m_samplerate;
172         int m_trackNumber;
173         int m_playCount;
174         QDateTime m_lastPlayed;
175         int m_rating;
176         qreal m_bpm;
177         QString m_displayUrl;
178         KUrl m_playableUrl;
179 };
180
181 class MEDIADEVICECOLLECTION_EXPORT MediaDeviceArtist : public Meta::Artist
182 {
183     public:
184         MediaDeviceArtist( const QString &name );
185         virtual ~MediaDeviceArtist();
186
187         virtual QString name() const;
188
189         virtual TrackList tracks();
190
191         //MediaDeviceArtist specific methods
192         virtual void addTrack( MediaDeviceTrackPtr track );
193         virtual void remTrack( MediaDeviceTrackPtr track );
194
195     private:
196         QString m_name;
197         TrackList m_tracks;
198 };
199
200 class MEDIADEVICECOLLECTION_EXPORT MediaDeviceAlbum : public Meta::Album
201 {
202     public:
203         MediaDeviceAlbum( Collections::MediaDeviceCollection *collection, const QString &name );
204         virtual ~MediaDeviceAlbum();
205
206         virtual QString name() const;
207
208         virtual bool isCompilation() const;
209         void setIsCompilation( bool compilation );
210
211         virtual bool hasAlbumArtist() const;
212         virtual ArtistPtr albumArtist() const;
213         virtual TrackList tracks();
214
215         virtual bool hasImage( int size = 0 ) const;
216         virtual QImage image( int size = 0 ) const;
217         virtual bool canUpdateImage() const;
218         virtual void setImage( const QImage &image );
219         virtual void setImagePath( const QString &path );
220
221         virtual bool hasCapabilityInterface( Capabilities::Capability::Type type ) const;
222         virtual Capabilities::Capability* createCapabilityInterface( Capabilities::Capability::Type type );
223
224         //MediaDeviceAlbum specific methods
225
226         void addTrack( MediaDeviceTrackPtr track );
227         void remTrack( MediaDeviceTrackPtr track );
228         void setAlbumArtist( MediaDeviceArtistPtr artist );
229
230     private:
231         QWeakPointer<Collections::MediaDeviceCollection> m_collection;
232         QWeakPointer<Handler::ArtworkCapability> m_artworkCapability;
233
234         QString         m_name;
235         TrackList       m_tracks;
236         bool            m_isCompilation;
237         mutable bool    m_hasImagePossibility;
238         mutable bool    m_hasImageChecked;
239         mutable QImage  m_image;
240         MediaDeviceArtistPtr   m_albumArtist;
241 };
242
243 class MEDIADEVICECOLLECTION_EXPORT MediaDeviceComposer : public Meta::Composer
244 {
245     public:
246         MediaDeviceComposer( const QString &name );
247         virtual ~MediaDeviceComposer();
248
249         virtual QString name() const;
250
251         virtual TrackList tracks();
252
253         //MediaDeviceComposer specific methods
254         void addTrack( MediaDeviceTrackPtr track );
255         void remTrack( MediaDeviceTrackPtr track );
256
257     private:
258         QString m_name;
259         TrackList m_tracks;
260 };
261
262 class MEDIADEVICECOLLECTION_EXPORT MediaDeviceGenre : public Meta::Genre
263 {
264     public:
265         MediaDeviceGenre( const QString &name );
266         virtual ~MediaDeviceGenre();
267
268         virtual QString name() const;
269
270         virtual TrackList tracks();
271
272         //MediaDeviceGenre specific methods
273         void addTrack( MediaDeviceTrackPtr track );
274         void remTrack( MediaDeviceTrackPtr track );
275     private:
276         QString m_name;
277         TrackList m_tracks;
278 };
279
280
281
282 class MEDIADEVICECOLLECTION_EXPORT MediaDeviceYear : public Meta::Year
283 {
284     public:
285         MediaDeviceYear( const QString &name );
286         virtual ~MediaDeviceYear();
287
288         virtual QString name() const;
289
290         virtual TrackList tracks();
291
292         //MediaDeviceYear specific methods
293         void addTrack( MediaDeviceTrackPtr track );
294         void remTrack( MediaDeviceTrackPtr track );
295
296     private:
297         QString m_name;
298         TrackList m_tracks;
299 };
300
301 }
302
303 #endif
304