File indexing completed on 2025-02-23 04:27:37

0001 /****************************************************************************************
0002  * Copyright (c) 2007 Maximilian Kossick <maximilian.kossick@googlemail.com>            *
0003  *                                                                                      *
0004  * This program is free software; you can redistribute it and/or modify it under        *
0005  * the terms of the GNU General Public License as published by the Free Software        *
0006  * Foundation; either version 2 of the License, or (at your option) any later           *
0007  * version.                                                                             *
0008  *                                                                                      *
0009  * This program is distributed in the hope that it will be useful, but WITHOUT ANY      *
0010  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A      *
0011  * PARTICULAR PURPOSE. See the GNU General Public License for more details.             *
0012  *                                                                                      *
0013  * You should have received a copy of the GNU General Public License along with         *
0014  * this program.  If not, see <http://www.gnu.org/licenses/>.                           *
0015  ****************************************************************************************/
0016 
0017 #ifndef DAAPMETA_H
0018 #define DAAPMETA_H
0019 
0020 #include "core/meta/Meta.h"
0021 
0022 namespace Collections {
0023     class DaapCollection;
0024 }
0025 
0026 namespace Meta
0027 {
0028 
0029 class DaapTrack;
0030 class DaapAlbum;
0031 class DaapArtist;
0032 class DaapGenre;
0033 class DaapComposer;
0034 class DaapYear;
0035 
0036 typedef AmarokSharedPointer<DaapTrack> DaapTrackPtr;
0037 typedef AmarokSharedPointer<DaapArtist> DaapArtistPtr;
0038 typedef AmarokSharedPointer<DaapAlbum> DaapAlbumPtr;
0039 typedef AmarokSharedPointer<DaapGenre> DaapGenrePtr;
0040 typedef AmarokSharedPointer<DaapComposer> DaapComposerPtr;
0041 typedef AmarokSharedPointer<DaapYear> DaapYearPtr;
0042 
0043 class DaapTrack : public Meta::Track
0044 {
0045     public:
0046         DaapTrack( Collections::DaapCollection *collection, const QString &host, quint16 port, const QString &dbId, const QString &itemId, const QString &format);
0047         ~DaapTrack() override;
0048 
0049         QString name() const override;
0050 
0051         QUrl playableUrl() const override;
0052         QString uidUrl() const override;
0053         QString prettyUrl() const override;
0054         QString notPlayableReason() const override;
0055 
0056         AlbumPtr album() const override;
0057         ArtistPtr artist() const override;
0058         GenrePtr genre() const override;
0059         ComposerPtr composer() const override;
0060         YearPtr year() const override;
0061 
0062         virtual void setAlbum ( const QString &newAlbum );
0063         virtual void setArtist ( const QString &newArtist );
0064         virtual void setGenre ( const QString &newGenre );
0065         virtual void setComposer ( const QString &newComposer );
0066         virtual void setYear ( int newYear );
0067 
0068         virtual void setTitle( const QString &newTitle );
0069 
0070         qreal bpm() const override;
0071 
0072         QString comment() const override;
0073         virtual void setComment ( const QString &newComment );
0074 
0075         qint64 length() const override;
0076 
0077         int filesize() const override;
0078         int sampleRate() const override;
0079         int bitrate() const override;
0080 
0081         int trackNumber() const override;
0082         virtual void setTrackNumber ( int newTrackNumber );
0083 
0084         int discNumber() const override;
0085         virtual void setDiscNumber ( int newDiscNumber );
0086 
0087         QString type() const override;
0088 
0089         bool inCollection() const override;
0090         Collections::Collection* collection() const override;
0091 
0092         //DaapTrack specific methods
0093         void setAlbum( const DaapAlbumPtr &album );
0094         void setArtist( const DaapArtistPtr &artist );
0095         void setComposer( const DaapComposerPtr &composer );
0096         void setGenre( const DaapGenrePtr &genre );
0097         void setYear( const DaapYearPtr &year );
0098 
0099         void setLength( qint64 length );
0100 
0101     private:
0102         Collections::DaapCollection *m_collection;
0103 
0104         DaapArtistPtr m_artist;
0105         DaapAlbumPtr m_album;
0106         DaapGenrePtr m_genre;
0107         DaapComposerPtr m_composer;
0108         DaapYearPtr m_year;
0109 
0110         QString m_name;
0111         QString m_type;
0112         qint64 m_length;
0113         int m_trackNumber;
0114         QString m_displayUrl;
0115         QString m_playableUrl;
0116 };
0117 
0118 class DaapArtist : public Meta::Artist
0119 {
0120     public:
0121         explicit DaapArtist( const QString &name );
0122         ~DaapArtist() override;
0123 
0124         QString name() const override;
0125 
0126         TrackList tracks() override;
0127 
0128         virtual AlbumList albums();
0129 
0130         //DaapArtist specific methods
0131         void addTrack( const DaapTrackPtr &track );
0132 
0133     private:
0134         QString m_name;
0135         TrackList m_tracks;
0136 };
0137 
0138 class DaapAlbum : public Meta::Album
0139 {
0140     public:
0141         explicit DaapAlbum( const QString &name );
0142         ~DaapAlbum() override;
0143 
0144         QString name() const override;
0145 
0146         bool isCompilation() const override;
0147         bool hasAlbumArtist() const override;
0148         ArtistPtr albumArtist() const override;
0149         TrackList tracks() override;
0150 
0151         //DaapAlbum specific methods
0152         void addTrack( const DaapTrackPtr &track );
0153         void setAlbumArtist( const DaapArtistPtr &artist );
0154 
0155     private:
0156         QString m_name;
0157         TrackList m_tracks;
0158         bool m_isCompilation;
0159         DaapArtistPtr m_albumArtist;
0160 };
0161 
0162 class DaapGenre : public Meta::Genre
0163 {
0164     public:
0165         explicit DaapGenre( const QString &name );
0166         ~DaapGenre() override;
0167 
0168         QString name() const override;
0169 
0170         TrackList tracks() override;
0171 
0172         //DaapGenre specific methods
0173         void addTrack( const DaapTrackPtr &track );
0174 
0175     private:
0176         QString m_name;
0177         TrackList m_tracks;
0178 };
0179 
0180 class DaapComposer : public Meta::Composer
0181 {
0182     public:
0183         explicit DaapComposer( const QString &name );
0184         ~DaapComposer() override;
0185 
0186         QString name() const override;
0187 
0188         TrackList tracks() override;
0189 
0190         //DaapComposer specific methods
0191         void addTrack( const DaapTrackPtr &track );
0192 
0193     private:
0194         QString m_name;
0195         TrackList m_tracks;
0196 };
0197 
0198 class DaapYear : public Meta::Year
0199 {
0200     public:
0201         explicit DaapYear( const QString &name );
0202         ~DaapYear() override;
0203 
0204         QString name() const override;
0205 
0206         TrackList tracks() override;
0207 
0208         //DaapYear specific methods
0209         void addTrack( const DaapTrackPtr &track );
0210 
0211     private:
0212         QString m_name;
0213         TrackList m_tracks;
0214 };
0215 
0216 }
0217 
0218 #endif
0219