#ifndef MEDIACONTROLLER_H #define MEDIACONTROLLER_H #include #include class QProcess; class EarDetection; 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 initializeMprisInterface(); void handleEarDetection(EarDetection*); void followMediaChanges(); bool isActiveOutputDeviceAirPods(); void handleConversationalAwareness(const QByteArray &data); void activateA2dpProfile(); void removeAudioOutputDevice(); void setConnectedDeviceMacAddress(const QString &macAddress); void setEarDetectionBehavior(EarDetectionBehavior behavior); inline EarDetectionBehavior getEarDetectionBehavior() const { return earDetectionBehavior; } void pause(); Q_SIGNALS: void mediaStateChanged(MediaState state); private: MediaState mediaStateFromPlayerctlOutput(const QString &output); QString getAudioDeviceName(); QDBusInterface *mprisInterface = nullptr; QProcess *playerctlProcess = nullptr; bool wasPausedByApp = false; int initialVolume = -1; QString connectedDeviceMacAddress; EarDetectionBehavior earDetectionBehavior = PauseWhenOneRemoved; QString m_deviceOutputName; }; #endif // MEDIACONTROLLER_H