1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2025-12-09 23:15:38 -05:00

audioservice: fix shell crash on resume from sleep

This commit is contained in:
bbedward
2025-07-16 21:49:41 -04:00
parent b3db4a3015
commit 6484ee0806

View File

@@ -18,8 +18,19 @@ Singleton {
property var audioSinks: [] property var audioSinks: []
property var audioSources: [] property var audioSources: []
property bool _refreshQueued: false
Component.onCompleted: { Component.onCompleted: {
Qt.callLater(updateDevices) deferRefresh()
}
function deferRefresh() {
if (_refreshQueued) return
_refreshQueued = true
Qt.callLater(function () {
_refreshQueued = false
updateDevices()
})
} }
function updateDevices() { function updateDevices() {
@@ -30,16 +41,13 @@ Singleton {
Connections { Connections {
target: Pipewire target: Pipewire
function onReadyChanged() { function onReadyChanged() {
if (Pipewire.ready) { if (Pipewire.ready) deferRefresh()
updateAudioSinks()
updateAudioSources()
}
} }
function onDefaultAudioSinkChanged() { function onDefaultAudioSinkChanged() {
updateAudioSinks() deferRefresh()
} }
function onDefaultAudioSourceChanged() { function onDefaultAudioSourceChanged() {
updateAudioSources() deferRefresh()
} }
} }
@@ -53,8 +61,7 @@ Singleton {
let currentCount = Pipewire.nodes.values.length let currentCount = Pipewire.nodes.values.length
if (currentCount !== lastNodeCount) { if (currentCount !== lastNodeCount) {
lastNodeCount = currentCount lastNodeCount = currentCount
updateAudioSinks() deferRefresh()
updateAudioSources()
} }
} }
} }
@@ -191,33 +198,29 @@ Singleton {
} }
function setVolume(percentage) { function setVolume(percentage) {
if (sink?.ready && sink?.audio) { if (!sink?.ready || !sink?.audio) return
sink.audio.muted = false sink.audio.muted = false
sink.audio.volume = percentage / 100 sink.audio.volume = percentage / 100
} }
}
function setMicLevel(percentage) { function setMicLevel(percentage) {
if (source?.ready && source?.audio) { if (!source?.ready || !source?.audio) return
source.audio.muted = false source.audio.muted = false
source.audio.volume = percentage / 100 source.audio.volume = percentage / 100
} }
}
function toggleMute() { function toggleMute() {
if (sink?.ready && sink?.audio) { if (!sink?.ready || !sink?.audio) return
sink.audio.muted = !sink.audio.muted sink.audio.muted = !sink.audio.muted
} }
}
function toggleMicMute() { function toggleMicMute() {
if (source?.ready && source?.audio) { if (!source?.ready || !source?.audio) return
source.audio.muted = !source.audio.muted source.audio.muted = !source.audio.muted
} }
}
function setAudioSink(sinkName) { function setAudioSink(sinkName) {
if (Pipewire.nodes.values) { if (!Pipewire.nodes?.values) return
for (let i = 0; i < Pipewire.nodes.values.length; i++) { for (let i = 0; i < Pipewire.nodes.values.length; i++) {
let node = Pipewire.nodes.values[i] let node = Pipewire.nodes.values[i]
if (node && node.name === sinkName && (node.type & PwNodeType.AudioSink) === PwNodeType.AudioSink && !node.isStream) { if (node && node.name === sinkName && (node.type & PwNodeType.AudioSink) === PwNodeType.AudioSink && !node.isStream) {
@@ -226,10 +229,9 @@ Singleton {
} }
} }
} }
}
function setAudioSource(sourceName) { function setAudioSource(sourceName) {
if (Pipewire.nodes.values) { if (!Pipewire.nodes?.values) return
for (let i = 0; i < Pipewire.nodes.values.length; i++) { for (let i = 0; i < Pipewire.nodes.values.length; i++) {
let node = Pipewire.nodes.values[i] let node = Pipewire.nodes.values[i]
if (node && node.name === sourceName && (node.type & PwNodeType.AudioSource) === PwNodeType.AudioSource && !node.isStream) { if (node && node.name === sourceName && (node.type & PwNodeType.AudioSource) === PwNodeType.AudioSource && !node.isStream) {
@@ -238,7 +240,6 @@ Singleton {
} }
} }
} }
}
PwObjectTracker { PwObjectTracker {
id: nodeTracker id: nodeTracker