// SPDX-FileCopyrightText: 2026 George Florea Bănuș // SPDX-FileCopyrightText: 2026 Tri Vo Khac // SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include "mpvitem.h" #include "playlistmodel.h" #include #include #include #include #include class MprisController; // Publishes the player on D-Bus (MPRIS), so Plasma's media controls, the lock screen // and media keys can drive it. Adapted from Haruna's MprisItem. class MprisItem : public QObject { Q_OBJECT QML_ELEMENT Q_PROPERTY(MpvItem *mpvItem READ mpvItem WRITE setMpvItem NOTIFY mpvItemChanged REQUIRED) Q_PROPERTY(PlaylistModel *playlist READ playlist WRITE setPlaylist NOTIFY playlistChanged REQUIRED) Q_PROPERTY(QWindow *window READ window WRITE setWindow NOTIFY windowChanged REQUIRED) public: explicit MprisItem(QObject *parent = nullptr); ~MprisItem() override; MpvItem *mpvItem() const; void setMpvItem(MpvItem *mpv); PlaylistModel *playlist() const; void setPlaylist(PlaylistModel *playlist); QWindow *window() const; void setWindow(QWindow *window); Q_SIGNALS: void mpvItemChanged(); void playlistChanged(); void windowChanged(); void raiseRequested(); void openUriRequested(const QString &uri); // Play the next/previous entry, the way the playlist actions would. void nextRequested(); void previousRequested(); private: void updatePlaybackStatus(); void updateNavigation(); std::unique_ptr m_controller; QPointer m_mpv; QPointer m_playlist; QPointer m_window; };