package views import ( "git.dayanhub.com/sagi/subsonic-tui/internal/client" "github.com/delucks/go-subsonic" "github.com/gdamore/tcell/v2" "github.com/rivo/tview" ) var _ View = &albums{} type albums struct { view *tview.Table client *client.Client albums []*subsonic.AlbumID3 callback func(albumID string) } func NewAlbums(client *client.Client) *albums { list := tview.NewTable() list.SetBackgroundColor(tcell.ColorBlack) list.SetTitle("Albums [2]") list.SetBorder(true) resp, _ := client.GetAlbums() obj := &albums{ view: list, client: client, albums: resp, } list.SetSelectedFunc(func(row, column int) { obj.callback(obj.albums[row].ID) }) list.SetFocusFunc(func() { list.SetBorderColor(tcell.ColorRed) list.SetSelectable(true, false) }) list.SetBlurFunc(func() { list.SetBorderColor(tcell.ColorWhite) list.SetSelectable(false, false) }) obj.Update() return obj } func (a *albums) SetAlbums(al []*subsonic.AlbumID3) { a.albums = al a.Update() } func (a *albums) Update() { a.view.Clear() for i, pl := range a.albums { title := tview.NewTableCell(pl.Name).SetExpansion(1).SetMaxWidth(15) artist := tview.NewTableCell(pl.Artist).SetExpansion(1).SetAlign(tview.AlignRight) a.view.SetCell(i, 0, title) a.view.SetCell(i, 1, artist) } } func (a *albums) SetCallback(f func(albumID string)) { a.callback = f } func (a *albums) GetView() tview.Primitive { return a.view }