gomus/pkg/model.go

78 lines
1.3 KiB
Go

package gomus
import (
"fmt"
"os"
tea "github.com/charmbracelet/bubbletea"
)
var (
termWidth = 0
termHeight = 0
)
type Model struct {
cursor int
currentlyPlaying int
trackPlayer
trackIndex
trackPlayerView trackPlayerView
}
func NewModel() Model {
if len(os.Args) < 2 {
fmt.Println("Expected a path to some music")
os.Exit(0)
}
ti := NewDirTrackIndex(os.Args[1])
tpv := newTrackPlayerView(ti.tracks)
return Model{
cursor: 0,
currentlyPlaying: 0,
trackIndex: ti,
trackPlayer: trackPlayer{},
trackPlayerView: tpv,
}
}
func (m Model) Init() tea.Cmd {
return tea.Batch(tea.EnterAltScreen, m.trackPlayerView.Init())
}
func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
var cmds []tea.Cmd
switch msg := msg.(type) {
case tea.WindowSizeMsg:
termHeight = msg.Height
termWidth = msg.Width
case tea.KeyMsg:
switch msg.String() {
case "ctrl+c", "q":
m.trackPlayer.close()
return m, tea.Quit
case "enter":
t := m.trackPlayerView.trackList.SelectedItem().(track)
cmds = append(cmds, newTrackChangeCmd(t))
m.trackPlayer.play(t.getReader())
}
}
tpv, cmd := m.trackPlayerView.Update(msg)
m.trackPlayerView = tpv
cmds = append(cmds, cmd)
return m, tea.Batch(cmds...)
}
func (m Model) View() string {
return m.trackPlayerView.View()
}