From 20dcb3aa104e1ec70aa7dba0dcc5c4cc41b0d09a Mon Sep 17 00:00:00 2001 From: jimpa Date: Sat, 28 Mar 2026 17:10:48 +0100 Subject: [PATCH] fix: resolve PipeWire sink name mismatch for active output detection --- linux/media/mediacontroller.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/linux/media/mediacontroller.cpp b/linux/media/mediacontroller.cpp index 078129c5a..f609c4e56 100644 --- a/linux/media/mediacontroller.cpp +++ b/linux/media/mediacontroller.cpp @@ -97,7 +97,11 @@ void MediaController::followMediaChanges() { bool MediaController::isActiveOutputDeviceAirPods() { QString defaultSink = m_pulseAudio->getDefaultSink(); LOG_DEBUG("Default sink: " << defaultSink); - return defaultSink.contains(connectedDeviceMacAddress); + LOG_DEBUG("Default macAddress: " << connectedDeviceMacAddress); + QString macForPulseWire = connectedDeviceMacAddress; + macForPulseWire.replace("_",":"); + LOG_DEBUG("macAddress formated for PulseWire/PipeWire: " << macForPulseWire); + return defaultSink.contains(macForPulseWire, Qt::CaseInsensitive); } void MediaController::handleConversationalAwareness(const QByteArray &data) { @@ -154,7 +158,7 @@ bool MediaController::isA2dpProfileAvailable() { return false; } - return m_pulseAudio->isProfileAvailable(m_deviceOutputName, "a2dp-sink-sbc_xq") || + return m_pulseAudio->isProfileAvailable(m_deviceOutputName, "a2dp-sink-sbc_xq") || m_pulseAudio->isProfileAvailable(m_deviceOutputName, "a2dp-sink-sbc") || m_pulseAudio->isProfileAvailable(m_deviceOutputName, "a2dp-sink"); } @@ -164,7 +168,7 @@ QString MediaController::getPreferredA2dpProfile() { return QString(); } - if (!m_cachedA2dpProfile.isEmpty() && + if (!m_cachedA2dpProfile.isEmpty() && m_pulseAudio->isProfileAvailable(m_deviceOutputName, m_cachedA2dpProfile)) { return m_cachedA2dpProfile; } @@ -234,7 +238,7 @@ void MediaController::removeAudioOutputDevice() { LOG_WARN("Connected device MAC address or output name is empty, cannot remove audio output device"); return; } - + LOG_INFO("Removing AirPods as audio output device"); if (!m_pulseAudio->setCardProfile(m_deviceOutputName, "off")) { LOG_ERROR("Failed to remove AirPods as audio output device"); @@ -416,4 +420,4 @@ QString MediaController::getAudioDeviceName() LOG_ERROR("No matching Bluetooth card found for MAC address: " << connectedDeviceMacAddress); } return cardName; -} \ No newline at end of file +}