File indexing completed on 2024-04-28 04:48:13

0001 /****************************************************************************************
0002  * Copyright (c) 2009 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 METAMOCK_H
0018 #define METAMOCK_H
0019 
0020 #include "core/meta/Meta.h"
0021 #include "core/meta/Statistics.h"
0022 #include "core/meta/support/MetaConstants.h"
0023 
0024 #include <QDateTime>
0025 #include <QVariantMap>
0026 
0027 /**
0028   * This class provides simple mocks for meta classes.
0029   * it will look for the keys defined in meta/MetaConstants.h
0030   * in the given QVariantMap and return those values in the respective methods.
0031   */
0032 class MetaMock : public Meta::Track, Meta::Statistics
0033 {
0034 public:
0035     MetaMock( const QVariantMap &data ) : Meta::Track(), m_data( data ), m_labels( Meta::LabelList() ) {}
0036     ~MetaMock() override {}
0037 
0038     Meta::AlbumPtr album() const override { return m_album; }
0039     Meta::YearPtr year() const override { return m_year; }
0040     Meta::GenrePtr genre() const override { return m_genre; }
0041     Meta::ArtistPtr artist() const override { return m_artist; }
0042     Meta::ComposerPtr composer() const override { return m_composer; }
0043 
0044     QString name() const override { return m_data.value( Meta::Field::TITLE ).toString(); }
0045     QString prettyName() const override { return name(); }
0046     QUrl playableUrl() const override { return m_data.value( Meta::Field::URL ).value<QUrl>(); }
0047     QString prettyUrl() const override { return playableUrl().url(); }
0048     QString uidUrl() const override { return m_data.value( Meta::Field::UNIQUEID ).toString(); }
0049     QString notPlayableReason() const override { return QStringLiteral( "dummy reason" ); }
0050     QString comment() const override { return m_data.value( Meta::Field::COMMENT ).toString(); }
0051     qreal bpm() const override { return m_data.value( Meta::Field::BPM ).toDouble(); }
0052     qint64 length() const override { return m_data.value( Meta::Field::LENGTH ).toInt(); }
0053     int filesize() const override { return m_data.value( Meta::Field::FILESIZE ).toInt(); }
0054     int sampleRate() const override { return m_data.value( Meta::Field::SAMPLERATE ).toInt(); }
0055     int bitrate() const override { return m_data.value( Meta::Field::BITRATE ).toInt(); }
0056     QDateTime createDate() const override { return QDateTime(); }    //field missing
0057     int trackNumber() const override { return m_data.value( Meta::Field::TRACKNUMBER ).toInt(); }
0058     int discNumber() const override { return m_data.value( Meta::Field::DISCNUMBER ).toInt(); }
0059     QString type() const override { return "Mock"; }
0060 
0061     Meta::LabelList labels() const override { return m_labels; }
0062 
0063     Meta::StatisticsPtr statistics() override { return Meta::StatisticsPtr( this ); }
0064 
0065     // Meta::Statistics getters
0066     double score() const override { return m_data.value( Meta::Field::SCORE ).toDouble(); }
0067     int rating() const override { return m_data.value( Meta::Field::RATING ).toInt(); }
0068     QDateTime firstPlayed() const override { return m_data.value( Meta::Field::FIRST_PLAYED ).toDateTime(); }
0069     QDateTime lastPlayed() const override { return m_data.value( Meta::Field::LAST_PLAYED ).toDateTime(); }
0070     int playCount() const override { return m_data.value( Meta::Field::PLAYCOUNT ).toInt(); }
0071 
0072     // Meta::Statistics setters
0073     void setScore( double newScore ) override { m_data[Meta::Field::SCORE].setValue( newScore ); }
0074     void setRating( int newRating ) override { m_data[Meta::Field::RATING].setValue( newRating ); }
0075     void setFirstPlayed( const QDateTime &date ) override { m_data[Meta::Field::FIRST_PLAYED].setValue( date ); }
0076     void setLastPlayed( const QDateTime &date ) override { m_data[Meta::Field::LAST_PLAYED].setValue( date ); }
0077     void setPlayCount( int newPlayCount ) override { m_data[Meta::Field::PLAYCOUNT].setValue( newPlayCount ); }
0078 
0079 public:
0080     QVariantMap m_data;
0081     Meta::ArtistPtr m_artist;
0082     Meta::AlbumPtr m_album;
0083     Meta::GenrePtr m_genre;
0084     Meta::YearPtr m_year;
0085     Meta::ComposerPtr m_composer;
0086     Meta::LabelList m_labels;
0087 };
0088 
0089 class MockYear : public Meta::Year
0090 {
0091 public:
0092     MockYear( const QString &name )
0093         : Meta::Year()
0094         , m_name( name ) {}
0095 
0096     QString name() const override { return m_name; }
0097     QString prettyName() const override { return m_name; }
0098     Meta::TrackList tracks() override { return Meta::TrackList(); }
0099 
0100     QString m_name;
0101 };
0102 
0103 class MockGenre : public Meta::Genre
0104 {
0105 public:
0106     MockGenre( const QString &name )
0107         : Meta::Genre()
0108         , m_name( name ) {}
0109 
0110     QString name() const override { return m_name; }
0111     QString prettyName() const override { return m_name; }
0112     Meta::TrackList tracks() override { return Meta::TrackList(); }
0113 
0114     QString m_name;
0115 };
0116 
0117 class MockComposer : public Meta::Composer
0118 {
0119 public:
0120     MockComposer( const QString &name )
0121         : Meta::Composer()
0122         , m_name( name ) {}
0123 
0124     QString name() const override { return m_name; }
0125     QString prettyName() const override { return m_name; }
0126     Meta::TrackList tracks() override { return Meta::TrackList(); }
0127 
0128     QString m_name;
0129 };
0130 
0131 class MockArtist : public Meta::Artist
0132 {
0133 public:
0134     MockArtist( const QString &name )
0135         : Meta::Artist()
0136         , m_name( name ) {}
0137 
0138     QString name() const override { return m_name; }
0139     QString prettyName() const override { return m_name; }
0140     Meta::TrackList tracks() override { return Meta::TrackList(); }
0141     Meta::AlbumList albums() { return Meta::AlbumList(); }
0142 
0143     QString m_name;
0144 };
0145 
0146 class MockAlbum : public Meta::Album
0147 {
0148 public:
0149     MockAlbum( const QString &name, const Meta::ArtistPtr &albumArtist = Meta::ArtistPtr() )
0150         : Meta::Album()
0151         , m_name( name )
0152         , m_albumArtist( albumArtist ) {}
0153 
0154     QString name() const override { return m_name; }
0155     QString prettyName() const override { return m_name; }
0156     Meta::TrackList tracks() override { return Meta::TrackList(); }
0157     bool hasAlbumArtist() const override { return ( m_albumArtist ) ? true : false; }
0158     Meta::ArtistPtr albumArtist() const override { return m_albumArtist; }
0159     bool isCompilation() const override { return !hasAlbumArtist(); }
0160 
0161     QString m_name;
0162     Meta::ArtistPtr m_albumArtist;
0163 };
0164 
0165 class MockLabel : public Meta::Label
0166 {
0167     public:
0168         MockLabel( const QString &name )
0169             : Meta::Label()
0170             , m_name( name ) {}
0171 
0172     QString name() const override { return m_name; }
0173 
0174     QString m_name;
0175 };
0176 
0177 #endif // METAMOCK_H