File indexing completed on 2024-05-05 04:50:49

0001 /*
0002  * SPDX-FileCopyrightText: 2021 George Florea Bănuș <georgefb899@gmail.com>
0003  *
0004  * SPDX-License-Identifier: GPL-3.0-or-later
0005  */
0006 
0007 #ifndef MEDIAPLAYER2PLAYER_H
0008 #define MEDIAPLAYER2PLAYER_H
0009 
0010 #include <QDBusAbstractAdaptor>
0011 #include <QImage>
0012 
0013 class QDBusObjectPath;
0014 class MpvItem;
0015 
0016 class MediaPlayer2Player : public QDBusAbstractAdaptor
0017 {
0018     Q_OBJECT
0019     Q_CLASSINFO("D-Bus Interface", "org.mpris.MediaPlayer2.Player")
0020 
0021 public:
0022     explicit MediaPlayer2Player(QObject *parent = nullptr);
0023     ~MediaPlayer2Player() = default;
0024 
0025     Q_PROPERTY(QString PlaybackStatus READ PlaybackStatus NOTIFY playbackStatusChanged)
0026     Q_PROPERTY(QVariantMap Metadata READ Metadata NOTIFY metadataChanged)
0027     Q_PROPERTY(double Volume READ Volume WRITE setVolume NOTIFY volumeChanged)
0028     Q_PROPERTY(qlonglong Position READ Position WRITE setPosition NOTIFY playbackStatusChanged)
0029     Q_PROPERTY(bool CanGoNext READ CanGoNext CONSTANT)
0030     Q_PROPERTY(bool CanGoPrevious READ CanGoPrevious CONSTANT)
0031     Q_PROPERTY(bool CanPlay READ CanPlay CONSTANT)
0032     Q_PROPERTY(bool CanPause READ CanPause CONSTANT)
0033     Q_PROPERTY(bool CanSeek READ CanSeek CONSTANT)
0034     Q_PROPERTY(bool CanControl READ CanControl CONSTANT)
0035 
0036     void propertiesChanged(const QString &property, const QVariant &value);
0037 
0038 public Q_SLOTS:
0039     void Next();
0040     void Previous();
0041     void Pause();
0042     void PlayPause();
0043     void Stop();
0044     void Play();
0045     void Seek(qlonglong offset);
0046     void SetPosition(const QDBusObjectPath &trackId, qlonglong pos);
0047     void OpenUri(const QString &uri);
0048     QString PlaybackStatus();
0049     QVariantMap Metadata();
0050     double Volume();
0051     qlonglong Position();
0052     bool CanGoNext();
0053     bool CanGoPrevious();
0054     bool CanPlay();
0055     bool CanPause();
0056     bool CanSeek();
0057     bool CanControl();
0058     void setPosition(int pos);
0059     void setVolume(double vol);
0060 
0061 Q_SIGNALS:
0062     void next();
0063     void previous();
0064     void pause();
0065     void playpause();
0066     void stop();
0067     void play();
0068     void seek(int offset);
0069     void openUri(QString uri);
0070     void playbackStatusChanged();
0071     void metadataChanged();
0072     void volumeChanged();
0073     void requestMprisThumbnail(const QString &path, int width);
0074 
0075 private:
0076     QString getThumbnail(const QString &path);
0077     MpvItem *m_mpv;
0078     QImage m_image;
0079     QVariantMap m_metadata;
0080 };
0081 
0082 #endif // MEDIAPLAYER2PLAYER_H