mirror of
https://github.com/anotherhadi/settuings.git
synced 2026-10-05 16:18:24 +02:00
97 lines
2.5 KiB
Go
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}
|
|
}
|
|
}
|