37 lines
1.3 KiB
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 "audio-volume-muted-symbolic";
|
|
}
|
|
if (volume <= 0.33) {
|
|
return "audio-volume-low-symbolic";
|
|
}
|
|
if (volume <= 0.66) {
|
|
return "audio-volume-medium-symbolic";
|
|
}
|
|
if (volume >= 0.66) {
|
|
return "audio-volume-high-symbolic";
|
|
}
|
|
}
|
|
function setDefaultSink(node: PwNode): void {
|
|
Pipewire.preferredDefaultAudioSink = node;
|
|
}
|
|
}
|