DtkWidget 5.6.0.2
DTK Widget module
dbusmpris.h
1// SPDX-FileCopyrightText: 2016 - 2022 UnionTech Software Technology Co., Ltd.
2//
3// SPDX-License-Identifier: LGPL-3.0-or-later
4
5#ifndef DBUSMPRIS_H
6#define DBUSMPRIS_H
7
8#include <QtCore/QObject>
9#include <QtCore/QByteArray>
10#include <QtCore/QList>
11#include <QtCore/QMap>
12#include <QtCore/QString>
13#include <QtCore/QStringList>
14#include <QtCore/QVariant>
15#include <QtDBus/QtDBus>
16
17/*
18 * Proxy class for interface org.mpris.MediaPlayer2.Player
19 */
20class DBusMPRIS: public QDBusAbstractInterface
21{
22 Q_OBJECT
23
24 Q_SLOT void __propertyChanged__(const QDBusMessage& msg)
25 {
26 QList<QVariant> arguments = msg.arguments();
27 if (3 != arguments.count())
28 return;
29 QString interfaceName = msg.arguments().at(0).toString();
30 if (interfaceName != "org.mpris.MediaPlayer2.Player")
31 return;
32 QVariantMap changedProps = qdbus_cast<QVariantMap>(arguments.at(1).value<QDBusArgument>());
33 Q_FOREACH(const QString &prop, changedProps.keys()) {
34 const QMetaObject* self = metaObject();
35 for (int i=self->propertyOffset(); i < self->propertyCount(); ++i) {
36 QMetaProperty p = self->property(i);
37 QGenericArgument value(QMetaType::typeName(p.type()), const_cast<void*>(changedProps[prop].constData()));
38 if (p.name() == prop) {
39 Q_EMIT p.notifySignal().invoke(this, value);
40 }
41 }
42 }
43 }
44public:
45 static inline const char *staticInterfaceName()
46 { return "org.mpris.MediaPlayer2.Player"; }
47
48public:
49 DBusMPRIS(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = 0);
50
51 ~DBusMPRIS();
52
53 Q_PROPERTY(bool CanControl READ canControl NOTIFY CanControlChanged)
54 inline bool canControl() const
55 { return qvariant_cast< bool >(property("CanControl")); }
56
57 Q_PROPERTY(bool CanShowInUI READ canShowInUI NOTIFY CanShowInUIChanged)
58 inline bool canShowInUI() const
59 {
60 QVariant showInUI = property("CanShowInUI");
61 // 属性有效且为假表示不能控制 无效或为真表示可以控制
62 return showInUI.isValid() ? showInUI.toBool() : true;
63 }
64
65 Q_PROPERTY(bool CanGoNext READ canGoNext NOTIFY CanGoNextChanged)
66 inline bool canGoNext() const
67 { return qvariant_cast< bool >(property("CanGoNext")); }
68
69 Q_PROPERTY(bool CanGoPrevious READ canGoPrevious NOTIFY CanGoPreviousChanged)
70 inline bool canGoPrevious() const
71 { return qvariant_cast< bool >(property("CanGoPrevious")); }
72
73 Q_PROPERTY(bool CanPause READ canPause NOTIFY CanPauseChanged)
74 inline bool canPause() const
75 { return qvariant_cast< bool >(property("CanPause")); }
76
77 Q_PROPERTY(bool CanPlay READ canPlay NOTIFY CanPlayChanged)
78 inline bool canPlay() const
79 { return qvariant_cast< bool >(property("CanPlay")); }
80
81 Q_PROPERTY(bool CanSeek READ canSeek NOTIFY CanSeekChanged)
82 inline bool canSeek() const
83 { return qvariant_cast< bool >(property("CanSeek")); }
84
85 Q_PROPERTY(QString LoopStatus READ loopStatus WRITE setLoopStatus NOTIFY LoopStatusChanged)
86 inline QString loopStatus() const
87 { return qvariant_cast< QString >(property("LoopStatus")); }
88 inline void setLoopStatus(const QString &value)
89 { setProperty("LoopStatus", QVariant::fromValue(value)); }
90
91 Q_PROPERTY(double MaximumRate READ maximumRate NOTIFY MaximumRateChanged)
92 inline double maximumRate() const
93 { return qvariant_cast< double >(property("MaximumRate")); }
94
95 Q_PROPERTY(QVariantMap Metadata READ metadata NOTIFY MetadataChanged)
96 inline QVariantMap metadata() const
97 { return qvariant_cast< QVariantMap >(property("Metadata")); }
98
99 Q_PROPERTY(double MinimumRate READ minimumRate NOTIFY MinimumRateChanged)
100 inline double minimumRate() const
101 { return qvariant_cast< double >(property("MinimumRate")); }
102
103 Q_PROPERTY(QString PlaybackStatus READ playbackStatus NOTIFY PlaybackStatusChanged)
104 inline QString playbackStatus() const
105 { return qvariant_cast< QString >(property("PlaybackStatus")); }
106
107 Q_PROPERTY(qlonglong Position READ position NOTIFY PositionChanged)
108 inline qlonglong position() const
109 { return qvariant_cast< qlonglong >(property("Position")); }
110
111 Q_PROPERTY(double Rate READ rate WRITE setRate NOTIFY RateChanged)
112 inline double rate() const
113 { return qvariant_cast< double >(property("Rate")); }
114 inline void setRate(double value)
115 { setProperty("Rate", QVariant::fromValue(value)); }
116
117 Q_PROPERTY(bool Shuffle READ shuffle WRITE setShuffle NOTIFY ShuffleChanged)
118 inline bool shuffle() const
119 { return qvariant_cast< bool >(property("Shuffle")); }
120 inline void setShuffle(bool value)
121 { setProperty("Shuffle", QVariant::fromValue(value)); }
122
123 Q_PROPERTY(double Volume READ volume WRITE setVolume NOTIFY VolumeChanged)
124 inline double volume() const
125 { return qvariant_cast< double >(property("Volume")); }
126 inline void setVolume(double value)
127 { setProperty("Volume", QVariant::fromValue(value)); }
128
129public Q_SLOTS: // METHODS
130 inline QDBusPendingReply<> Next()
131 {
132 QList<QVariant> argumentList;
133 return asyncCallWithArgumentList(QStringLiteral("Next"), argumentList);
134 }
135
136 inline QDBusPendingReply<> OpenUri(const QString &Uri)
137 {
138 QList<QVariant> argumentList;
139 argumentList << QVariant::fromValue(Uri);
140 return asyncCallWithArgumentList(QStringLiteral("OpenUri"), argumentList);
141 }
142
143 inline QDBusPendingReply<> Pause()
144 {
145 QList<QVariant> argumentList;
146 return asyncCallWithArgumentList(QStringLiteral("Pause"), argumentList);
147 }
148
149 inline QDBusPendingReply<> Play()
150 {
151 QList<QVariant> argumentList;
152 return asyncCallWithArgumentList(QStringLiteral("Play"), argumentList);
153 }
154
155 inline QDBusPendingReply<> PlayPause()
156 {
157 QList<QVariant> argumentList;
158 return asyncCallWithArgumentList(QStringLiteral("PlayPause"), argumentList);
159 }
160
161 inline QDBusPendingReply<> Previous()
162 {
163 QList<QVariant> argumentList;
164 return asyncCallWithArgumentList(QStringLiteral("Previous"), argumentList);
165 }
166
167 inline QDBusPendingReply<> Seek(qlonglong Offset)
168 {
169 QList<QVariant> argumentList;
170 argumentList << QVariant::fromValue(Offset);
171 return asyncCallWithArgumentList(QStringLiteral("Seek"), argumentList);
172 }
173
174 inline QDBusPendingReply<> SetPosition(const QDBusObjectPath &TrackId, qlonglong Position)
175 {
176 QList<QVariant> argumentList;
177 argumentList << QVariant::fromValue(TrackId) << QVariant::fromValue(Position);
178 return asyncCallWithArgumentList(QStringLiteral("SetPosition"), argumentList);
179 }
180
181 inline QDBusPendingReply<> Stop()
182 {
183 QList<QVariant> argumentList;
184 return asyncCallWithArgumentList(QStringLiteral("Stop"), argumentList);
185 }
186
187Q_SIGNALS: // SIGNALS
188 void Seeked(qlonglong Position);
189// begin property changed signals
190void CanControlChanged(bool value);
191void CanShowInUIChanged(bool value);
192void CanGoNextChanged(bool value);
193void CanGoPreviousChanged(bool value);
194void CanPauseChanged(bool value);
195void CanPlayChanged(bool value);
196void CanSeekChanged(bool value);
197void LoopStatusChanged(const QString & value);
198void MaximumRateChanged(double value);
199void MetadataChanged(const QVariantMap & value);
200void MinimumRateChanged(double value);
201void PlaybackStatusChanged(const QString & value);
202void PositionChanged(qlonglong value);
203void RateChanged(double value);
204void ShuffleChanged(bool value);
205void VolumeChanged(double value);
206};
207
208namespace org {
209 namespace mpris {
210 namespace MediaPlayer2 {
211 typedef ::DBusMPRIS Player;
212 }
213 }
214}
215#endif
Definition: dbusmpris.h:21
const T & at(int i) const const
int count(const T &value) const const
bool invoke(QObject *object, Qt::ConnectionType connectionType, QGenericReturnArgument returnValue, QGenericArgument val0, QGenericArgument val1, QGenericArgument val2, QGenericArgument val3, QGenericArgument val4, QGenericArgument val5, QGenericArgument val6, QGenericArgument val7, QGenericArgument val8, QGenericArgument val9) const const
QMetaProperty property(int index) const const
int propertyOffset() const const
const char * name() const const
QMetaMethod notifySignal() const const
QVariant::Type type() const const
const char * typeName(int typeId)
const QChar at(int position) const const
QVariant fromValue(const T &value)
bool isValid() const const
bool toBool() const const