Phosphor
Qt6 / Wayland library suite for window-management tools
 
Loading...
Searching...
No Matches
MprisPlayer.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2026 fuddlesworth
2// SPDX-License-Identifier: LGPL-2.1-or-later
3
4#pragma once
5
6#include <PhosphorServices/phosphorservices_export.h>
7
8#include <QObject>
9#include <QString>
10
11#include <memory>
12
13namespace PhosphorServices {
14
15class PHOSPHORSERVICES_EXPORT MprisPlayer : public QObject
16{
17 Q_OBJECT
18
19 Q_PROPERTY(QString identity READ identity NOTIFY identityChanged)
20 Q_PROPERTY(QString desktopEntry READ desktopEntry NOTIFY desktopEntryChanged)
21 Q_PROPERTY(QString serviceName READ serviceName CONSTANT)
22 Q_PROPERTY(PlaybackState playbackState READ playbackState NOTIFY playbackStateChanged)
23 Q_PROPERTY(bool isPlaying READ isPlaying NOTIFY playbackStateChanged)
24 Q_PROPERTY(QString trackTitle READ trackTitle NOTIFY metadataChanged)
25 Q_PROPERTY(QString trackArtist READ trackArtist NOTIFY metadataChanged)
26 Q_PROPERTY(QString trackAlbum READ trackAlbum NOTIFY metadataChanged)
27 Q_PROPERTY(QString trackArtUrl READ trackArtUrl NOTIFY metadataChanged)
28 Q_PROPERTY(qreal position READ position NOTIFY positionChanged)
29 Q_PROPERTY(qreal length READ length NOTIFY metadataChanged)
30 Q_PROPERTY(qreal volume READ volume WRITE setVolume NOTIFY volumeChanged)
31 Q_PROPERTY(qreal rate READ rate NOTIFY rateChanged)
32 Q_PROPERTY(LoopState loopState READ loopState WRITE setLoopState NOTIFY loopStateChanged)
33 Q_PROPERTY(bool shuffle READ shuffle WRITE setShuffle NOTIFY shuffleChanged)
34 Q_PROPERTY(bool canPlay READ canPlay NOTIFY canPlayChanged)
35 Q_PROPERTY(bool canPause READ canPause NOTIFY canPauseChanged)
36 Q_PROPERTY(bool canSeek READ canSeek NOTIFY canSeekChanged)
37 Q_PROPERTY(bool canGoNext READ canGoNext NOTIFY canGoNextChanged)
38 Q_PROPERTY(bool canGoPrevious READ canGoPrevious NOTIFY canGoPreviousChanged)
39 Q_PROPERTY(bool canControl READ canControl NOTIFY canControlChanged)
40
41public:
45 Paused
46 };
47 Q_ENUM(PlaybackState)
48
49 enum LoopState {
52 LoopPlaylist
53 };
54 Q_ENUM(LoopState)
55
56 explicit MprisPlayer(const QString& serviceName, QObject* parent = nullptr);
57 ~MprisPlayer() override;
58
59 [[nodiscard]] QString identity() const;
60 [[nodiscard]] QString desktopEntry() const;
61 [[nodiscard]] QString serviceName() const;
62 [[nodiscard]] PlaybackState playbackState() const;
63 [[nodiscard]] bool isPlaying() const;
64 [[nodiscard]] QString trackTitle() const;
65 [[nodiscard]] QString trackArtist() const;
66 [[nodiscard]] QString trackAlbum() const;
67 [[nodiscard]] QString trackArtUrl() const;
68 [[nodiscard]] qreal position() const;
69 [[nodiscard]] qreal length() const;
70 [[nodiscard]] qreal volume() const;
71 void setVolume(qreal volume);
72 [[nodiscard]] qreal rate() const;
73 [[nodiscard]] LoopState loopState() const;
74 void setLoopState(LoopState state);
75 [[nodiscard]] bool shuffle() const;
76 void setShuffle(bool shuffle);
77 [[nodiscard]] bool canPlay() const;
78 [[nodiscard]] bool canPause() const;
79 [[nodiscard]] bool canSeek() const;
80 [[nodiscard]] bool canGoNext() const;
81 [[nodiscard]] bool canGoPrevious() const;
82 [[nodiscard]] bool canControl() const;
83
84 Q_INVOKABLE void play();
85 Q_INVOKABLE void pause();
86 Q_INVOKABLE void stop();
87 Q_INVOKABLE void togglePlaying();
88 Q_INVOKABLE void next();
89 Q_INVOKABLE void previous();
90 Q_INVOKABLE void seek(qreal offsetSeconds);
91 Q_INVOKABLE void setPosition(qreal absoluteSeconds);
92 Q_INVOKABLE void raise();
93 Q_INVOKABLE void quit();
94
95Q_SIGNALS:
96 void identityChanged();
97 void desktopEntryChanged();
98 void playbackStateChanged();
99 void metadataChanged();
100 void positionChanged();
101 void volumeChanged();
102 void rateChanged();
103 void loopStateChanged();
104 void shuffleChanged();
105 void canPlayChanged();
106 void canPauseChanged();
107 void canSeekChanged();
108 void canGoNextChanged();
109 void canGoPreviousChanged();
110 void canControlChanged();
111
112private Q_SLOTS:
113 void _q_onPropertiesChanged(const QString& iface, const QVariantMap& changed, const QStringList& invalidated);
114 void _q_onSeeked(qlonglong position);
115
116private:
117 class Private;
118 std::unique_ptr<Private> d;
119};
120
121} // namespace PhosphorServices
Definition MprisPlayer.h:16
LoopState
Definition MprisPlayer.h:49
@ LoopNone
Definition MprisPlayer.h:50
@ LoopTrack
Definition MprisPlayer.h:51
PlaybackState
Definition MprisPlayer.h:42
@ Playing
Definition MprisPlayer.h:44
@ Stopped
Definition MprisPlayer.h:43
Definition DBusMenuModel.h:15