Files
Hadi 59b31e5ca3 init
Signed-off-by: Hadi <[email protected]>
2026-08-13 00:58:37 +02:00

97 lines
2.5 KiB
Go

package audio
import (
"time"
tea "charm.land/bubbletea/v2"
"github.com/anotherhadi/settuings/internal/audio"
notificationsUI "github.com/anotherhadi/settuings/internal/ui/components/notifications"
)
const tickInterval = 5 * time.Second
func tickCmd() tea.Cmd {
return tea.Tick(tickInterval, func(time.Time) tea.Msg { return tickMsg{} })
}
func checkCmd() tea.Cmd {
return func() tea.Msg { return checkMsg{err: audio.CheckAvailable()} }
}
func fetchOutputCmd() tea.Cmd {
return func() tea.Msg {
devices, err := audio.ListSinks()
return outputListMsg{devices: devices, err: err}
}
}
func fetchInputCmd() tea.Cmd {
return func() tea.Msg {
devices, err := audio.ListSources()
return inputListMsg{devices: devices, err: err}
}
}
func fetchAppsCmd() tea.Cmd {
return func() tea.Msg {
streams, err := audio.ListStreams()
return appsListMsg{streams: streams, err: err}
}
}
func outputSetVolumeCmd(id string, pct int) tea.Cmd {
return func() tea.Msg { return outputActionMsg{err: audio.SetVolume(id, pct)} }
}
func outputToggleMuteCmd(id string) tea.Cmd {
return func() tea.Msg { return outputActionMsg{err: audio.ToggleMute(id)} }
}
func outputSetDefaultCmd(id string) tea.Cmd {
return func() tea.Msg { return outputActionMsg{err: audio.SetDefault(id)} }
}
func outputTestToneCmd(sinkID string) tea.Cmd {
return func() tea.Msg { return outputActionMsg{err: audio.PlayTestTone(sinkID)} }
}
func inputSetVolumeCmd(id string, pct int) tea.Cmd {
return func() tea.Msg { return inputActionMsg{err: audio.SetVolume(id, pct)} }
}
func inputToggleMuteCmd(id string) tea.Cmd {
return func() tea.Msg { return inputActionMsg{err: audio.ToggleMute(id)} }
}
func inputSetDefaultCmd(id string) tea.Cmd {
return func() tea.Msg { return inputActionMsg{err: audio.SetDefault(id)} }
}
func appsSetVolumeCmd(id string, pct int) tea.Cmd {
return func() tea.Msg { return appsActionMsg{err: audio.SetVolume(id, pct)} }
}
func appsToggleMuteCmd(id string) tea.Cmd {
return func() tea.Msg { return appsActionMsg{err: audio.ToggleMute(id)} }
}
func notifyCmd(title, body string) tea.Cmd {
return func() tea.Msg {
return notificationsUI.NotificationMsg{Title: title, Body: body, Kind: notificationsUI.KindInfo}
}
}
func startLevelMonitorCmd(sourceID string) tea.Cmd {
return func() tea.Msg {
mon, err := audio.StartLevelMonitor(sourceID)
return levelStartedMsg{monitor: mon, err: err}
}
}
func waitLevelCmd(mon *audio.LevelMonitor) tea.Cmd {
return func() tea.Msg {
peak, err := mon.Next()
return levelMsg{peak: peak, err: err}
}
}