more decoupling on album grid

This commit is contained in:
Drew Weymouth
2022-12-24 17:44:40 -08:00
parent 20252e7743
commit 8a84128bc8
2 changed files with 21 additions and 11 deletions
+4 -1
View File
@@ -107,7 +107,10 @@ func setupServer(ctx context.Context, myWindow ui.MainWindow, p *player.Player,
myWindow.SetTitle(song.Title)
})
ag := ui.NewAlbumGrid(lm.RecentlyAddedIter(), pm, im)
ag := ui.NewAlbumGrid(lm.RecentlyAddedIter(), im.GetAlbumThumbnail)
ag.OnPlayAlbum = func(albumID string) {
_ = pm.PlayAlbum(albumID)
}
myWindow.SetContent(container.NewBorder(nil, myWindow.BottomPanel, nil, nil, ag))
}
+12 -5
View File
@@ -2,6 +2,7 @@ package ui
import (
"context"
"image"
"supersonic/backend"
"supersonic/ui/widgets"
@@ -10,23 +11,27 @@ import (
"github.com/dweymouth/go-subsonic"
)
type ImageFetcher func(string) (image.Image, error)
type AlbumGrid struct {
widget.BaseWidget
grid *widget.GridWrapList
albums []*subsonic.AlbumID3
iter backend.AlbumIterator
imageManager *backend.ImageManager
fetching bool
done bool
imageFetcher func(string) (image.Image, error)
OnPlayAlbum func(string)
}
var _ fyne.Widget = (*AlbumGrid)(nil)
func NewAlbumGrid(iter backend.AlbumIterator, pm *backend.PlaybackManager, im *backend.ImageManager) *AlbumGrid {
func NewAlbumGrid(iter backend.AlbumIterator, fetch ImageFetcher) *AlbumGrid {
ag := &AlbumGrid{
iter: iter,
imageManager: im,
imageFetcher: fetch,
}
ag.ExtendBaseWidget(ag)
@@ -38,7 +43,9 @@ func NewAlbumGrid(iter backend.AlbumIterator, pm *backend.PlaybackManager, im *b
func() fyne.CanvasObject {
ac := widgets.NewAlbumCard()
ac.OnPlay = func() {
pm.PlayAlbum(ac.AlbumID())
if ag.OnPlayAlbum != nil {
ag.OnPlayAlbum(ac.AlbumID())
}
}
return ac
},
@@ -71,7 +78,7 @@ func (ag *AlbumGrid) doUpdateAlbumCard(albumIdx int, ac *widgets.AlbumCard) {
}
ctx, cancel := context.WithCancel(context.Background())
go func(ctx context.Context) {
i, err := ag.imageManager.GetAlbumThumbnail(album.ID)
i, err := ag.imageFetcher(album.ID)
select {
case <-ctx.Done():
return