File indexing completed on 2024-04-14 04:51:51

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 };