/* * Sailfin: a Jellyfin client written using Qt * Copyright (C) 2021 Chris Josten and the Sailfin Contributors. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef JELLYFIN_VIEWMODEL_PLATFORMMEDIACONTROL_H #define JELLYFIN_VIEWMODEL_PLATFORMMEDIACONTROL_H #include #include #include namespace Jellyfin { namespace ViewModel { class PlatformMediaControlPrivate; class PlaybackManager; /** * @brief Exposes media control and information to the OS. Uses MPRIS on FreeDesktop-enabled systems. */ class PlatformMediaControl : public QObject, public QQmlParserStatus { Q_OBJECT Q_INTERFACES(QQmlParserStatus) public: explicit PlatformMediaControl(QObject *parent = nullptr); Q_PROPERTY(Jellyfin::ViewModel::PlaybackManager *playbackManager READ playbackManager WRITE setPlaybackManager NOTIFY playbackManagerChanged) /** * Whether the operating system can request the media player to quit. If set, * the quitRequested signal may be emitted and the application should quit. */ Q_PROPERTY(bool canQuit READ canQuit WRITE setCanQuit NOTIFY canQuitChanged) Q_PROPERTY(bool canRaise READ canRaise WRITE setCanRaise NOTIFY canRaiseChanged) Q_PROPERTY(QString playerName READ playerName WRITE setPlayerName NOTIFY playerNameChanged) Q_PROPERTY(QString desktopFile READ playerName WRITE setPlayerName NOTIFY playerNameChanged) PlaybackManager *playbackManager() const { return m_playbackManager; }; void setPlaybackManager(PlaybackManager *newPlaybackManager) { m_playbackManager = newPlaybackManager; emit playbackManagerChanged(newPlaybackManager); }; bool canQuit() const { return m_canQuit; }; void setCanQuit(bool newCanQuit) { m_canQuit = newCanQuit; emit canQuitChanged(newCanQuit); } void requestQuit() { emit quitRequested(); } bool canRaise() const { return m_canRaise; }; void setCanRaise(bool newCanRaise) { m_canRaise = newCanRaise; emit canRaiseChanged(newCanRaise); } void requestRaise() { emit raiseRequested(); };; QString playerName() const { return m_playerName; } void setPlayerName(QString newPlayerName) { m_playerName = newPlayerName; emit playerNameChanged(newPlayerName); } QString desktopFile() const { return m_desktopFile; } void setDesktopFile(QString newDesktopFile) { m_desktopFile = newDesktopFile; emit desktopFileChanged(newDesktopFile); } void classBegin() override { m_isParsing = true; } void componentComplete() override { m_isParsing = false; setup(); } signals: void playbackManagerChanged(PlaybackManager *newPlaybackManager); void canQuitChanged(bool newCanQuit); void canRaiseChanged(bool newCanRaise); void playerNameChanged(QString newPlayerName); void desktopFileChanged(QString newDesktopFile); void quitRequested(); void raiseRequested(); private: Q_DECLARE_PRIVATE(PlatformMediaControl) PlatformMediaControlPrivate* d_ptr; void setup(); bool m_isParsing = false; PlaybackManager *m_playbackManager = nullptr; bool m_canQuit = false; bool m_canRaise = false; QString m_playerName = QStringLiteral("JellyfinQt"); QString m_desktopFile = QStringLiteral("sailfin"); }; } // NS ViewModel } // NS Jellyfin #endif // PLATFORMMEDIACONTROL_H