show album year on artist page instead of artist name
This commit is contained in:
+8
-3
@@ -3,6 +3,7 @@ package ui
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"image"
|
"image"
|
||||||
|
"log"
|
||||||
"supersonic/backend"
|
"supersonic/backend"
|
||||||
"supersonic/ui/widgets"
|
"supersonic/ui/widgets"
|
||||||
|
|
||||||
@@ -21,6 +22,7 @@ type AlbumGrid struct {
|
|||||||
iter backend.AlbumIterator
|
iter backend.AlbumIterator
|
||||||
fetching bool
|
fetching bool
|
||||||
done bool
|
done bool
|
||||||
|
showYear bool
|
||||||
|
|
||||||
imageFetcher ImageFetcher
|
imageFetcher ImageFetcher
|
||||||
OnPlayAlbum func(string)
|
OnPlayAlbum func(string)
|
||||||
@@ -29,18 +31,19 @@ type AlbumGrid struct {
|
|||||||
|
|
||||||
var _ fyne.Widget = (*AlbumGrid)(nil)
|
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{
|
ag := &AlbumGrid{
|
||||||
albums: albums,
|
albums: albums,
|
||||||
done: true,
|
done: true,
|
||||||
imageFetcher: fetch,
|
imageFetcher: fetch,
|
||||||
|
showYear: showYear,
|
||||||
}
|
}
|
||||||
ag.ExtendBaseWidget(ag)
|
ag.ExtendBaseWidget(ag)
|
||||||
ag.createGridWrapList()
|
ag.createGridWrapList()
|
||||||
return ag
|
return ag
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewAlbumGrid(iter backend.AlbumIterator, fetch ImageFetcher) *AlbumGrid {
|
func NewAlbumGrid(iter backend.AlbumIterator, fetch ImageFetcher, showYear bool) *AlbumGrid {
|
||||||
ag := &AlbumGrid{
|
ag := &AlbumGrid{
|
||||||
iter: iter,
|
iter: iter,
|
||||||
imageFetcher: fetch,
|
imageFetcher: fetch,
|
||||||
@@ -74,7 +77,7 @@ func (ag *AlbumGrid) createGridWrapList() {
|
|||||||
},
|
},
|
||||||
// create func
|
// create func
|
||||||
func() fyne.CanvasObject {
|
func() fyne.CanvasObject {
|
||||||
ac := widgets.NewAlbumCard()
|
ac := widgets.NewAlbumCard(ag.showYear)
|
||||||
ac.OnPlay = func() {
|
ac.OnPlay = func() {
|
||||||
if ag.OnPlayAlbum != nil {
|
if ag.OnPlayAlbum != nil {
|
||||||
ag.OnPlayAlbum(ac.AlbumID())
|
ag.OnPlayAlbum(ac.AlbumID())
|
||||||
@@ -120,6 +123,8 @@ func (ag *AlbumGrid) doUpdateAlbumCard(albumIdx int, ac *widgets.AlbumCard) {
|
|||||||
if err == nil {
|
if err == nil {
|
||||||
ac.Cover.SetImage(i)
|
ac.Cover.SetImage(i)
|
||||||
ac.Cover.Refresh()
|
ac.Cover.Refresh()
|
||||||
|
} else {
|
||||||
|
log.Printf("error fetching image: %s", err.Error())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}(ctx)
|
}(ctx)
|
||||||
|
|||||||
+4
-2
@@ -65,7 +65,8 @@ func NewAlbumsPage(title string, sortOrder string, lm *backend.LibraryManager, i
|
|||||||
a.sortOrder.Selected = sortOrder
|
a.sortOrder.Selected = sortOrder
|
||||||
a.sortOrder.OnChanged = a.onSortOrderChanged
|
a.sortOrder.OnChanged = a.onSortOrderChanged
|
||||||
sortVbox := container.NewVBox(layout.NewSpacer(), a.sortOrder, layout.NewSpacer())
|
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.OnPlayAlbum = a.onPlayAlbum
|
||||||
a.grid.OnShowArtistPage = a.onShowArtistPage
|
a.grid.OnShowArtistPage = a.onShowArtistPage
|
||||||
a.container = container.NewBorder(
|
a.container = container.NewBorder(
|
||||||
@@ -89,8 +90,9 @@ func (a *AlbumsPage) OnSearched(query string) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
if a.searchGrid == nil {
|
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.OnPlayAlbum = a.onPlayAlbum
|
||||||
|
a.searchGrid.OnShowArtistPage = a.onShowArtistPage
|
||||||
} else {
|
} else {
|
||||||
a.searchGrid.Reset(a.lm.SearchIter(query))
|
a.searchGrid.Reset(a.lm.SearchIter(query))
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -60,7 +60,7 @@ func (a *ArtistPage) loadAsync() {
|
|||||||
}
|
}
|
||||||
a.titleDisp.Segments[0].(*widget.TextSegment).Text = artist.Name
|
a.titleDisp.Segments[0].(*widget.TextSegment).Text = artist.Name
|
||||||
a.titleDisp.Refresh()
|
a.titleDisp.Refresh()
|
||||||
ag := NewFixedAlbumGrid(artist.Album, a.im.GetAlbumThumbnail)
|
ag := NewFixedAlbumGrid(artist.Album, a.im.GetAlbumThumbnail, true /*showYear*/)
|
||||||
ag.OnPlayAlbum = a.onPlayAlbum
|
ag.OnPlayAlbum = a.onPlayAlbum
|
||||||
a.container.Objects[0] = ag
|
a.container.Objects[0] = ag
|
||||||
a.container.Refresh()
|
a.container.Refresh()
|
||||||
|
|||||||
+14
-3
@@ -3,6 +3,7 @@ package widgets
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"image"
|
"image"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
"supersonic/ui/layout"
|
"supersonic/ui/layout"
|
||||||
|
|
||||||
@@ -65,8 +66,11 @@ type AlbumCard struct {
|
|||||||
artistID string
|
artistID string
|
||||||
title *widget.Label
|
title *widget.Label
|
||||||
artist *CustomHyperlink
|
artist *CustomHyperlink
|
||||||
|
year *widget.Label
|
||||||
container *fyne.Container
|
container *fyne.Container
|
||||||
|
|
||||||
|
showYear bool
|
||||||
|
|
||||||
// updated by AlbumGrid
|
// updated by AlbumGrid
|
||||||
Cover *albumCover
|
Cover *albumCover
|
||||||
|
|
||||||
@@ -85,11 +89,13 @@ func (a *AlbumCard) MouseOut() {}
|
|||||||
|
|
||||||
func (a *AlbumCard) MouseMoved(*desktop.MouseEvent) {}
|
func (a *AlbumCard) MouseMoved(*desktop.MouseEvent) {}
|
||||||
|
|
||||||
func NewAlbumCard() *AlbumCard {
|
func NewAlbumCard(showYear bool) *AlbumCard {
|
||||||
a := &AlbumCard{
|
a := &AlbumCard{
|
||||||
title: widget.NewLabel(""),
|
title: widget.NewLabel(""),
|
||||||
artist: NewCustomHyperlink(),
|
artist: NewCustomHyperlink(),
|
||||||
|
year: widget.NewLabel(""),
|
||||||
Cover: newAlbumCover(),
|
Cover: newAlbumCover(),
|
||||||
|
showYear: showYear,
|
||||||
}
|
}
|
||||||
a.ExtendBaseWidget(a)
|
a.ExtendBaseWidget(a)
|
||||||
a.Cover.OnDoubleTapped = func() {
|
a.Cover.OnDoubleTapped = func() {
|
||||||
@@ -110,8 +116,12 @@ func NewAlbumCard() *AlbumCard {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (a *AlbumCard) createContainer() {
|
func (a *AlbumCard) createContainer() {
|
||||||
titleArtist := container.New(&layout.VboxCustomPadding{ExtraPad: -16}, a.title, a.artist)
|
var secondLabel fyne.Widget = a.artist
|
||||||
c := container.New(&layout.VboxCustomPadding{ExtraPad: -5}, a.Cover, titleArtist)
|
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}
|
pad := &layout.CenterPadLayout{PadLeftRight: 20, PadTopBottom: 10}
|
||||||
a.container = container.New(pad, c)
|
a.container = container.New(pad, c)
|
||||||
}
|
}
|
||||||
@@ -119,6 +129,7 @@ func (a *AlbumCard) createContainer() {
|
|||||||
func (a *AlbumCard) Update(al *subsonic.AlbumID3) {
|
func (a *AlbumCard) Update(al *subsonic.AlbumID3) {
|
||||||
a.title.SetText(al.Name)
|
a.title.SetText(al.Name)
|
||||||
a.artist.SetText(al.Artist)
|
a.artist.SetText(al.Artist)
|
||||||
|
a.year.SetText(strconv.Itoa(al.Year))
|
||||||
a.albumID = al.ID
|
a.albumID = al.ID
|
||||||
a.artistID = al.ArtistID
|
a.artistID = al.ArtistID
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user