subsonic-tui/internal/tui/views/albums.go

74 lines
1.4 KiB
Go
Raw Normal View History

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
}