subsonic-tui/internal/tui/views/albums.go
Sagi Dayan 92e3c4ea7d
All checks were successful
ci / check for spelling errors (pull_request) Successful in 21s
ci / code quality (lint/tests) (pull_request) Successful in 2m29s
ci / Make sure build does not fail (pull_request) Successful in 2m25s
ci / notify-fail (pull_request) Has been skipped
ci / check for spelling errors (push) Successful in 22s
ci / code quality (lint/tests) (push) Successful in 1m53s
ci / Make sure build does not fail (push) Successful in 2m55s
ci / notify-fail (push) Has been skipped
Added ci workflow + fixed linting issues
Signed-off-by: Sagi Dayan <sagidayan@gmail.com>
2024-12-18 18:02:01 +02:00

75 lines
1.5 KiB
Go

package views
import (
"git.dayanhub.com/sagi/subsonic-tui/internal/client"
"git.dayanhub.com/sagi/subsonic-tui/internal/config"
"github.com/delucks/go-subsonic"
"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(config.ColorBackground)
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(config.ColorSelectedBoarder)
list.SetSelectable(true, false)
})
list.SetBlurFunc(func() {
list.SetBorderColor(config.ColorBluredBoarder)
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
}