File indexing completed on 2024-03-24 04:59:49
0001 /** 0002 * SPDX-FileCopyrightText: 2018 Jun Bo Bi <jambonmcyeah@gmail.com> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 */ 0006 0007 #pragma once 0008 0009 #include <core/kdeconnectplugin.h> 0010 0011 #include <variant> 0012 0013 #include <QHash> 0014 #include <vector> 0015 0016 #include <winrt/Windows.ApplicationModel.h> 0017 #include <winrt/Windows.Foundation.Collections.h> 0018 #include <winrt/Windows.Media.Control.h> 0019 #include <winrt/Windows.Storage.Streams.h> 0020 0021 using namespace winrt; 0022 using namespace Windows::Media::Control; 0023 using namespace Windows::Storage::Streams; 0024 using namespace Windows::ApplicationModel; 0025 0026 #define PACKET_TYPE_MPRIS QStringLiteral("kdeconnect.mpris") 0027 0028 class MprisControlPlugin : public KdeConnectPlugin 0029 { 0030 Q_OBJECT 0031 0032 public: 0033 explicit MprisControlPlugin(QObject *parent, const QVariantList &args); 0034 0035 void receivePacket(const NetworkPacket &np) override; 0036 0037 private: 0038 GlobalSystemMediaTransportControlsSessionManager sessionManager; 0039 QHash<QString, GlobalSystemMediaTransportControlsSession> playerList; 0040 0041 std::vector<GlobalSystemMediaTransportControlsSession::PlaybackInfoChanged_revoker> playbackInfoChangedHandlers; 0042 std::vector<GlobalSystemMediaTransportControlsSession::MediaPropertiesChanged_revoker> mediaPropertiesChangedHandlers; 0043 std::vector<GlobalSystemMediaTransportControlsSession::TimelinePropertiesChanged_revoker> timelinePropertiesChangedHandlers; 0044 0045 std::optional<QString> getPlayerName(GlobalSystemMediaTransportControlsSession const &player); 0046 void sendMediaProperties(std::variant<NetworkPacket, QString> const &packetOrName, GlobalSystemMediaTransportControlsSession const &player); 0047 void sendPlaybackInfo(std::variant<NetworkPacket, QString> const &packetOrName, GlobalSystemMediaTransportControlsSession const &player); 0048 void sendTimelineProperties(std::variant<NetworkPacket, QString> const &packetOrName, 0049 GlobalSystemMediaTransportControlsSession const &player, 0050 bool lengthOnly = false); 0051 void updatePlayerList(); 0052 void sendPlayerList(); 0053 bool sendAlbumArt(std::variant<NetworkPacket, QString> const &packetOrName, GlobalSystemMediaTransportControlsSession const &player, QString artUrl); 0054 0055 void handleDefaultPlayer(const NetworkPacket &np); 0056 0057 QString randomUrl(); 0058 };