Do not send the sink list a thousand times

When a device is connected/disconnected those callbacks would fire a lot
This commit is contained in:
Albert Vaca Cintora 2023-05-25 16:59:41 +02:00
parent 92f0e467ae
commit 5d0df5d28e

View file

@ -72,7 +72,6 @@ public:
HRESULT STDMETHODCALLTYPE OnNotify(PAUDIO_VOLUME_NOTIFICATION_DATA pNotify) override HRESULT STDMETHODCALLTYPE OnNotify(PAUDIO_VOLUME_NOTIFICATION_DATA pNotify) override
{ {
qWarning("OnNotify");
NetworkPacket np(PACKET_TYPE_SYSTEMVOLUME); NetworkPacket np(PACKET_TYPE_SYSTEMVOLUME);
np.set<int>(QStringLiteral("volume"), (int)(pNotify->fMasterVolume * 100)); np.set<int>(QStringLiteral("volume"), (int)(pNotify->fMasterVolume * 100));
np.set<bool>(QStringLiteral("muted"), pNotify->bMuted); np.set<bool>(QStringLiteral("muted"), pNotify->bMuted);
@ -188,6 +187,8 @@ public:
HANDLE threadHandle = CreateThread(NULL, 0, releaseRemovedDevice, &data, 0, &threadId); HANDLE threadHandle = CreateThread(NULL, 0, releaseRemovedDevice, &data, 0, &threadId);
CloseHandle(threadHandle); CloseHandle(threadHandle);
enclosing.sendSinkList();
return S_OK; return S_OK;
} }
@ -195,14 +196,20 @@ public:
{ {
if (dwNewState == DEVICE_STATE_UNPLUGGED) if (dwNewState == DEVICE_STATE_UNPLUGGED)
return OnDeviceRemoved(pwstrDeviceId); return OnDeviceRemoved(pwstrDeviceId);
enclosing.sendSinkList();
return S_OK; return S_OK;
} }
HRESULT STDMETHODCALLTYPE OnPropertyValueChanged(LPCWSTR pwstrDeviceId, const PROPERTYKEY key) override HRESULT STDMETHODCALLTYPE OnPropertyValueChanged(LPCWSTR pwstrDeviceId, const PROPERTYKEY key) override
{ {
// This callback is supper spammy. Care only about name and description changes.
if (IsEqualPropertyKey(key, PKEY_Device_FriendlyName)) {
enclosing.sendSinkList(); enclosing.sendSinkList();
}
#ifndef __MINGW32__
else if (IsEqualPropertyKey(key, PKEY_Device_DeviceDesc)) {
enclosing.sendSinkList();
}
#endif
return S_OK; return S_OK;
} }