File indexing completed on 2024-05-19 04:48:28
0001 #pragma once 0002 0003 #include <QObject> 0004 #include <QVariant> 0005 #include <QQmlParserStatus> 0006 0007 class TracksModel; 0008 class Player; 0009 class Playlist : public QObject, public QQmlParserStatus 0010 { 0011 Q_INTERFACES(QQmlParserStatus) 0012 Q_OBJECT 0013 0014 Q_PROPERTY(TracksModel *model WRITE setModel READ model NOTIFY modelChanged) 0015 Q_PROPERTY(QVariantMap currentTrack READ currentTrack NOTIFY currentTrackChanged FINAL) 0016 Q_PROPERTY(int currentIndex READ currentIndex NOTIFY currentIndexChanged FINAL) 0017 0018 Q_PROPERTY(PlayMode playMode READ playMode WRITE setPlayMode NOTIFY playModeChanged) 0019 0020 Q_PROPERTY(RepeatMode repeatMode READ repeatMode WRITE setRepeatMode NOTIFY repeatModeChanged) 0021 0022 Q_PROPERTY(bool autoResume READ autoResume WRITE setAutoResume NOTIFY autoResumeChanged) 0023 0024 public: 0025 enum PlayMode : uint_fast8_t 0026 { 0027 Normal, 0028 Shuffle, 0029 }; 0030 Q_ENUM(PlayMode) 0031 0032 enum RepeatMode : uint_fast8_t 0033 { 0034 NoRepeat, 0035 RepeatOnce, 0036 Repeat 0037 }; 0038 Q_ENUM(RepeatMode) 0039 0040 explicit Playlist(QObject *parent = nullptr); 0041 TracksModel *model() const; 0042 0043 QVariantMap currentTrack() const; 0044 0045 int currentIndex() const; 0046 PlayMode playMode() const; 0047 0048 RepeatMode repeatMode() const; 0049 0050 bool autoResume() const; 0051 0052 void classBegin() override final; 0053 void componentComplete() override final; 0054 0055 private: 0056 TracksModel *m_model = nullptr; 0057 Player *m_player = nullptr; 0058 QVariantMap m_currentTrack; 0059 int m_currentIndex = -1; 0060 0061 PlayMode m_playMode = PlayMode::Normal; 0062 RepeatMode m_repeatMode = RepeatMode::NoRepeat; 0063 uint m_repeatFlag = 0; 0064 0065 bool m_autoResume; 0066 0067 public Q_SLOTS: 0068 bool canGoNext() const; 0069 bool canGoPrevious() const; 0070 bool canPlay() const; 0071 0072 void next(); 0073 void previous(); 0074 void play(int index); 0075 void clear(); 0076 0077 void save(); 0078 void loadLastPlaylist(); 0079 0080 void append(const QVariantMap &track); 0081 void insert(const QStringList &urls, const int &index); 0082 0083 void setModel(TracksModel *model); 0084 void setCurrentIndex(int index); 0085 void changeCurrentIndex(int index); 0086 0087 void setPlayMode(Playlist::PlayMode playMode); 0088 0089 void shuffleRange(int start, int stop); 0090 0091 void move(int from, int to); 0092 void remove(int index); 0093 0094 void setRepeatMode(RepeatMode repeatMode); 0095 0096 void setAutoResume(bool autoResume); 0097 0098 Q_SIGNALS: 0099 void canPlayChanged(); 0100 void modelChanged(TracksModel *model); 0101 void currentTrackChanged(QVariantMap currentTrack); 0102 void currentIndexChanged(int currentIndex); 0103 void missingFile(QVariantMap track); 0104 void playModeChanged(Playlist::PlayMode playMode); 0105 void repeatModeChanged(RepeatMode repeatMode); 0106 void autoResumeChanged(bool autoResume); 0107 };