Music Hub  ..
A session-wide music playback service
media_player2.cpp
Go to the documentation of this file.
1 /*
2  * Copyright © 2021-2022 UBports Foundation.
3  *
4  * Contact: Alberto Mardegan <mardy@users.sourceforge.net>
5  *
6  * This program is free software: you can redistribute it and/or modify it
7  * under the terms of the GNU Lesser General Public License version 3,
8  * as published by the Free Software Foundation.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public License
16  * along with this program. If not, see <http://www.gnu.org/licenses/>.
17  */
18 
19 #include "mpris/media_player2.h"
20 
21 #include "dbus_property_notifier.h"
22 #include "logging.h"
23 #include "player_implementation.h"
24 
25 #include <QDBusAbstractAdaptor>
26 #include <QDBusConnection>
27 #include <QDBusContext>
28 #include <QDBusObjectPath>
29 #include <QMetaEnum>
30 #include <QString>
31 #include <QStringList>
32 
33 namespace media = lomiri::MediaHubService;
34 
35 using namespace mpris;
36 
37 namespace mpris {
38 
39 const QString objectPath = QStringLiteral("/org/mpris/MediaPlayer2");
40 
41 // Models interface org.mpris.MediaPlayer2, see:
42 // http://specifications.freedesktop.org/mpris-spec/latest/Media_Player.html
43 // for detailed documentation
45 {
46  Q_OBJECT
47  Q_CLASSINFO("D-Bus Interface", "org.mpris.MediaPlayer2")
48  Q_PROPERTY(bool CanQuit READ falseProperty)
49  Q_PROPERTY(bool Fullscreen READ falseProperty)
50  Q_PROPERTY(bool CanSetFullscreen READ falseProperty)
51  Q_PROPERTY(bool CanRaise READ falseProperty)
52  Q_PROPERTY(bool HasTrackList READ falseProperty)
53  Q_PROPERTY(QString Identity READ identity)
54  Q_PROPERTY(QString DesktopEntry READ desktopEntry)
55  Q_PROPERTY(QStringList SupportedUriSchemes READ supportedUriSchemes)
56  Q_PROPERTY(QStringList SupportedMimeTypes READ supportedMimeTypes)
57 
58 public:
60  virtual ~RootAdaptor() = default;
61 
62  bool falseProperty() const { return false; }
63  QString identity() const { return QStringLiteral("core::media::Hub"); }
64  QString desktopEntry() const { return QStringLiteral("mediaplayer-app"); }
65  QStringList supportedUriSchemes() const { return {}; }
66  QStringList supportedMimeTypes() const {
67  return {"audio/mpeg3", "video/mpeg4"};
68  }
69 
70 public Q_SLOTS:
71  void Raise() {}
72  void Quit() {}
73 };
74 
75 // Models interface org.mpris.MediaPlayer2.Playlists, see:
76 // http://specifications.freedesktop.org/mpris-spec/latest/Playlists_Interface.html
77 // for detailed documentation
79 {
80  Q_OBJECT
81  Q_CLASSINFO("D-Bus Interface", "org.mpris.MediaPlayer2.Playlists")
82  Q_PROPERTY(quint32 PlaylistCount READ playlistCount)
83  Q_PROPERTY(QStringList Orderings READ orderings)
84  // FIXME: There's also an ActivePlaylist property in the specs
85 
86 public:
88  virtual ~PlaylistsAdaptor() = default;
89 
90  quint32 playlistCount() const { return 0; }
91  QStringList orderings() const { return {"Alphabetical"}; }
92 
93 public Q_SLOTS:
94  void ActivePlaylist() {}
95  void GetPlaylists() {}
96 };
97 
99 {
100  Q_OBJECT
101  Q_CLASSINFO("D-Bus Interface", "org.mpris.MediaPlayer2.Player")
102  Q_PROPERTY(bool CanPlay READ canPlay)
103  Q_PROPERTY(bool CanPause READ canPause)
104  Q_PROPERTY(bool CanSeek READ canSeek)
105  Q_PROPERTY(bool CanGoPrevious READ canGoPrevious)
106  Q_PROPERTY(bool CanGoNext READ canGoNext)
107  Q_PROPERTY(bool CanControl READ canControl)
108  Q_PROPERTY(bool IsVideoSource READ isVideoSource)
109  Q_PROPERTY(bool IsAudioSource READ isAudioSource)
110  Q_PROPERTY(QString PlaybackStatus READ playbackStatus)
111  Q_PROPERTY(QString LoopStatus READ loopStatus WRITE setLoopStatus)
112  Q_PROPERTY(double PlaybackRate READ playbackRate WRITE setPlaybackRate)
113  Q_PROPERTY(bool Shuffle READ shuffle WRITE setShuffle)
114  Q_PROPERTY(QVariantMap Metadata READ metadata)
115  Q_PROPERTY(double Volume READ volume WRITE setVolume)
116  Q_PROPERTY(double MinimumRate READ minimumRate)
117  Q_PROPERTY(double MaximumRate READ maximumRate)
118  Q_PROPERTY(qint64 Position READ position)
119  Q_PROPERTY(qint64 Duration READ duration)
120  Q_PROPERTY(qint16 TypedBackend READ backend)
121  Q_PROPERTY(qint16 Orientation READ orientation)
122  Q_PROPERTY(qint16 Lifetime READ lifetime)
123  Q_PROPERTY(qint16 AudioStreamRole READ audioStreamRole)
124  Q_PROPERTY(qint16 TypedLoopStatus READ typedLoopStatus
126 
127 public:
128  enum LoopStatus {
129  None = media::Player::LoopStatus::none,
130  Track = media::Player::LoopStatus::track,
131  Playlist = media::Player::LoopStatus::playlist,
132  };
133  Q_ENUM(LoopStatus)
134 
135  PlayerAdaptor(const QDBusConnection &connection, QObject *parent);
136 
138  media::PlayerImplementation *player() { return m_player; }
139  const media::PlayerImplementation *player() const { return m_player; }
140 
141  bool canPlay() const { return m_player ? m_player->canPlay() : false; }
142  bool canPause() const { return m_player ? m_player->canPause() : false; }
143  bool canSeek() const { return m_player ? m_player->canSeek() : false; }
144  bool canGoPrevious() const { return m_player ? m_player->canGoPrevious() : false; }
145  bool canGoNext() const { return m_player ? m_player->canGoNext() : false; }
146  bool canControl() const { return m_player ? true : false; }
147  bool isVideoSource() const { return m_player ? m_player->isVideoSource() : false; }
148  bool isAudioSource() const { return m_player ? m_player->isAudioSource() : false; }
149  QString playbackStatus() const;
150  void setLoopStatus(const QString &status);
151  QString loopStatus() const;
152  void setTypedLoopStatus(qint16 status);
153  qint16 typedLoopStatus() const;
154  void setPlaybackRate(double rate) { if (m_player) m_player->setPlaybackRate(rate); }
155  double playbackRate() const { return m_player ? m_player->playbackRate() : 1.0; }
156  void setShuffle(bool shuffle) { if (m_player) m_player->setShuffle(shuffle); }
157  bool shuffle() const { return m_player ? m_player->shuffle() : false; }
158  QVariantMap metadata() const { return m_player ? m_player->metadataForCurrentTrack() : QVariantMap(); }
159  void setVolume(double volume) { if (m_player) m_player->setVolume(volume); }
160  double volume() const { return m_player ? m_player->volume() : 1.0; }
161  double minimumRate() const { return m_player ? m_player->minimumRate() : 1.0; }
162  double maximumRate() const { return m_player ? m_player->maximumRate() : 1.0; }
163  qint64 position() const { return m_player ? m_player->position() : 0; }
164  qint64 duration() const { return m_player ? m_player->duration() : 0; }
165  qint16 backend() const { return m_player ? m_player->backend() : 0; }
166  qint16 orientation() const { return m_player ? m_player->orientation() : 0; }
167  qint16 lifetime() const { return m_player ? m_player->lifetime() : 0; }
168  qint16 audioStreamRole() const { return m_player ? m_player->audioStreamRole() : 0; }
169 
170 public Q_SLOTS:
171  void Next() { if (m_player) m_player->next(); }
172  void Previous() { if (m_player) m_player->previous(); }
173  void Pause() { if (m_player) m_player->pause(); }
174  void PlayPause();
175  void Stop() { if (m_player) m_player->stop(); }
176  void Play() { if (m_player) m_player->play(); }
177  void Seek(quint64 microSeconds);
178  void SetPosition(const QDBusObjectPath &, quint64) {} // Never implemented
179  /* The OpenUri should not return anything, but since the previous
180  * implementation was returning a boolean, let's keep doing that. */
181  void OpenUri(const QDBusMessage &);
182 
183 Q_SIGNALS:
184  void Seeked(quint64 microSeconds);
185  void AboutToFinish();
186  void EndOfStream();
187  void PlaybackStatusChanged(quint16 status); // TODO: remove, we have PropertiesChanged already
188  void VideoDimensionChanged(quint32 height, quint32 width);
189  void Error(qint16 code);
190  void Buffering(int percent); // TODO: set a fixed type
191 
192 private:
193  media::PlayerImplementation *m_player;
194  DBusPropertyNotifier m_propertyNotifier;
195 };
196 
198 public:
200 
201 private:
202  friend class MediaPlayer2;
203  QDBusConnection m_connection;
204  PlayerAdaptor *m_playerAdaptor;
205 };
206 
207 } // namespace mpris
208 
209 PlayerAdaptor::PlayerAdaptor(const QDBusConnection &connection,
210  QObject *parent):
211  QDBusAbstractAdaptor(parent),
212  m_player(nullptr),
213  m_propertyNotifier(connection, objectPath, this)
214 {
215 }
216 
218 {
219  using PlayerImplementation = media::PlayerImplementation;
220 
221  if (m_player == impl) return;
222 
223  if (m_player) {
224  m_player->disconnect(this);
225  }
226 
227  m_player = impl;
228  if (impl) {
229  QObject::connect(impl, &PlayerImplementation::seekedTo,
230  this, &PlayerAdaptor::Seeked);
231 
232  /* Property signals */
233  QObject::connect(impl, &PlayerImplementation::mprisPropertiesChanged,
234  this, [this]() {
235  m_propertyNotifier.notify({
236  "CanPlay", "CanPause", "CanSeek",
237  "CanGoPrevious", "CanGoNext",
238  });
239  });
240  QObject::connect(impl, &PlayerImplementation::playbackStatusChanged,
241  this, [this]() {
242  m_propertyNotifier.notify({ "PlaybackStatus" });
243  });
244  QObject::connect(impl, &PlayerImplementation::metadataForCurrentTrackChanged,
245  this, [this]() {
246  m_propertyNotifier.notify({ "Metadata" });
247  });
248  }
249 
250  m_propertyNotifier.notify();
251 }
252 
254 {
255  using Player = media::Player;
256  const Player::PlaybackStatus s = player() ?
258  switch (s) {
260  return QStringLiteral("Playing");
262  return QStringLiteral("Paused");
263  default:
264  return QStringLiteral("Stopped");
265  }
266 }
267 
268 void PlayerAdaptor::setLoopStatus(const QString &status)
269 {
270  if (!player()) return;
271  bool ok;
272  int value = QMetaEnum::fromType<LoopStatus>().
273  keyToValue(status.toUtf8().constData(), &ok);
274  if (!ok) {
275  MH_ERROR("Invalid loop status: %s", qUtf8Printable(status));
276  return;
277  }
278  player()->setLoopStatus(static_cast<media::Player::LoopStatus>(value));
279 }
280 
282 {
283  int value = player() ? static_cast<LoopStatus>(player()->loopStatus()) : None;
284  return QMetaEnum::fromType<LoopStatus>().valueToKey(value);
285 }
286 
288 {
289  if (!player()) return;
290  player()->setLoopStatus(static_cast<media::Player::LoopStatus>(status));
291 }
292 
294 {
295  return player() ? static_cast<LoopStatus>(player()->loopStatus()) : None;
296 }
297 
299 {
300  if (!m_player) return;
301 
302  switch (m_player->playbackStatus()) {
303  case lomiri::MediaHubService::Player::PlaybackStatus::ready:
304  case lomiri::MediaHubService::Player::PlaybackStatus::paused:
305  case lomiri::MediaHubService::Player::PlaybackStatus::stopped:
306  m_player->play();
307  break;
308  case lomiri::MediaHubService::Player::PlaybackStatus::playing:
309  m_player->pause();
310  break;
311  default:
312  break;
313  }
314 }
315 
316 void PlayerAdaptor::OpenUri(const QDBusMessage &)
317 {
318  // FIXME: unused, but we should implement it anyway
319 }
320 
321 void PlayerAdaptor::Seek(quint64 microSeconds)
322 {
323  if (!player()) return;
324  player()->seek_to(std::chrono::microseconds(microSeconds));
325 }
326 
328  m_connection(QDBusConnection::sessionBus()),
329  m_playerAdaptor(new PlayerAdaptor(m_connection, q))
330 {
331  new RootAdaptor(q);
332  new PlaylistsAdaptor(q);
333 }
334 
336  QObject(parent),
337  d_ptr(new MediaPlayer2Private(this))
338 {
339 }
340 
341 MediaPlayer2::~MediaPlayer2() = default;
342 
344 {
345  Q_D(MediaPlayer2);
346  return d->m_playerAdaptor->setPlayer(impl);
347 }
348 
350 {
351  Q_D(MediaPlayer2);
352  return d->m_playerAdaptor->player();
353 }
354 
356 {
357  Q_D(const MediaPlayer2);
358  return d->m_playerAdaptor->player();
359 }
360 
362 {
363  Q_D(MediaPlayer2);
364  return d->m_connection.registerObject(objectPath, this);
365 }
366 
367 #include "media_player2.moc"
lomiri::MediaHubService::PlayerImplementation::canSeek
bool canSeek() const
Definition: player_implementation.cpp:615
mpris::PlayerAdaptor::position
qint64 position() const
Definition: media_player2.cpp:163
mpris::PlayerAdaptor::audioStreamRole
qint16 audioStreamRole() const
Definition: media_player2.cpp:168
mpris::RootAdaptor::supportedUriSchemes
QStringList supportedUriSchemes() const
Definition: media_player2.cpp:65
mpris::PlayerAdaptor::typedLoopStatus
qint16 typedLoopStatus() const
Definition: media_player2.cpp:293
lomiri::MediaHubService::PlayerImplementation::shuffle
bool shuffle() const
Definition: player_implementation.cpp:673
mpris::PlayerAdaptor::PlayerAdaptor
PlayerAdaptor(const QDBusConnection &connection, QObject *parent)
Definition: media_player2.cpp:209
QObject
mpris::PlayerAdaptor::MinimumRate
double MinimumRate
Definition: media_player2.cpp:116
mpris::PlayerAdaptor::None
@ None
Definition: media_player2.cpp:129
mpris::PlayerAdaptor::setTypedLoopStatus
void setTypedLoopStatus(qint16 status)
Definition: media_player2.cpp:287
mpris::RootAdaptor::HasTrackList
bool HasTrackList
Definition: media_player2.cpp:52
lomiri::MediaHubService::PlayerImplementation::duration
uint64_t duration() const
Definition: player_implementation.cpp:734
mpris::PlaylistsAdaptor::Orderings
QStringList Orderings
Definition: media_player2.cpp:83
dbus_property_notifier.h
mpris::PlayerAdaptor
Definition: media_player2.cpp:98
lomiri::MediaHubService::PlayerImplementation
Definition: player_implementation.h:44
lomiri::MediaHubService::PlayerImplementation::loopStatus
Player::LoopStatus loopStatus() const
Definition: player_implementation.cpp:661
lomiri::MediaHubService::PlayerImplementation::volume
double volume() const
Definition: player_implementation.cpp:686
mpris::PlayerAdaptor::volume
double volume() const
Definition: media_player2.cpp:160
lomiri::MediaHubService::Player::LoopStatus
LoopStatus
Definition: player.h:101
mpris::PlayerAdaptor::setLoopStatus
void setLoopStatus(const QString &status)
Definition: media_player2.cpp:268
lomiri::MediaHubService::PlayerImplementation::setShuffle
void setShuffle(bool shuffle)
Definition: player_implementation.cpp:667
mpris::PlayerAdaptor::CanPlay
bool CanPlay
Definition: media_player2.cpp:102
mpris::PlayerAdaptor::canGoPrevious
bool canGoPrevious() const
Definition: media_player2.cpp:144
mpris::RootAdaptor::desktopEntry
QString desktopEntry() const
Definition: media_player2.cpp:64
mpris::MediaPlayer2::player
lomiri::MediaHubService::PlayerImplementation * player()
Definition: media_player2.cpp:349
mpris::PlayerAdaptor::canControl
bool canControl() const
Definition: media_player2.cpp:146
mpris::PlayerAdaptor::Error
void Error(qint16 code)
mpris::objectPath
const QString objectPath
Definition: media_player2.cpp:39
mpris::PlayerAdaptor::PlaybackStatusChanged
void PlaybackStatusChanged(quint16 status)
mpris::RootAdaptor::Identity
QString Identity
Definition: media_player2.cpp:53
lomiri::MediaHubService::PlayerImplementation::setVolume
void setVolume(double volume)
Definition: player_implementation.cpp:679
mpris::MediaPlayer2::setPlayer
void setPlayer(lomiri::MediaHubService::PlayerImplementation *impl)
Definition: media_player2.cpp:343
mpris::PlayerAdaptor::duration
qint64 duration() const
Definition: media_player2.cpp:164
lomiri::MediaHubService::PlayerImplementation::minimumRate
double minimumRate() const
Definition: player_implementation.cpp:644
mpris::PlaylistsAdaptor::orderings
QStringList orderings() const
Definition: media_player2.cpp:91
mpris::PlayerAdaptor::setShuffle
void setShuffle(bool shuffle)
Definition: media_player2.cpp:156
DBusPropertyNotifier::notify
void notify(const QStringList &propertyFilter={})
Definition: dbus_property_notifier.cpp:217
lomiri::MediaHubService::PlayerImplementation::canGoPrevious
bool canGoPrevious() const
Definition: player_implementation.cpp:621
mpris::PlayerAdaptor::lifetime
qint16 lifetime() const
Definition: media_player2.cpp:167
mpris::Player::PlaybackStatus::paused
static constexpr const char * paused
Definition: mpris.h:182
mpris::RootAdaptor::Quit
void Quit()
Definition: media_player2.cpp:72
mpris::RootAdaptor::Raise
void Raise()
Definition: media_player2.cpp:71
mpris::PlayerAdaptor::CanSeek
bool CanSeek
Definition: media_player2.cpp:104
mpris::PlayerAdaptor::canSeek
bool canSeek() const
Definition: media_player2.cpp:143
mpris::PlayerAdaptor::Seek
void Seek(quint64 microSeconds)
Definition: media_player2.cpp:321
mpris::PlayerAdaptor::Next
void Next()
Definition: media_player2.cpp:171
mpris::PlayerAdaptor::isVideoSource
bool isVideoSource() const
Definition: media_player2.cpp:147
mpris::PlayerAdaptor::Lifetime
qint16 Lifetime
Definition: media_player2.cpp:122
mpris::PlayerAdaptor::OpenUri
void OpenUri(const QDBusMessage &)
Definition: media_player2.cpp:316
mpris::PlaylistsAdaptor::GetPlaylists
void GetPlaylists()
Definition: media_player2.cpp:95
mpris::RootAdaptor::CanSetFullscreen
bool CanSetFullscreen
Definition: media_player2.cpp:50
mpris::PlayerAdaptor::AudioStreamRole
qint16 AudioStreamRole
Definition: media_player2.cpp:123
mpris::PlayerAdaptor::metadata
QVariantMap metadata() const
Definition: media_player2.cpp:158
mpris::PlayerAdaptor::VideoDimensionChanged
void VideoDimensionChanged(quint32 height, quint32 width)
mpris::PlayerAdaptor::player
media::PlayerImplementation * player()
Definition: media_player2.cpp:138
mpris::PlaylistsAdaptor::PlaylistCount
quint32 PlaylistCount
Definition: media_player2.cpp:82
mpris::RootAdaptor::SupportedUriSchemes
QStringList SupportedUriSchemes
Definition: media_player2.cpp:55
mpris::PlayerAdaptor::LoopStatus
LoopStatus
Definition: media_player2.cpp:128
mpris::PlayerAdaptor::Metadata
QVariantMap Metadata
Definition: media_player2.cpp:114
mpris::PlaylistsAdaptor::ActivePlaylist
void ActivePlaylist()
Definition: media_player2.cpp:94
mpris::MediaPlayer2::~MediaPlayer2
virtual ~MediaPlayer2()
mpris::PlayerAdaptor::Play
void Play()
Definition: media_player2.cpp:176
mpris::PlayerAdaptor::Volume
double Volume
Definition: media_player2.cpp:115
lomiri::MediaHubService::PlayerImplementation::maximumRate
double maximumRate() const
Definition: player_implementation.cpp:649
mpris::RootAdaptor::CanRaise
bool CanRaise
Definition: media_player2.cpp:51
lomiri::MediaHubService::PlayerImplementation::canPause
bool canPause() const
Definition: player_implementation.cpp:609
player_implementation.h
mpris::PlayerAdaptor::EndOfStream
void EndOfStream()
lomiri::MediaHubService::PlayerImplementation::next
void next()
Definition: player_implementation.cpp:823
media_player2.h
mpris::PlayerAdaptor::canGoNext
bool canGoNext() const
Definition: media_player2.cpp:145
mpris::PlayerAdaptor::setVolume
void setVolume(double volume)
Definition: media_player2.cpp:159
mpris::PlayerAdaptor::MaximumRate
double MaximumRate
Definition: media_player2.cpp:117
mpris::PlayerAdaptor::CanGoPrevious
bool CanGoPrevious
Definition: media_player2.cpp:105
mpris::PlayerAdaptor::TypedBackend
qint16 TypedBackend
Definition: media_player2.cpp:120
mpris::PlayerAdaptor::canPause
bool canPause() const
Definition: media_player2.cpp:142
mpris::PlayerAdaptor::isAudioSource
bool isAudioSource() const
Definition: media_player2.cpp:148
mpris::RootAdaptor::~RootAdaptor
virtual ~RootAdaptor()=default
mpris::MediaPlayer2::registerObject
bool registerObject()
Definition: media_player2.cpp:361
mpris::PlayerAdaptor::CanPause
bool CanPause
Definition: media_player2.cpp:103
mpris::PlayerAdaptor::TypedLoopStatus
qint16 TypedLoopStatus
Definition: media_player2.cpp:125
mpris::PlayerAdaptor::Stop
void Stop()
Definition: media_player2.cpp:175
MH_ERROR
#define MH_ERROR(...)
Definition: logging.h:41
mpris::PlayerAdaptor::backend
qint16 backend() const
Definition: media_player2.cpp:165
mpris::Player::PlaybackStatus::stopped
static constexpr const char * stopped
Definition: mpris.h:183
lomiri::MediaHubService::PlayerImplementation::setLoopStatus
void setLoopStatus(Player::LoopStatus status)
Definition: player_implementation.cpp:654
mpris::PlayerAdaptor::setPlayer
void setPlayer(media::PlayerImplementation *impl)
Definition: media_player2.cpp:217
lomiri::MediaHubService::PlayerImplementation::metadataForCurrentTrack
Track::MetaData metadataForCurrentTrack() const
Definition: player_implementation.cpp:722
mpris::PlayerAdaptor::AboutToFinish
void AboutToFinish()
mpris::PlaylistsAdaptor::~PlaylistsAdaptor
virtual ~PlaylistsAdaptor()=default
mpris::PlayerAdaptor::PlaybackStatus
QString PlaybackStatus
Definition: media_player2.cpp:110
lomiri::MediaHubService::PlayerImplementation::stop
void stop()
Definition: player_implementation.cpp:854
mpris::PlayerAdaptor::setPlaybackRate
void setPlaybackRate(double rate)
Definition: media_player2.cpp:154
mpris::PlayerAdaptor::Playlist
@ Playlist
Definition: media_player2.cpp:131
mpris::PlaylistsAdaptor
Definition: media_player2.cpp:78
mpris::PlayerAdaptor::Buffering
void Buffering(int percent)
mpris::PlayerAdaptor::CanGoNext
bool CanGoNext
Definition: media_player2.cpp:106
mpris::PlayerAdaptor::Pause
void Pause()
Definition: media_player2.cpp:173
mpris::PlayerAdaptor::playbackRate
double playbackRate() const
Definition: media_player2.cpp:155
mpris::PlayerAdaptor::IsAudioSource
bool IsAudioSource
Definition: media_player2.cpp:109
mpris::PlayerAdaptor::Shuffle
bool Shuffle
Definition: media_player2.cpp:113
lomiri::MediaHubService::PlayerImplementation::lifetime
Player::Lifetime lifetime() const
Definition: player_implementation.cpp:758
mpris::PlayerAdaptor::PlayPause
void PlayPause()
Definition: media_player2.cpp:298
lomiri::MediaHubService::PlayerImplementation::setPlaybackRate
void setPlaybackRate(double rate)
Definition: player_implementation.cpp:633
mpris::PlayerAdaptor::PlaybackRate
double PlaybackRate
Definition: media_player2.cpp:112
mpris::PlayerAdaptor::playbackStatus
QString playbackStatus() const
Definition: media_player2.cpp:253
lomiri::MediaHubService::PlayerImplementation::position
uint64_t position() const
Definition: player_implementation.cpp:728
lomiri::MediaHubService
Definition: context.h:28
lomiri::MediaHubService::PlayerImplementation::audioStreamRole
Player::AudioStreamRole audioStreamRole() const
Definition: player_implementation.cpp:746
mpris::Player
Definition: mpris.h:127
mpris::RootAdaptor::falseProperty
bool falseProperty() const
Definition: media_player2.cpp:62
mpris::MediaPlayer2Private
Definition: media_player2.cpp:197
mpris::PlayerAdaptor::SetPosition
void SetPosition(const QDBusObjectPath &, quint64)
Definition: media_player2.cpp:178
mpris::PlaylistsAdaptor::playlistCount
quint32 playlistCount() const
Definition: media_player2.cpp:90
mpris::Player::PlaybackStatus
Definition: mpris.h:159
mpris::PlayerAdaptor::CanControl
bool CanControl
Definition: media_player2.cpp:107
lomiri::MediaHubService::PlayerImplementation::canGoNext
bool canGoNext() const
Definition: player_implementation.cpp:627
mpris::MediaPlayer2::MediaPlayer2
MediaPlayer2(QObject *parent=nullptr)
Definition: media_player2.cpp:335
lomiri::MediaHubService::PlayerImplementation::playbackStatus
Player::PlaybackStatus playbackStatus() const
Definition: player_implementation.cpp:692
lomiri::MediaHubService::PlayerImplementation::orientation
Player::Orientation orientation() const
Definition: player_implementation.cpp:716
mpris::RootAdaptor::DesktopEntry
QString DesktopEntry
Definition: media_player2.cpp:54
mpris::RootAdaptor::SupportedMimeTypes
QStringList SupportedMimeTypes
Definition: media_player2.cpp:56
mpris::PlayerAdaptor::Previous
void Previous()
Definition: media_player2.cpp:172
mpris::PlayerAdaptor::IsVideoSource
bool IsVideoSource
Definition: media_player2.cpp:108
lomiri::MediaHubService::PlayerImplementation::backend
AVBackend::Backend backend() const
Definition: player_implementation.cpp:592
lomiri::MediaHubService::PlayerImplementation::previous
void previous()
Definition: player_implementation.cpp:829
lomiri::MediaHubService::PlayerImplementation::seek_to
void seek_to(const std::chrono::microseconds &offset)
Definition: player_implementation.cpp:861
QDBusAbstractAdaptor
mpris::PlayerAdaptor::orientation
qint16 orientation() const
Definition: media_player2.cpp:166
mpris::RootAdaptor::Fullscreen
bool Fullscreen
Definition: media_player2.cpp:49
mpris::PlayerAdaptor::minimumRate
double minimumRate() const
Definition: media_player2.cpp:161
mpris::MediaPlayer2
Definition: media_player2.h:42
mpris::PlayerAdaptor::Duration
qint64 Duration
Definition: media_player2.cpp:119
mpris::RootAdaptor::supportedMimeTypes
QStringList supportedMimeTypes() const
Definition: media_player2.cpp:66
mpris::RootAdaptor::identity
QString identity() const
Definition: media_player2.cpp:63
lomiri::MediaHubService::PlayerImplementation::playbackRate
double playbackRate() const
Definition: player_implementation.cpp:639
mpris::PlayerAdaptor::maximumRate
double maximumRate() const
Definition: media_player2.cpp:162
DBusPropertyNotifier
Definition: dbus_property_notifier.h:28
lomiri::MediaHubService::Player
Definition: player.h:50
mpris::PlayerAdaptor::Seeked
void Seeked(quint64 microSeconds)
lomiri::MediaHubService::PlayerImplementation::pause
void pause()
Definition: player_implementation.cpp:847
mpris::PlayerAdaptor::loopStatus
QString loopStatus() const
Definition: media_player2.cpp:281
lomiri::MediaHubService::PlayerImplementation::canPlay
bool canPlay() const
Definition: player_implementation.cpp:603
mpris::RootAdaptor
Definition: media_player2.cpp:44
mpris::MediaPlayer2Private::MediaPlayer2Private
MediaPlayer2Private(MediaPlayer2 *q)
Definition: media_player2.cpp:327
lomiri::MediaHubService::PlayerImplementation::isVideoSource
bool isVideoSource() const
Definition: player_implementation.cpp:698
mpris::RootAdaptor::CanQuit
bool CanQuit
Definition: media_player2.cpp:48
lomiri::MediaHubService::PlayerImplementation::play
void play()
Definition: player_implementation.cpp:835
mpris::PlayerAdaptor::canPlay
bool canPlay() const
Definition: media_player2.cpp:141
lomiri::MediaHubService::PlayerImplementation::isAudioSource
bool isAudioSource() const
Definition: player_implementation.cpp:704
mpris::PlayerAdaptor::Orientation
qint16 Orientation
Definition: media_player2.cpp:121
mpris::PlayerAdaptor::shuffle
bool shuffle() const
Definition: media_player2.cpp:157
mpris::PlayerAdaptor::Position
qint64 Position
Definition: media_player2.cpp:118
mpris::PlayerAdaptor::Track
@ Track
Definition: media_player2.cpp:130
mpris::PlayerAdaptor::player
const media::PlayerImplementation * player() const
Definition: media_player2.cpp:139
mpris
Definition: media_player2.cpp:37
mpris::Player::PlaybackStatus::playing
static constexpr const char * playing
Definition: mpris.h:181