File indexing completed on 2024-04-28 04:49:04

0001 /***************************************************************************
0002    SPDX-FileCopyrightText: 2014 (c) Sujith Haridasan <sujith.haridasan@kdemail.net>
0003    SPDX-FileCopyrightText: 2014 (c) Ashish Madeti <ashishmadeti@gmail.com>
0004    SPDX-FileCopyrightText: 2016 (c) Matthieu Gallien <matthieu_gallien@yahoo.fr>
0005 
0006    SPDX-License-Identifier: GPL-3.0-or-later
0007  ***************************************************************************/
0008 
0009 #ifndef MEDIAPLAYER2PLAYER_H
0010 #define MEDIAPLAYER2PLAYER_H
0011 
0012 #include "elisaLib_export.h"
0013 
0014 #include <QDBusAbstractAdaptor>
0015 #include <QDBusObjectPath>
0016 #include <QDBusMessage>
0017 
0018 #include "audiowrapper.h"
0019 
0020 class MediaPlayListProxyModel;
0021 class ManageAudioPlayer;
0022 class ManageMediaPlayerControl;
0023 class ManageHeaderBar;
0024 
0025 class ELISALIB_EXPORT MediaPlayer2Player : public QDBusAbstractAdaptor
0026 {
0027     Q_OBJECT
0028     Q_CLASSINFO("D-Bus Interface", "org.mpris.MediaPlayer2.Player") // Docs: https://specifications.freedesktop.org/mpris-spec/latest/Player_Interface.html
0029 
0030     Q_PROPERTY(QString PlaybackStatus READ PlaybackStatus NOTIFY playbackStatusChanged)
0031     Q_PROPERTY(double Rate READ Rate WRITE setRate NOTIFY rateChanged)
0032     Q_PROPERTY(QVariantMap Metadata READ Metadata NOTIFY playbackStatusChanged)
0033     Q_PROPERTY(double Volume READ Volume WRITE setVolume NOTIFY volumeChanged)
0034     Q_PROPERTY(qlonglong Position READ Position WRITE setPropertyPosition NOTIFY playbackStatusChanged)
0035     Q_PROPERTY(double MinimumRate READ MinimumRate CONSTANT)
0036     Q_PROPERTY(double MaximumRate READ MaximumRate CONSTANT)
0037     Q_PROPERTY(bool CanGoNext READ CanGoNext NOTIFY canGoNextChanged)
0038     Q_PROPERTY(bool CanGoPrevious READ CanGoPrevious NOTIFY canGoPreviousChanged)
0039     Q_PROPERTY(bool CanPlay READ CanPlay NOTIFY canPlayChanged)
0040     Q_PROPERTY(bool CanPause READ CanPause NOTIFY canPauseChanged)
0041     Q_PROPERTY(bool CanControl READ CanControl NOTIFY canControlChanged)
0042     Q_PROPERTY(bool CanSeek READ CanSeek NOTIFY canSeekChanged)
0043     Q_PROPERTY(int currentTrack READ currentTrack WRITE setCurrentTrack NOTIFY currentTrackChanged)
0044     Q_PROPERTY(int mediaPlayerPresent READ mediaPlayerPresent WRITE setMediaPlayerPresent NOTIFY mediaPlayerPresentChanged)
0045     Q_PROPERTY(bool Shuffle READ Shuffle WRITE setShuffle NOTIFY shuffleChanged)
0046     Q_PROPERTY(QString LoopStatus READ LoopStatus WRITE setLoopStatus NOTIFY loopStatusChanged)
0047 
0048 public:
0049     explicit MediaPlayer2Player(MediaPlayListProxyModel *playListControler,
0050                                 ManageAudioPlayer *manageAudioPlayer,
0051                                 ManageMediaPlayerControl* manageMediaPlayerControl,
0052                                 ManageHeaderBar * manageHeaderBar,
0053                                 AudioWrapper *audioPlayer,
0054                                 bool showProgressOnTaskBar,
0055                                 QObject* parent = nullptr);
0056     ~MediaPlayer2Player() override;
0057 
0058     QString PlaybackStatus() const;
0059     double Rate() const;
0060     QVariantMap Metadata() const;
0061     double Volume() const;
0062     qlonglong Position() const;
0063     double MinimumRate() const;
0064     double MaximumRate() const;
0065     bool CanGoNext() const;
0066     bool CanGoPrevious() const;
0067     bool CanPlay() const;
0068     bool CanPause() const;
0069     bool CanSeek() const;
0070     bool CanControl() const;
0071     int currentTrack() const;
0072     int mediaPlayerPresent() const;
0073     QString LoopStatus() const;
0074     bool Shuffle() const;
0075 
0076     bool showProgressOnTaskBar() const;
0077     void setShowProgressOnTaskBar(bool value);
0078 
0079 Q_SIGNALS:
0080     void Seeked(qlonglong Position);
0081 
0082     void rateChanged(double newRate);
0083     void volumeChanged(double newVol);
0084     void playbackStatusChanged();
0085     void canGoNextChanged();
0086     void canGoPreviousChanged();
0087     void canPlayChanged();
0088     void canPauseChanged();
0089     void canControlChanged();
0090     void canSeekChanged();
0091     void currentTrackChanged();
0092     void mediaPlayerPresentChanged();
0093     void shuffleChanged();
0094     void loopStatusChanged();
0095     void next();
0096     void previous();
0097     void playPause();
0098     void stop();
0099 
0100 public Q_SLOTS:
0101 
0102     void Next();
0103     void Previous();
0104     void Pause();
0105     void PlayPause();
0106     void Stop();
0107     void Play();
0108     void Seek(qlonglong Offset);
0109     void SetPosition(const QDBusObjectPath &trackId, qlonglong pos);
0110     void OpenUri(const QString &uri);
0111 
0112 private Q_SLOTS:
0113 
0114     void playerSourceChanged();
0115 
0116     void playControlEnabledChanged();
0117 
0118     void skipBackwardControlEnabledChanged();
0119 
0120     void skipForwardControlEnabledChanged();
0121 
0122     void playerPlaybackStateChanged();
0123 
0124     void playerIsSeekableChanged();
0125 
0126     void audioPositionChanged();
0127 
0128     void playerSeeked(qint64 position);
0129 
0130     void audioDurationChanged();
0131 
0132     void playerVolumeChanged();
0133 
0134     void shufflePlayListChanged();
0135 
0136     void repeatModeChanged();
0137 
0138 private:
0139     void signalPropertiesChange(const QString &property, const QVariant &value);
0140 
0141     void setMediaPlayerPresent(int status);
0142     void setRate(double newRate);
0143     void setVolume(double volume);
0144     void setPropertyPosition(int newPositionInMs);
0145     void setCurrentTrack(int newTrackPosition);
0146     void setShuffle(bool shuffle);
0147     void setLoopStatus(const QString& loopStatus);
0148 
0149     QVariantMap getMetadataOfCurrentTrack();
0150 
0151     QVariantMap m_metadata;
0152     QString m_currentTrack;
0153     QString m_currentTrackId;
0154     double m_rate = 1.0;
0155     double m_volume = 0.0;
0156     int m_mediaPlayerPresent = 0;
0157     bool m_canPlay = false;
0158     bool m_canGoNext = false;
0159     bool m_canGoPrevious = false;
0160     qlonglong m_position = 0;
0161     MediaPlayListProxyModel *m_playListControler = nullptr;
0162     bool m_playerIsSeekableChanged = false;
0163     ManageAudioPlayer* m_manageAudioPlayer = nullptr;
0164     ManageMediaPlayerControl* m_manageMediaPlayerControl = nullptr;
0165     ManageHeaderBar * m_manageHeaderBar = nullptr;
0166     AudioWrapper *m_audioPlayer = nullptr;
0167     mutable QDBusMessage mProgressIndicatorSignal;
0168     int mPreviousProgressPosition = 0;
0169     bool mShowProgressOnTaskBar = true;
0170 };
0171 
0172 #endif // MEDIAPLAYER2PLAYER_H