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:
@@ -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,51 +198,45 @@ 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) {
|
||||||
Pipewire.preferredDefaultAudioSink = node
|
Pipewire.preferredDefaultAudioSink = node
|
||||||
break
|
break
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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) {
|
||||||
Pipewire.preferredDefaultAudioSource = node
|
Pipewire.preferredDefaultAudioSource = node
|
||||||
break
|
break
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user