diff --git a/ui/albumgrid.go b/ui/albumgrid.go index 6a1f3ea..6740c26 100644 --- a/ui/albumgrid.go +++ b/ui/albumgrid.go @@ -3,6 +3,7 @@ package ui import ( "context" "image" + "log" "supersonic/backend" "supersonic/ui/widgets" @@ -21,6 +22,7 @@ type AlbumGrid struct { iter backend.AlbumIterator fetching bool done bool + showYear bool imageFetcher ImageFetcher OnPlayAlbum func(string) @@ -29,18 +31,19 @@ type AlbumGrid struct { var _ fyne.Widget = (*AlbumGrid)(nil) -func NewFixedAlbumGrid(albums []*subsonic.AlbumID3, fetch ImageFetcher) *AlbumGrid { +func NewFixedAlbumGrid(albums []*subsonic.AlbumID3, fetch ImageFetcher, showYear bool) *AlbumGrid { ag := &AlbumGrid{ albums: albums, done: true, imageFetcher: fetch, + showYear: showYear, } ag.ExtendBaseWidget(ag) ag.createGridWrapList() return ag } -func NewAlbumGrid(iter backend.AlbumIterator, fetch ImageFetcher) *AlbumGrid { +func NewAlbumGrid(iter backend.AlbumIterator, fetch ImageFetcher, showYear bool) *AlbumGrid { ag := &AlbumGrid{ iter: iter, imageFetcher: fetch, @@ -74,7 +77,7 @@ func (ag *AlbumGrid) createGridWrapList() { }, // create func func() fyne.CanvasObject { - ac := widgets.NewAlbumCard() + ac := widgets.NewAlbumCard(ag.showYear) ac.OnPlay = func() { if ag.OnPlayAlbum != nil { ag.OnPlayAlbum(ac.AlbumID()) @@ -120,6 +123,8 @@ func (ag *AlbumGrid) doUpdateAlbumCard(albumIdx int, ac *widgets.AlbumCard) { if err == nil { ac.Cover.SetImage(i) ac.Cover.Refresh() + } else { + log.Printf("error fetching image: %s", err.Error()) } } }(ctx) diff --git a/ui/albumspage.go b/ui/albumspage.go index a36cbb6..3d4f3ae 100644 --- a/ui/albumspage.go +++ b/ui/albumspage.go @@ -65,7 +65,8 @@ func NewAlbumsPage(title string, sortOrder string, lm *backend.LibraryManager, i a.sortOrder.Selected = sortOrder a.sortOrder.OnChanged = a.onSortOrderChanged sortVbox := container.NewVBox(layout.NewSpacer(), a.sortOrder, layout.NewSpacer()) - a.grid = NewAlbumGrid(lm.AlbumsIter(backend.AlbumSortOrder(a.sortOrder.Selected)), im.GetAlbumThumbnail) + iter := lm.AlbumsIter(backend.AlbumSortOrder(a.sortOrder.Selected)) + a.grid = NewAlbumGrid(iter, im.GetAlbumThumbnail, false /*showYear*/) a.grid.OnPlayAlbum = a.onPlayAlbum a.grid.OnShowArtistPage = a.onShowArtistPage a.container = container.NewBorder( @@ -89,8 +90,9 @@ func (a *AlbumsPage) OnSearched(query string) { return } if a.searchGrid == nil { - a.searchGrid = NewAlbumGrid(a.lm.SearchIter(query), a.im.GetAlbumThumbnail) + a.searchGrid = NewAlbumGrid(a.lm.SearchIter(query), a.im.GetAlbumThumbnail, false /*showYear*/) a.searchGrid.OnPlayAlbum = a.onPlayAlbum + a.searchGrid.OnShowArtistPage = a.onShowArtistPage } else { a.searchGrid.Reset(a.lm.SearchIter(query)) } diff --git a/ui/artistpage.go b/ui/artistpage.go index 80232c7..494b8ff 100644 --- a/ui/artistpage.go +++ b/ui/artistpage.go @@ -60,7 +60,7 @@ func (a *ArtistPage) loadAsync() { } a.titleDisp.Segments[0].(*widget.TextSegment).Text = artist.Name a.titleDisp.Refresh() - ag := NewFixedAlbumGrid(artist.Album, a.im.GetAlbumThumbnail) + ag := NewFixedAlbumGrid(artist.Album, a.im.GetAlbumThumbnail, true /*showYear*/) ag.OnPlayAlbum = a.onPlayAlbum a.container.Objects[0] = ag a.container.Refresh() diff --git a/ui/widgets/albumcard.go b/ui/widgets/albumcard.go index 7a49536..8502422 100644 --- a/ui/widgets/albumcard.go +++ b/ui/widgets/albumcard.go @@ -3,6 +3,7 @@ package widgets import ( "context" "image" + "strconv" "supersonic/ui/layout" @@ -65,8 +66,11 @@ type AlbumCard struct { artistID string title *widget.Label artist *CustomHyperlink + year *widget.Label container *fyne.Container + showYear bool + // updated by AlbumGrid Cover *albumCover @@ -85,11 +89,13 @@ func (a *AlbumCard) MouseOut() {} func (a *AlbumCard) MouseMoved(*desktop.MouseEvent) {} -func NewAlbumCard() *AlbumCard { +func NewAlbumCard(showYear bool) *AlbumCard { a := &AlbumCard{ - title: widget.NewLabel(""), - artist: NewCustomHyperlink(), - Cover: newAlbumCover(), + title: widget.NewLabel(""), + artist: NewCustomHyperlink(), + year: widget.NewLabel(""), + Cover: newAlbumCover(), + showYear: showYear, } a.ExtendBaseWidget(a) a.Cover.OnDoubleTapped = func() { @@ -110,8 +116,12 @@ func NewAlbumCard() *AlbumCard { } func (a *AlbumCard) createContainer() { - titleArtist := container.New(&layout.VboxCustomPadding{ExtraPad: -16}, a.title, a.artist) - c := container.New(&layout.VboxCustomPadding{ExtraPad: -5}, a.Cover, titleArtist) + var secondLabel fyne.Widget = a.artist + if a.showYear { + secondLabel = a.year + } + info := container.New(&layout.VboxCustomPadding{ExtraPad: -16}, a.title, secondLabel) + c := container.New(&layout.VboxCustomPadding{ExtraPad: -5}, a.Cover, info) pad := &layout.CenterPadLayout{PadLeftRight: 20, PadTopBottom: 10} a.container = container.New(pad, c) } @@ -119,6 +129,7 @@ func (a *AlbumCard) createContainer() { func (a *AlbumCard) Update(al *subsonic.AlbumID3) { a.title.SetText(al.Name) a.artist.SetText(al.Artist) + a.year.SetText(strconv.Itoa(al.Year)) a.albumID = al.ID a.artistID = al.ArtistID }