#ifndef MUSICPLAYER_H #define MUSICPLAYER_H #include #include #include class MusicPlayer : public QMediaPlayer { Q_OBJECT Q_PROPERTY(QObject* pCurrentItem READ getCurrentItem NOTIFY currentItemChanged) Q_PROPERTY(bool pHasNext READ hasNext NOTIFY hasNextChanged) Q_PROPERTY(bool pHasPrevious READ hasPrevious NOTIFY hasPreviousChanged) Q_PROPERTY(bool pIsPlaying READ isPlaying NOTIFY isPlayingChanged) Q_PROPERTY(double pProgress READ getProgress NOTIFY progressChanged) Q_PROPERTY(QString pMediaLength READ getMediaLength NOTIFY mediaLengthChanged) Q_PROPERTY(QString pTime READ getTime NOTIFY progressChanged) Q_PROPERTY(QString pMediaTitle READ getMediaTitle NOTIFY mediaTitleChanged) Q_PROPERTY(int pAudioVolume READ getAudioVolume WRITE setAudioVolume NOTIFY audioVolumeChanged) signals: void navigateTo(NavigationItemModel *item); void currentItemChanged(); void hasPreviousChanged(); void hasNextChanged(); void isPlayingChanged(); void progressChanged(); void mediaLengthChanged(); void mediaTitleChanged(); void audioVolumeChanged(int newVolume); public: MusicPlayer(QObject *parent = Q_NULLPTR); ~MusicPlayer(); void init(NavigationItemModel* item); NavigationItemModel *getCurrentItem(); bool isPlaying() const; bool hasNext() const; bool hasPrevious() const; inline int getAudioVolume() const { return mAudioVolume; } /** * @brief Set audio volume. Information is transferred to VlcAudio * @param newVolume value between 0 and 100 (audio level in percent) * Ensures that volume is inbetween 0 and 100. If this range is exceeded, * the volume is set to the lowest and highest allowed value, respectively. */ void setAudioVolume(int newVolume); double getProgress() const; QString getMediaTitle() const; QString getMediaLength(); QString getTime(); public slots: void navigateBack(); void playPause(); void stopMusic(); void playNext(); void playPrevious(); void onTimeChanged(int time); void onLengthChanged(int length); private: void reset(); void clearMediaList(); void readMedia(const QString& path); QString timeToString(int time); bool mIsPlaying = false; bool mHasNext = false; bool mHasPrevious = false; int mCurrentMediaItemLength = 0; int mCurrentTime = 0; double mCurrentMediaItemProgress = 0; int mAudioVolume{50}; QString mMediaTitle = QString(""); NavigationItemModel* mCurrentItem = nullptr; }; #endif // MUSICPLAYER_H