Add volume changing logic

This commit is contained in:
NeilClack
2026-05-14 09:57:13 -05:00
parent 1f9da7ee78
commit 3ea32e0eaa
6 changed files with 104 additions and 1 deletions
+30 -1
View File
@@ -9,6 +9,7 @@ import (
"rhemawavetech.com/rhemawave/internal/db"
"rhemawavetech.com/rhemawave/internal/fontManager"
"rhemawavetech.com/rhemawave/internal/logger"
"rhemawavetech.com/rhemawave/internal/mixer"
"rhemawavetech.com/rhemawave/internal/shaderManager"
)
@@ -128,6 +129,31 @@ func (p *AudioDevices) ToggleAudio() {
p.CreateAudioStatusItem()
}
// UpdateVolume increments or decrements system volume by level (percent change)
func (p *AudioDevices) UpdateVolume(level int) {
// Calculate the new volume
newVol := mixer.ConvertVolume(level) + p.Context.CfgPtr.SavedVolume
// Check that it's within bounds
if newVol < 0.0 || newVol > 1.0 {
return
}
// Force 1.0 rather than 0.99999999999999989
if newVol > .99 {
newVol = 1.0
}
// Update the config
p.Context.CfgPtr.SavedVolume = newVol
fmt.Printf("New Volume: %f", newVol)
// Update the database
p.Context.DbPtr.Save(&p.Context.CfgPtr)
// Set the new volume
err := mixer.SetAllSinkVolumes(newVol)
if err != nil {
fmt.Printf("Error setting allSinkVolumes: %v", err)
}
}
func (p *AudioDevices) HandleEvent(event *sdl.Event) error {
e, ok := (*event).(*sdl.KeyboardEvent)
if !ok || e.Type != sdl.KEYDOWN {
@@ -135,9 +161,12 @@ func (p *AudioDevices) HandleEvent(event *sdl.Event) error {
}
switch e.Keysym.Sym {
case sdl.K_RETURN:
p.ToggleAudio()
case sdl.K_RIGHT: // Right increase
p.UpdateVolume(10)
case sdl.K_LEFT: // Left decrease
p.UpdateVolume(-10)
case sdl.K_BACKSPACE:
p.Context.NavigateTo(SETTINGS)
}
+28
View File
@@ -0,0 +1,28 @@
package page_test
import (
"testing"
"rhemawavetech.com/rhemawave/internal/page"
)
func TestUpdateVolume(t *testing.T) {
tests := []struct {
name string
input int
}{
{"0 percent", 0},
{"25 percent", 25},
{"50 percent", 50},
{"100 percent", 100},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
devices := &page.AudioDevices{}
// Currently only verifies no panic — expand assertions when
// UpdateVolume has observable side effects or a return value.
devices.UpdateVolume(tt.input)
})
}
}