#pragma once #include #include #include #include #include class Player : public QObject { Q_OBJECT QML_SINGLETON QML_ELEMENT Q_PROPERTY(QString title MEMBER m_title NOTIFY titleChanged FINAL) Q_PROPERTY(QString id MEMBER m_id NOTIFY idChanged FINAL) Q_PROPERTY(float position MEMBER m_position WRITE setPosition NOTIFY positionChanged FINAL) Q_PROPERTY(float buffered MEMBER m_buffered NOTIFY bufferedChanged FINAL) Q_PROPERTY(bool loading MEMBER m_loading NOTIFY loadingChanged FINAL) Q_PROPERTY(bool failed MEMBER m_failed NOTIFY failedChanged FINAL) Q_PROPERTY(bool playing READ playing NOTIFY playingChanged FINAL) Q_PROPERTY(float volume READ volume WRITE setVolume NOTIFY volumeChanged FINAL) public: Player(QObject *parent = nullptr); ~Player(); bool playing() const; float volume() const; void setPosition(float newPosition); void setVolume(float newVolume); public slots: void loadVideo(QString id, QString extension, QString title, float position); void unloadVideo(); void play(); void pause(); signals: void titleChanged(); void idChanged(); void positionChanged(); void bufferedChanged(); void loadingChanged(); void failedChanged(); void playingChanged(); void volumeChanged(); private: QMediaPlayer player; QAudioOutput output; \ QString m_title = ""; QString m_id = ""; float m_position = 0; float m_buffered = 0; bool m_loading = false; bool m_failed = false; };