summaryrefslogtreecommitdiff
path: root/services
diff options
context:
space:
mode:
Diffstat (limited to 'services')
-rw-r--r--services/Audio.qml27
1 files changed, 23 insertions, 4 deletions
diff --git a/services/Audio.qml b/services/Audio.qml
index c91adbc..54cea3b 100644
--- a/services/Audio.qml
+++ b/services/Audio.qml
@@ -6,20 +6,39 @@ import Quickshell.Services.Pipewire
Singleton {
id: root
+ readonly property var nodes: Pipewire.nodes.values.reduce((acc, node) => {
+ if (!node.isStream) {
+ if (node.isSink) acc.sinks.push(node)
+ else if (node.audio) acc.sources.push(node)
+ }
+ return acc
+ }, { sources: [], sinks: [] })
+
+ readonly property list<PwNode> sinks: nodes.sinks
+ readonly property list<PwNode> sources: nodes.sources
+
readonly property PwNode sink: Pipewire.defaultAudioSink
readonly property PwNode source: Pipewire.defaultAudioSource
- readonly property bool muted: sink?.audio?.muted ?? false
+ readonly property bool muted: !!sink?.audio?.muted
readonly property real volume: sink?.audio?.volume ?? 0
- function setVolume(volume: real): void {
+ function setVolume(newVolume: real): void {
if (sink?.ready && sink?.audio) {
sink.audio.muted = false;
- sink.audio.volume = volume;
+ sink.audio.volume = newVolume;
}
}
+ function setAudioSink(newSink: PwNode): void {
+ Pipewire.preferredDefaultAudioSink = newSink
+ }
+
+ function setAudioSource(newSource: PwNode): void {
+ Pipewire.preferredDefaultAudioSource = newSource
+ }
+
PwObjectTracker {
- objects: [Pipewire.defaultAudioSink, Pipewire.defaultAudioSource]
+ objects: [...root.sinks, ...root.sources]
}
}