QortalOS Brooklyn for Raspberry Pi 4
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

/*
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)