From 60989e52b3f3bc0a95d3e61bd8e59fa4d9b7ab83 Mon Sep 17 00:00:00 2001 From: Chris Xiong Date: Sun, 26 Nov 2023 01:10:36 -0500 Subject: The 2 year constipation. (mpris plugin) Probably buggy as hell. --- mpris-plugin/qmprisdbusinterface.hpp | 148 +++++++++++++++++++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 mpris-plugin/qmprisdbusinterface.hpp (limited to 'mpris-plugin/qmprisdbusinterface.hpp') diff --git a/mpris-plugin/qmprisdbusinterface.hpp b/mpris-plugin/qmprisdbusinterface.hpp new file mode 100644 index 0000000..071c509 --- /dev/null +++ b/mpris-plugin/qmprisdbusinterface.hpp @@ -0,0 +1,148 @@ +/* + * DBus adaptor for the MPRIS Interface + * Based on MPRIS D-Bus Interface Specification Version 2.2: + * https://specifications.freedesktop.org/mpris-spec/2.2/index.html + */ +#ifndef QMPRISDBUSINTERFACE_HPP +#define QMPRISDBUSINTERFACE_HPP + +#include +#include +#include + +class QMPrisWrapper; + +class QMPrisPlayer : public QDBusAbstractAdaptor +{ + Q_OBJECT + Q_CLASSINFO("D-Bus Interface", "org.mpris.MediaPlayer2.Player") + + Q_PROPERTY(QString PlaybackStatus READ getPlaybackStatus) + Q_PROPERTY(QString LoopStatus READ getLoopStatus WRITE setLoopStatus) + Q_PROPERTY(double Rate READ getRate WRITE setRate) + Q_PROPERTY(bool Shuffle READ getShuffle WRITE setShuffle) + Q_PROPERTY(QVariantMap Metadata READ getMetadata) + Q_PROPERTY(double Volume READ getVolume WRITE setVolume) + Q_PROPERTY(qlonglong Position READ getPosition) + Q_PROPERTY(double MinimumRate READ getMinimumRate) + Q_PROPERTY(double MaximumRate READ getMaximumRate) + + Q_PROPERTY(bool CanGoNext READ getCanGoNext) + Q_PROPERTY(bool CanGoPrevious READ getCanGoPrevious) + Q_PROPERTY(bool CanPlay READ getCanPlay) + Q_PROPERTY(bool CanPause READ getCanPause) + Q_PROPERTY(bool CanSeek READ getCanSeek) + Q_PROPERTY(bool CanControl READ getCanControl) +public: + enum PlaybackStatus + { + Playing, + Paused, + Stopped + }; + Q_ENUM(PlaybackStatus) + + enum LoopStatus + { + None, + Track, + Playlist + }; + Q_ENUM(LoopStatus) + + explicit QMPrisPlayer(QObject *parent=nullptr); + + virtual QString getPlaybackStatus(); + virtual QString getLoopStatus(); + virtual double getRate(); + virtual bool getShuffle(); + virtual QVariantMap getMetadata(); + virtual double getVolume(); + virtual qlonglong getPosition(); + virtual double getMinimumRate(); + virtual double getMaximumRate(); + virtual bool getCanGoNext(); + virtual bool getCanGoPrevious(); + virtual bool getCanPlay(); + virtual bool getCanPause(); + virtual bool getCanSeek(); + virtual bool getCanControl(); + + virtual void setLoopStatus(QString loopStatus); + virtual void setRate(double playbackRate); + virtual bool setShuffle(bool shuffle); + virtual void setVolume(double volume); + +public slots: + virtual void Next(); + virtual void Previous(); + virtual void Pause(); + virtual void PlayPause(); + virtual void Stop(); + virtual void Play(); + virtual void Seek(qlonglong t); + virtual void SetPosition(QDBusObjectPath o, qlonglong t); + virtual void OpenUri(QString s); + +signals: + void Seeked(qlonglong t); +}; + +class QMPrisTrackList : public QDBusAbstractAdaptor +{ + Q_OBJECT + Q_CLASSINFO("D-Bus Interface", "org.mpris.MediaPlayer2.TrackList") + Q_PROPERTY(QList Tracks READ getTracks) + Q_PROPERTY(bool CanEditTracks READ getCanEditTracks) +public slots: + virtual QList GetTracksMetaData(QList trackIds); + virtual void AddTrack(QString uri, QDBusObjectPath after, bool setCurrent); + virtual void RemoveTrack(QDBusObjectPath trackId); + virtual void GoTo(QDBusObjectPath trackId); +signals: + void TrackListReplaced(QList tracks, QDBusObjectPath currentTrack); + void TrackAdded(QVariantMap metadata, QDBusObjectPath after); + void TrackRemoved(QDBusObjectPath track); + void TrackMetadataChanged(QDBusObjectPath track, QVariantMap metadata); +public: + explicit QMPrisTrackList(QObject *parent=nullptr); + virtual QList getTracks(); + virtual bool getCanEditTracks(); +}; + +class QMPrisMediaPlayer2 : public QDBusAbstractAdaptor +{ + Q_OBJECT + Q_CLASSINFO("D-Bus Interface", "org.mpris.MediaPlayer2") + + Q_PROPERTY(bool CanQuit READ getCanQuit) + Q_PROPERTY(bool CanRaise READ getCanRaise) + Q_PROPERTY(bool Fullscreen READ getFullscreen WRITE setFullscreen) + Q_PROPERTY(bool CanSetFullscreen READ getCanSetFullscreen) + Q_PROPERTY(bool HasTrackList READ getHasTrackList) + Q_PROPERTY(QString Identity READ getIdentity) + Q_PROPERTY(QString DesktopEntry READ getDesktopEntry) + Q_PROPERTY(QStringList SupportedUriSchemes READ getSupportedUriSchemes) + Q_PROPERTY(QStringList SupportedMimeTypes READ getSupportedMimeTypes) + +public slots: + virtual void Raise(); + virtual void Quit(); + +public: + explicit QMPrisMediaPlayer2(QObject *parent=nullptr); + + virtual bool getCanQuit(); + virtual bool getCanRaise(); + virtual bool getFullscreen(); + virtual bool getCanSetFullscreen(); + virtual bool getHasTrackList(); + virtual QString getIdentity(); + virtual QString getDesktopEntry(); + virtual QStringList getSupportedUriSchemes(); + virtual QStringList getSupportedMimeTypes(); + + virtual void setFullscreen(bool fullscreen); +}; + +#endif // QMPRISDBUSINTERFACE_HPP -- cgit v1.2.3