Music Hub  ..
A session-wide music playback service
player_skeleton.h
Go to the documentation of this file.
1 
23 #ifndef LOMIRI_MEDIAHUBSERVICE_PLAYER_SKELETON_H
24 #define LOMIRI_MEDIAHUBSERVICE_PLAYER_SKELETON_H
25 
26 #include "player.h"
27 
28 #include "apparmor/lomiri.h"
29 
30 #include <QDBusAbstractAdaptor>
31 #include <QDBusConnection>
32 #include <QDBusContext>
33 #include <QMap>
34 #include <QString>
35 
36 class QDBusObjectPath;
37 class QUrl;
38 
39 namespace lomiri
40 {
41 namespace MediaHubService
42 {
43 
44 class PlayerImplementation;
45 class Service;
46 
47 class PlayerSkeletonPrivate;
48 class PlayerSkeleton: public QObject, protected QDBusContext
49 {
50  Q_OBJECT
51  Q_CLASSINFO("D-Bus Interface", "org.mpris.MediaPlayer2.Player")
52  Q_PROPERTY(bool CanPlay READ canPlay NOTIFY canPlayChanged)
53  Q_PROPERTY(bool CanPause READ canPause NOTIFY canPauseChanged)
54  Q_PROPERTY(bool CanSeek READ canSeek)
55  Q_PROPERTY(bool CanGoPrevious READ canGoPrevious
57  Q_PROPERTY(bool CanGoNext READ canGoNext NOTIFY canGoNextChanged)
58  Q_PROPERTY(bool IsVideoSource READ isVideoSource
60  Q_PROPERTY(bool IsAudioSource READ isAudioSource
62  Q_PROPERTY(QString PlaybackStatus READ playbackStatus
64  Q_PROPERTY(QString LoopStatus READ loopStatus WRITE setLoopStatus)
65  Q_PROPERTY(double PlaybackRate READ playbackRate WRITE setPlaybackRate)
66  Q_PROPERTY(bool Shuffle READ shuffle WRITE setShuffle)
67  Q_PROPERTY(QVariantMap Metadata READ metadata NOTIFY metadataChanged)
68  Q_PROPERTY(double Volume READ volume WRITE setVolume NOTIFY volumeChanged)
69  Q_PROPERTY(double MinimumRate READ minimumRate)
70  Q_PROPERTY(double MaximumRate READ maximumRate)
71  Q_PROPERTY(qint64 Position READ position)
72  Q_PROPERTY(qint64 Duration READ duration)
73  Q_PROPERTY(qint16 TypedBackend READ backend)
74  Q_PROPERTY(qint16 Orientation READ orientation NOTIFY orientationChanged)
75  Q_PROPERTY(qint16 Lifetime READ lifetime)
76  Q_PROPERTY(qint16 AudioStreamRole READ audioStreamRole
78  Q_PROPERTY(qint16 TypedLoopStatus READ typedLoopStatus
80 
81 public:
82  typedef QMap<QString,QString> Headers;
83 
84  enum LoopStatus {
85  None = Player::LoopStatus::none,
86  Track = Player::LoopStatus::track,
87  Playlist = Player::LoopStatus::playlist,
88  };
89  Q_ENUM(LoopStatus)
90 
91  // All creation time arguments go here.
93  {
94  QDBusConnection connection;
96  // Our functional dependencies.
99  };
100 
101  PlayerSkeleton(const Configuration& configuration, QObject *parent = nullptr);
102  ~PlayerSkeleton();
103 
105  const PlayerImplementation *player() const;
106 
107  bool registerAt(const QString &objectPath);
108 
109  bool canPlay() const;
110  bool canPause() const;
111  bool canSeek() const;
112  bool canGoPrevious() const;
113  bool canGoNext() const;
114  bool isVideoSource() const;
115  bool isAudioSource() const;
116  QString playbackStatus() const;
117  void setLoopStatus(const QString &status);
118  QString loopStatus() const;
119  void setTypedLoopStatus(qint16 status);
120  qint16 typedLoopStatus() const;
121  void setPlaybackRate(double rate);
122  double playbackRate() const;
123  void setShuffle(bool shuffle);
124  bool shuffle() const;
125  QVariantMap metadata() const;
126  void setVolume(double volume);
127  double volume() const;
128  double minimumRate() const;
129  double maximumRate() const;
130  qint64 position() const;
131  qint64 duration() const;
132  qint16 backend() const;
133  qint16 orientation() const;
134  qint16 lifetime() const;
135  void setAudioStreamRole(qint16 role);
136  qint16 audioStreamRole() const;
137 
138 public Q_SLOTS:
139  void Next();
140  void Previous();
141  void Pause();
142  void PlayPause();
143  void Stop();
144  void Play();
145  void Seek(quint64 microSeconds);
146  void SetPosition(const QDBusObjectPath &trackObject,
147  quint64 microSeconds);
148  void CreateVideoSink(quint32 textureId);
149  quint32 Key() const; // TODO: make this into a property
150  /* The OpenUri should not return anything, but since the previous
151  * implementation was returning a boolean, let's keep doing that. */
152  void OpenUri(const QDBusMessage &);
153  void OpenUriExtended(const QDBusMessage &);
154 
155 Q_SIGNALS:
156  Q_SCRIPTABLE void Seeked(quint64 microSeconds);
157  Q_SCRIPTABLE void AboutToFinish();
158  Q_SCRIPTABLE void EndOfStream();
159  Q_SCRIPTABLE void PlaybackStatusChanged(qint16 status); // TODO: remove, we have PropertiesChanged already
160  Q_SCRIPTABLE void VideoDimensionChanged(quint32 height, quint32 width);
161  Q_SCRIPTABLE void Error(qint16 code);
162  Q_SCRIPTABLE void Buffering(int percent); // TODO: set a fixed type
163 
164  void canPlayChanged();
165  void canPauseChanged();
166  void canGoPreviousChanged();
167  void canGoNextChanged();
168  void isVideoSourceChanged();
169  void isAudioSourceChanged();
170  void metadataChanged();
171  void volumeChanged();
172  void orientationChanged();
173 
174 private:
175  Q_DECLARE_PRIVATE(PlayerSkeleton)
176  QScopedPointer<PlayerSkeletonPrivate> d_ptr;
177 };
178 }
179 }
180 
181 #endif // LOMIRI_MEDIAHUBSERVICE_PLAYER_SKELETON_H
QObject
lomiri::MediaHubService::PlayerSkeleton::Duration
qint64 Duration
Definition: player_skeleton.h:72
lomiri::MediaHubService::PlayerSkeleton::canPauseChanged
void canPauseChanged()
lomiri::MediaHubService::PlayerSkeleton::Metadata
QVariantMap Metadata
Definition: player_skeleton.h:67
lomiri::MediaHubService::PlayerImplementation
Definition: player_implementation.h:44
lomiri::MediaHubService::PlayerSkeleton::canPlay
bool canPlay() const
Definition: player_skeleton.cpp:248
lomiri::MediaHubService::PlayerSkeleton::Configuration::request_authenticator
apparmor::lomiri::RequestAuthenticator::Ptr request_authenticator
Definition: player_skeleton.h:98
lomiri::MediaHubService::PlayerSkeleton::canGoNext
bool canGoNext() const
Definition: player_skeleton.cpp:268
mpris::objectPath
const QString objectPath
Definition: media_player2.cpp:39
lomiri::MediaHubService::PlayerSkeleton::setAudioStreamRole
void setAudioStreamRole(qint16 role)
Definition: player_skeleton.cpp:395
lomiri::MediaHubService::PlayerSkeleton::None
@ None
Definition: player_skeleton.h:85
lomiri::MediaHubService::PlayerSkeleton::shuffle
bool shuffle() const
Definition: player_skeleton.cpp:340
lomiri::MediaHubService::Track
Definition: track.h:31
lomiri::MediaHubService::PlayerSkeleton::Stop
void Stop()
Definition: player_skeleton.cpp:439
lomiri::MediaHubService::PlayerSkeleton::volumeChanged
void volumeChanged()
lomiri::MediaHubService::PlayerSkeleton::Configuration::request_context_resolver
apparmor::lomiri::RequestContextResolver::Ptr request_context_resolver
Definition: player_skeleton.h:97
lomiri::MediaHubService::PlayerSkeleton::Configuration::connection
QDBusConnection connection
Definition: player_skeleton.h:94
lomiri::MediaHubService::PlayerSkeleton::SetPosition
void SetPosition(const QDBusObjectPath &trackObject, quint64 microSeconds)
Definition: player_skeleton.cpp:458
lomiri::MediaHubService::PlayerSkeleton::Pause
void Pause()
Definition: player_skeleton.cpp:415
lomiri::MediaHubService::PlayerSkeleton::typedLoopStatus
qint16 typedLoopStatus() const
Definition: player_skeleton.cpp:320
lomiri::MediaHubService::PlayerSkeleton::TypedLoopStatus
qint16 TypedLoopStatus
Definition: player_skeleton.h:79
lomiri::MediaHubService::PlayerSkeleton::AboutToFinish
Q_SCRIPTABLE void AboutToFinish()
lomiri::MediaHubService::PlayerSkeleton::CanPlay
bool CanPlay
Definition: player_skeleton.h:52
lomiri::MediaHubService::PlayerSkeleton::canSeek
bool canSeek() const
Definition: player_skeleton.cpp:258
lomiri::MediaHubService::PlayerSkeleton::audioStreamRole
qint16 audioStreamRole() const
Definition: player_skeleton.cpp:400
lomiri::MediaHubService::PlayerSkeleton::Position
qint64 Position
Definition: player_skeleton.h:71
lomiri::MediaHubService::PlayerSkeleton::position
qint64 position() const
Definition: player_skeleton.cpp:370
lomiri::MediaHubService::PlayerSkeleton::MinimumRate
double MinimumRate
Definition: player_skeleton.h:69
lomiri::MediaHubService::PlayerSkeleton::lifetime
qint16 lifetime() const
Definition: player_skeleton.cpp:390
lomiri::MediaHubService::PlayerSkeleton::Previous
void Previous()
Definition: player_skeleton.cpp:410
lomiri::MediaHubService::PlayerSkeleton::canPlayChanged
void canPlayChanged()
lomiri::MediaHubService::PlayerSkeleton::LoopStatus
LoopStatus
Definition: player_skeleton.h:84
lomiri::MediaHubService::PlayerSkeleton::setVolume
void setVolume(double volume)
Definition: player_skeleton.cpp:350
lomiri::MediaHubService::PlayerSkeleton::canPause
bool canPause() const
Definition: player_skeleton.cpp:253
lomiri::MediaHubService::PlayerSkeleton::PlaybackStatusChanged
Q_SCRIPTABLE void PlaybackStatusChanged(qint16 status)
lomiri::MediaHubService::PlayerSkeleton::orientationChanged
void orientationChanged()
lomiri::MediaHubService::PlayerSkeleton::PlaybackRate
double PlaybackRate
Definition: player_skeleton.h:65
lomiri::MediaHubService::PlayerSkeleton::Headers
QMap< QString, QString > Headers
Definition: player_skeleton.h:82
lomiri::MediaHubService::PlayerSkeleton::OpenUri
void OpenUri(const QDBusMessage &)
Definition: player_skeleton.cpp:488
lomiri::MediaHubService::PlayerSkeleton::setShuffle
void setShuffle(bool shuffle)
Definition: player_skeleton.cpp:335
lomiri::MediaHubService::PlayerSkeleton::playbackRate
double playbackRate() const
Definition: player_skeleton.cpp:330
lomiri::MediaHubService::PlayerSkeleton::PlaybackStatus
QString PlaybackStatus
Definition: player_skeleton.h:63
lomiri::MediaHubService::PlayerSkeleton::Configuration
Definition: player_skeleton.h:92
lomiri::MediaHubService::apparmor::lomiri::RequestAuthenticator::Ptr
QSharedPointer< RequestAuthenticator > Ptr
Definition: lomiri.h:122
QDBusContext
lomiri::MediaHubService::PlayerSkeleton::canGoNextChanged
void canGoNextChanged()
lomiri::MediaHubService::PlayerSkeleton::isAudioSourceChanged
void isAudioSourceChanged()
lomiri::MediaHubService::PlayerSkeleton::Key
quint32 Key() const
Definition: player_skeleton.cpp:483
lomiri::MediaHubService::PlayerSkeleton::playbackStatus
QString playbackStatus() const
Definition: player_skeleton.cpp:283
lomiri::MediaHubService::PlayerSkeleton::canGoPrevious
bool canGoPrevious() const
Definition: player_skeleton.cpp:263
lomiri::MediaHubService::PlayerSkeleton::backend
qint16 backend() const
Definition: player_skeleton.cpp:380
lomiri::MediaHubService::PlayerSkeleton::metadataChanged
void metadataChanged()
lomiri::MediaHubService::PlayerSkeleton::duration
qint64 duration() const
Definition: player_skeleton.cpp:375
lomiri::MediaHubService::PlayerSkeleton::VideoDimensionChanged
Q_SCRIPTABLE void VideoDimensionChanged(quint32 height, quint32 width)
lomiri::MediaHubService::PlayerSkeleton::registerAt
bool registerAt(const QString &objectPath)
Definition: player_skeleton.cpp:235
lomiri::MediaHubService::PlayerSkeleton::canGoPreviousChanged
void canGoPreviousChanged()
lomiri::MediaHubService::PlayerSkeleton::Configuration::player
PlayerImplementation * player
Definition: player_skeleton.h:95
lomiri::MediaHubService::PlayerSkeleton::metadata
QVariantMap metadata() const
Definition: player_skeleton.cpp:345
lomiri::MediaHubService::PlayerSkeleton::AudioStreamRole
qint16 AudioStreamRole
Definition: player_skeleton.h:77
lomiri::MediaHubService::PlayerSkeleton::loopStatus
QString loopStatus() const
Definition: player_skeleton.cpp:309
lomiri::MediaHubService::PlayerSkeleton::Seek
void Seek(quint64 microSeconds)
Definition: player_skeleton.cpp:453
lomiri::MediaHubService::PlayerSkeleton::PlayPause
void PlayPause()
Definition: player_skeleton.cpp:420
lomiri::MediaHubService::PlayerSkeleton::maximumRate
double maximumRate() const
Definition: player_skeleton.cpp:365
lomiri::MediaHubService::PlayerSkeleton::setPlaybackRate
void setPlaybackRate(double rate)
Definition: player_skeleton.cpp:325
lomiri::MediaHubService::PlayerSkeleton::Lifetime
qint16 Lifetime
Definition: player_skeleton.h:75
lomiri::MediaHubService::PlayerSkeleton::OpenUriExtended
void OpenUriExtended(const QDBusMessage &)
Definition: player_skeleton.cpp:494
lomiri::MediaHubService::PlayerSkeleton::CanPause
bool CanPause
Definition: player_skeleton.h:53
lomiri::MediaHubService::PlayerSkeleton::minimumRate
double minimumRate() const
Definition: player_skeleton.cpp:360
lomiri::MediaHubService::PlayerSkeleton::EndOfStream
Q_SCRIPTABLE void EndOfStream()
lomiri::MediaHubService::PlayerSkeleton::IsVideoSource
bool IsVideoSource
Definition: player_skeleton.h:59
lomiri::MediaHubService::PlayerSkeleton::Volume
double Volume
Definition: player_skeleton.h:68
lomiri::MediaHubService::PlayerSkeleton::PlayerSkeleton
PlayerSkeleton(const Configuration &configuration, QObject *parent=nullptr)
Definition: player_skeleton.cpp:216
lomiri::MediaHubService::PlayerSkeleton::CanGoNext
bool CanGoNext
Definition: player_skeleton.h:57
lomiri::MediaHubService::PlayerSkeleton::Shuffle
bool Shuffle
Definition: player_skeleton.h:66
lomiri::MediaHubService::PlayerSkeleton::Playlist
@ Playlist
Definition: player_skeleton.h:87
lomiri::MediaHubService::PlayerSkeleton::isAudioSource
bool isAudioSource() const
Definition: player_skeleton.cpp:278
lomiri::MediaHubService::PlayerSkeleton::volume
double volume() const
Definition: player_skeleton.cpp:355
lomiri::MediaHubService::PlayerSkeleton::orientation
qint16 orientation() const
Definition: player_skeleton.cpp:385
lomiri::MediaHubService::PlayerSkeleton::isVideoSource
bool isVideoSource() const
Definition: player_skeleton.cpp:273
lomiri::MediaHubService::PlayerSkeleton
Definition: player_skeleton.h:48
lomiri.h
lomiri::MediaHubService::apparmor::lomiri::RequestContextResolver::Ptr
QSharedPointer< RequestContextResolver > Ptr
Definition: lomiri.h:85
lomiri::MediaHubService::PlayerSkeleton::CreateVideoSink
void CreateVideoSink(quint32 textureId)
Definition: player_skeleton.cpp:463
player.h
lomiri::MediaHubService::PlayerSkeleton::Play
void Play()
Definition: player_skeleton.cpp:444
lomiri::MediaHubService::PlayerSkeleton::TypedBackend
qint16 TypedBackend
Definition: player_skeleton.h:73
lomiri::MediaHubService::PlayerSkeleton::Error
Q_SCRIPTABLE void Error(qint16 code)
lomiri::MediaHubService::PlayerSkeleton::setTypedLoopStatus
void setTypedLoopStatus(qint16 status)
Definition: player_skeleton.cpp:315
lomiri::MediaHubService::PlayerSkeleton::MaximumRate
double MaximumRate
Definition: player_skeleton.h:70
lomiri::MediaHubService::PlayerSkeleton::setLoopStatus
void setLoopStatus(const QString &status)
Definition: player_skeleton.cpp:297
lomiri::MediaHubService::PlayerSkeleton::CanSeek
bool CanSeek
Definition: player_skeleton.h:54
lomiri::MediaHubService::PlayerSkeleton::player
PlayerImplementation * player()
Definition: player_skeleton.cpp:225
lomiri::MediaHubService::PlayerSkeleton::CanGoPrevious
bool CanGoPrevious
Definition: player_skeleton.h:56
lomiri
Definition: dbus_utils.h:24
lomiri::MediaHubService::PlayerSkeleton::~PlayerSkeleton
~PlayerSkeleton()
lomiri::MediaHubService::PlayerSkeleton::Next
void Next()
Definition: player_skeleton.cpp:405
lomiri::MediaHubService::PlayerSkeleton::Seeked
Q_SCRIPTABLE void Seeked(quint64 microSeconds)
lomiri::MediaHubService::PlayerSkeleton::Buffering
Q_SCRIPTABLE void Buffering(int percent)
lomiri::MediaHubService::PlayerSkeleton::isVideoSourceChanged
void isVideoSourceChanged()
lomiri::MediaHubService::PlayerSkeleton::Orientation
qint16 Orientation
Definition: player_skeleton.h:74
lomiri::MediaHubService::PlayerSkeleton::IsAudioSource
bool IsAudioSource
Definition: player_skeleton.h:61