mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
95 lines
2.5 KiB
95 lines
2.5 KiB
/* |
|
SPDX-FileCopyrightText: 2008-2012 Alex Merry <[email protected]> |
|
|
|
SPDX-License-Identifier: LGPL-2.1-or-later |
|
*/ |
|
|
|
#pragma once |
|
|
|
#include <Plasma/DataContainer> |
|
#include <QFlags> |
|
|
|
class OrgFreedesktopDBusPropertiesInterface; |
|
class OrgMprisMediaPlayer2Interface; |
|
class OrgMprisMediaPlayer2PlayerInterface; |
|
class QDBusPendingCallWatcher; |
|
|
|
class PlayerContainer : public Plasma::DataContainer |
|
{ |
|
Q_OBJECT |
|
|
|
public: |
|
explicit PlayerContainer(const QString &busAddress, QObject *parent = nullptr); |
|
|
|
QString dbusAddress() const |
|
{ |
|
return m_dbusAddress; |
|
} |
|
OrgFreedesktopDBusPropertiesInterface *propertiesInterface() const |
|
{ |
|
return m_propsIface; |
|
} |
|
OrgMprisMediaPlayer2Interface *rootInterface() const |
|
{ |
|
return m_rootIface; |
|
} |
|
OrgMprisMediaPlayer2PlayerInterface *playerInterface() const |
|
{ |
|
return m_playerIface; |
|
} |
|
|
|
enum Cap { |
|
NoCaps = 0, |
|
CanQuit = 1 << 0, |
|
CanRaise = 1 << 1, |
|
CanSetFullscreen = 1 << 2, |
|
CanControl = 1 << 3, |
|
CanPlay = 1 << 4, |
|
CanPause = 1 << 5, |
|
CanSeek = 1 << 6, |
|
CanGoNext = 1 << 7, |
|
CanGoPrevious = 1 << 8, |
|
// CanStop is not directly provided by the spec, |
|
// but we infer it from PlaybackStatus and CanControl |
|
CanStop = 1 << 9, |
|
}; |
|
Q_DECLARE_FLAGS(Caps, Cap) |
|
Caps capabilities() const |
|
{ |
|
return m_caps; |
|
} |
|
|
|
enum UpdateType { |
|
FetchAll, |
|
UpdatedSignal, |
|
}; |
|
|
|
void refresh(); |
|
void updatePosition(); |
|
|
|
Q_SIGNALS: |
|
void initialFetchFinished(PlayerContainer *self); |
|
void initialFetchFailed(PlayerContainer *self); |
|
void capsChanged(Caps newCaps); |
|
|
|
private Q_SLOTS: |
|
void getPropsFinished(QDBusPendingCallWatcher *watcher); |
|
void getPositionFinished(QDBusPendingCallWatcher *watcher); |
|
void propertiesChanged(const QString &interface, const QVariantMap &changedProperties, const QStringList &invalidatedProperties); |
|
void seeked(qlonglong position); |
|
|
|
private: |
|
void copyProperty(const QString &propName, const QVariant &value, QVariant::Type expType, UpdateType updType); |
|
void updateFromMap(const QVariantMap &map, UpdateType updType); |
|
void recalculatePosition(); |
|
|
|
Caps m_caps; |
|
int m_fetchesPending; |
|
QString m_dbusAddress; |
|
OrgFreedesktopDBusPropertiesInterface *m_propsIface; |
|
OrgMprisMediaPlayer2Interface *m_rootIface; |
|
OrgMprisMediaPlayer2PlayerInterface *m_playerIface; |
|
double m_currentRate; |
|
}; |
|
|
|
Q_DECLARE_OPERATORS_FOR_FLAGS(PlayerContainer::Caps)
|
|
|