File indexing completed on 2025-04-27 04:36:17
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 <QMap> 0010 #include <QObject> 0011 0012 #include <core/kdeconnectplugin.h> 0013 0014 #include <Windows.h> 0015 #include <endpointvolume.h> 0016 #include <mmdeviceapi.h> 0017 0018 #ifdef __MINGW32__ 0019 #include <initguid.h> 0020 #endif 0021 0022 #define PACKET_TYPE_SYSTEMVOLUME QStringLiteral("kdeconnect.systemvolume") 0023 #define PACKET_TYPE_SYSTEMVOLUME_REQUEST QStringLiteral("kdeconnect.systemvolume.request") 0024 0025 class SystemvolumePlugin : public KdeConnectPlugin 0026 { 0027 Q_OBJECT 0028 0029 public: 0030 explicit SystemvolumePlugin(QObject *parent, const QVariantList &args); 0031 ~SystemvolumePlugin(); 0032 void receivePacket(const NetworkPacket &np) override; 0033 void connected() override; 0034 0035 private: 0036 class CMMNotificationClient; 0037 class CAudioEndpointVolumeCallback; 0038 0039 bool valid; 0040 IMMDeviceEnumerator *deviceEnumerator; 0041 CMMNotificationClient *deviceCallback; 0042 QMap<QString, QPair<IAudioEndpointVolume *, CAudioEndpointVolumeCallback *>> sinkList; 0043 QMap<QString, QString> idToNameMap; 0044 0045 bool sendSinkList(); 0046 HRESULT setDefaultAudioPlaybackDevice(QString &name, bool enabled); 0047 };