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