From 65a83cb026b6b04210e1203b7b82b13eb7cda8c9 Mon Sep 17 00:00:00 2001 From: Clement Date: Wed, 7 Nov 2018 11:41:04 -0800 Subject: [PATCH] Resend solo nodes on mixer reconnect --- libraries/audio-client/src/AudioClient.cpp | 5 +++++ libraries/audio/src/AudioSolo.cpp | 9 +++++++++ libraries/audio/src/AudioSolo.h | 4 +++- 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/libraries/audio-client/src/AudioClient.cpp b/libraries/audio-client/src/AudioClient.cpp index ace8f72875..8bc211cf9a 100644 --- a/libraries/audio-client/src/AudioClient.cpp +++ b/libraries/audio-client/src/AudioClient.cpp @@ -284,6 +284,11 @@ AudioClient::AudioClient() : connect(&domainHandler, &DomainHandler::disconnectedFromDomain, this, [this] { _solo.reset(); }); + connect(nodeList.data(), &NodeList::nodeAdded, this, [this](SharedNodePointer node) { + if (node->getType() == NodeType::AudioMixer) { + _solo.resend(); + } + }); } AudioClient::~AudioClient() { diff --git a/libraries/audio/src/AudioSolo.cpp b/libraries/audio/src/AudioSolo.cpp index 306c728dcb..83ecc6e130 100644 --- a/libraries/audio/src/AudioSolo.cpp +++ b/libraries/audio/src/AudioSolo.cpp @@ -72,6 +72,15 @@ void AudioSolo::removeUUIDs(QVector uuidList) { } void AudioSolo::reset() { + Lock lock(_mutex); removeUUIDs(getUUIDs()); } + +void AudioSolo::resend() { + Lock lock(_mutex); + auto uuids = getUUIDs(); + _nodesSoloed.clear(); + addUUIDs(uuids); +} + diff --git a/libraries/audio/src/AudioSolo.h b/libraries/audio/src/AudioSolo.h index ef2d2d0bec..790280a14b 100644 --- a/libraries/audio/src/AudioSolo.h +++ b/libraries/audio/src/AudioSolo.h @@ -20,7 +20,7 @@ #include class AudioSolo { - using Mutex = std::mutex; + using Mutex = std::recursive_mutex; using Lock = std::unique_lock; public: @@ -30,6 +30,8 @@ public: void removeUUIDs(QVector uuidList); void reset(); + void resend(); + private: mutable Mutex _mutex; QSet _nodesSoloed;