quickshell/modules/Services/Audio.qml

37 lines
1.3 KiB
QML

pragma Singleton
import Quickshell
import QtQuick
import Quickshell.Services.Pipewire
Singleton {
id: root
property bool ready: Pipewire.ready
property bool muted: ready ? defaultAudio.audio.muted : true
property PwNode defaultAudio: Pipewire.defaultAudioSink
property PwNode preferredAudio: Pipewire.preferredDefaultAudioSink
property real percentage: Math.round(defaultAudio?.audio.volume * 100)
readonly property list<PwNode> sinks: Pipewire.nodes.values.filter(n => n.audio && n.isSink && !n.isStream)
readonly property list<PwNode> sources: Pipewire.nodes.values.filter(n => n.audio && !n.isSink && !n.isStream)
PwObjectTracker {
objects: [...root.sinks, ...root.sources]
}
function getVolumeIcon(sink) {
let mute = root.ready ? sink.audio.muted : true;
let volume = root.ready ? sink.audio.volume : 0;
if (mute) {
return "speaker-slash";
}
if (volume <= 0.33) {
return "speaker-none";
}
if (volume <= 0.66) {
return "speaker-low";
}
if (volume >= 0.66) {
return "speaker-high";
}
}
function setDefaultSink(node: PwNode): void {
Pipewire.preferredDefaultAudioSink = node;
}
}