Music Hub ..
A session-wide music playback service
Loading...
Searching...
No Matches
player_skeleton.h
Go to the documentation of this file.
1
22
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
36class QDBusObjectPath;
37class QUrl;
38
39namespace lomiri
40{
41namespace MediaHubService
42{
43
45class Service;
46
48class 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
81public:
82 typedef QMap<QString,QString> Headers;
83
84 enum LoopStatus {
88 };
89 Q_ENUM(LoopStatus)
90
91 // All creation time arguments go here.
93 {
94 QDBusConnection connection;
96 // Our functional dependencies.
97 apparmor::lomiri::RequestContextResolver::Ptr request_context_resolver;
99 };
100
101 PlayerSkeleton(const Configuration& configuration, QObject *parent = nullptr);
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
138public 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 &);
155Q_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
167 void canGoNextChanged();
170 void metadataChanged();
171 void volumeChanged();
172 void orientationChanged();
173
174private:
175 Q_DECLARE_PRIVATE(PlayerSkeleton)
176 QScopedPointer<PlayerSkeletonPrivate> d_ptr;
177};
178}
179}
180
181#endif // LOMIRI_MEDIAHUBSERVICE_PLAYER_SKELETON_H
bool registerAt(const QString &objectPath)
Q_SCRIPTABLE void Seeked(quint64 microSeconds)
void OpenUriExtended(const QDBusMessage &)
Q_SCRIPTABLE void Buffering(int percent)
Q_SCRIPTABLE void VideoDimensionChanged(quint32 height, quint32 width)
Q_SCRIPTABLE void Error(qint16 code)
PlayerSkeleton(const Configuration &configuration, QObject *parent=nullptr)
Q_SCRIPTABLE void PlaybackStatusChanged(qint16 status)
void setLoopStatus(const QString &status)
void SetPosition(const QDBusObjectPath &trackObject, quint64 microSeconds)
QSharedPointer< RequestContextResolver > Ptr
Definition lomiri.h:85