Add application volume mixer
This commit is contained in:
@@ -10,6 +10,8 @@ repo_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||||
sound_page="$repo_dir/config/dot/quickshell/modules/settings/SoundPage.qml"
|
||||
device_list="$repo_dir/config/dot/quickshell/modules/settings/SoundDeviceList.qml"
|
||||
device_row="$repo_dir/config/dot/quickshell/modules/settings/SoundDeviceRow.qml"
|
||||
application_mixer="$repo_dir/config/dot/quickshell/modules/settings/ApplicationMixer.qml"
|
||||
application_row="$repo_dir/config/dot/quickshell/modules/settings/ApplicationVolumeRow.qml"
|
||||
balance="$repo_dir/config/dot/quickshell/modules/settings/AudioBalance.qml"
|
||||
audio_devices="$repo_dir/config/dot/quickshell/services/AudioDevices.qml"
|
||||
sound_feedback="$repo_dir/config/dot/quickshell/services/SoundFeedback.qml"
|
||||
@@ -17,6 +19,7 @@ quick_devices="$repo_dir/config/dot/quickshell/modules/quicksettings/AudioDevice
|
||||
harness="$repo_dir/config/dot/quickshell/sound-page-harness.qml"
|
||||
config_home="$(mktemp -d /tmp/panama-sound-config.XXXXXX)"
|
||||
state_home="$(mktemp -d /tmp/panama-sound-state.XXXXXX)"
|
||||
shell_log="$state_home/quickshell.log"
|
||||
|
||||
fail() {
|
||||
printf 'sound page contract: %s\n' "$1" >&2
|
||||
@@ -33,7 +36,7 @@ cleanup() {
|
||||
}
|
||||
trap cleanup EXIT
|
||||
|
||||
for file in "$sound_page" "$device_list" "$device_row" "$balance" "$audio_devices" "$sound_feedback" "$quick_devices"; do
|
||||
for file in "$sound_page" "$device_list" "$device_row" "$application_mixer" "$application_row" "$balance" "$audio_devices" "$sound_feedback" "$quick_devices"; do
|
||||
[[ -f "$file" ]] || fail "missing ${file#"$repo_dir/"}"
|
||||
done
|
||||
|
||||
@@ -61,6 +64,8 @@ rg -Fq 'root.node.audio.volumes = next;' "$balance" || fail 'balance does not wr
|
||||
|
||||
[[ "$(rg -c 'SoundDeviceList \{' "$sound_page")" -eq 2 ]] || fail 'Sound page does not expose output and input device lists'
|
||||
rg -Fq 'AudioBalance {' "$sound_page" || fail 'Sound page has no output balance control'
|
||||
rg -Fq 'ApplicationMixer {' "$sound_page" || fail 'Sound page has no Applications mixer'
|
||||
rg -Fq 'label: "Device profiles"' "$sound_page" || fail 'advanced handoff is not limited to device profiles'
|
||||
rg -Fq 'SystemSettings.openGnomePanel("sound")' "$sound_page" || fail 'advanced GNOME Sound handoff was removed'
|
||||
rg -Fq 'SoundFeedback.setEventSounds(checked)' "$sound_page" || fail 'event sounds are not controllable'
|
||||
rg -Fq 'SoundFeedback.setInputFeedback(checked)' "$sound_page" || fail 'input feedback sounds are not controllable'
|
||||
@@ -76,7 +81,7 @@ printf 'sound page static contract: PASS\n'
|
||||
|
||||
# Instantiate the complete page against the real, read-only PipeWire graph.
|
||||
# Merely constructing these controls must never change a default or volume.
|
||||
qs_for_harness --daemonize >/dev/null
|
||||
qs_for_harness --daemonize >"$shell_log" 2>&1
|
||||
for _ in $(seq 1 60); do
|
||||
qs_for_harness ipc show 2>/dev/null | rg -q '^target sound-page-test$' && break
|
||||
sleep 0.1
|
||||
@@ -90,10 +95,18 @@ for _ in $(seq 1 60); do
|
||||
sleep 0.1
|
||||
done
|
||||
jq -e '.ready == true and .outputs > 0 and .inputs > 0
|
||||
and (.defaultOutput | length > 0) and (.defaultInput | length > 0)' \
|
||||
and .applications >= 0
|
||||
and (.defaultOutput | length > 0) and (.defaultInput | length > 0)
|
||||
and .populatedRows == 1 and .populatedStatus == ""
|
||||
and .emptyRows == 0 and .emptyStatus == "Applications playing sound will appear here"
|
||||
and .unavailableRows == 0 and .unavailableStatus == "PipeWire is unavailable"' \
|
||||
<<<"$status" >/dev/null \
|
||||
|| fail "real PipeWire graph was not represented: $status"
|
||||
|
||||
if rg -n 'ReferenceError|TypeError|Binding loop|Unable to assign|Cannot assign|PwObjectTracker' "$shell_log"; then
|
||||
fail 'Sound page emitted a QML runtime warning'
|
||||
fi
|
||||
|
||||
trap - EXIT
|
||||
cleanup
|
||||
printf 'sound page runtime: PASS (%s outputs, %s inputs)\n' \
|
||||
|
||||
Reference in New Issue
Block a user