Files
librepods/linux/media/mediacontroller.h
Mathias S. 784b7a2cfa [Linux] Auto-restart WirePlumber when A2DP profile is unavailable (#213)
Fix: Auto-restart WirePlumber when A2DP profile is unavailable
2025-10-01 20:23:19 +05:30

66 lines
1.6 KiB
C++

#ifndef MEDIACONTROLLER_H
#define MEDIACONTROLLER_H
#include <QObject>
class QProcess;
class EarDetection;
class PlayerStatusWatcher;
class QDBusInterface;
class MediaController : public QObject
{
Q_OBJECT
public:
enum MediaState
{
Playing,
Paused,
Stopped
};
Q_ENUM(MediaState)
enum EarDetectionBehavior
{
PauseWhenOneRemoved,
PauseWhenBothRemoved,
Disabled
};
Q_ENUM(EarDetectionBehavior)
explicit MediaController(QObject *parent = nullptr);
~MediaController();
void handleEarDetection(EarDetection*);
void followMediaChanges();
bool isActiveOutputDeviceAirPods();
void handleConversationalAwareness(const QByteArray &data);
void activateA2dpProfile();
void removeAudioOutputDevice();
void setConnectedDeviceMacAddress(const QString &macAddress);
bool isA2dpProfileAvailable();
bool restartWirePlumber();
void setEarDetectionBehavior(EarDetectionBehavior behavior);
inline EarDetectionBehavior getEarDetectionBehavior() const { return earDetectionBehavior; }
void play();
void pause();
MediaState getCurrentMediaState() const;
Q_SIGNALS:
void mediaStateChanged(MediaState state);
private:
MediaState mediaStateFromPlayerctlOutput(const QString &output) const;
QString getAudioDeviceName();
bool sendMediaPlayerCommand(const QString &method);
bool wasPausedByApp = false;
int initialVolume = -1;
QString connectedDeviceMacAddress;
EarDetectionBehavior earDetectionBehavior = PauseWhenOneRemoved;
QString m_deviceOutputName;
PlayerStatusWatcher *playerStatusWatcher = nullptr;
};
#endif // MEDIACONTROLLER_H