don't crash in fullscreen page when stopping (next track = nil)
This commit is contained in:
@@ -102,6 +102,13 @@ func TrackIDOrEmptyStr(track *mediaprovider.Track) string {
|
|||||||
return track.ID
|
return track.ID
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func AlbumIDOrEmptyStr(track *mediaprovider.Track) string {
|
||||||
|
if track == nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return track.ID
|
||||||
|
}
|
||||||
|
|
||||||
func TracksToIDs(tracks []*mediaprovider.Track) []string {
|
func TracksToIDs(tracks []*mediaprovider.Track) []string {
|
||||||
return MapSlice(tracks, func(tr *mediaprovider.Track) string {
|
return MapSlice(tracks, func(tr *mediaprovider.Track) string {
|
||||||
return tr.ID
|
return tr.ID
|
||||||
|
|||||||
@@ -110,9 +110,15 @@ func (a *FullscreenPage) OnSongChange(song, lastScrobbledIfAny *mediaprovider.Tr
|
|||||||
if a.imageLoadCancel != nil {
|
if a.imageLoadCancel != nil {
|
||||||
a.imageLoadCancel()
|
a.imageLoadCancel()
|
||||||
}
|
}
|
||||||
a.albumID = song.AlbumID
|
|
||||||
a.nowPlayingID = sharedutil.TrackIDOrEmptyStr(song)
|
a.nowPlayingID = sharedutil.TrackIDOrEmptyStr(song)
|
||||||
|
a.queueList.SetNowPlaying(a.nowPlayingID)
|
||||||
|
|
||||||
|
a.albumID = sharedutil.AlbumIDOrEmptyStr(song)
|
||||||
a.card.Update(song)
|
a.card.Update(song)
|
||||||
|
if song == nil {
|
||||||
|
a.card.SetCoverImage(nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
a.imageLoadCancel = a.im.GetFullSizeCoverArtAsync(song.CoverArtID, func(img image.Image, err error) {
|
a.imageLoadCancel = a.im.GetFullSizeCoverArtAsync(song.CoverArtID, func(img image.Image, err error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("error loading cover art: %v\n", err)
|
log.Printf("error loading cover art: %v\n", err)
|
||||||
@@ -120,7 +126,6 @@ func (a *FullscreenPage) OnSongChange(song, lastScrobbledIfAny *mediaprovider.Tr
|
|||||||
a.card.SetCoverImage(img)
|
a.card.SetCoverImage(img)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
a.queueList.SetNowPlaying(song.ID)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *FullscreenPage) Reload() {
|
func (a *FullscreenPage) Reload() {
|
||||||
|
|||||||
@@ -63,8 +63,6 @@ func NewLargeNowPlayingCard() *LargeNowPlayingCard {
|
|||||||
|
|
||||||
n.trackName.Segments[0].(*widget.TextSegment).Style.SizeName = theme.SizeNameSubHeadingText
|
n.trackName.Segments[0].(*widget.TextSegment).Style.SizeName = theme.SizeNameSubHeadingText
|
||||||
n.trackName.Truncation = fyne.TextTruncateEllipsis
|
n.trackName.Truncation = fyne.TextTruncateEllipsis
|
||||||
n.trackName.Hidden = true
|
|
||||||
n.albumName.Hidden = true
|
|
||||||
n.albumName.Truncation = fyne.TextTruncateEllipsis
|
n.albumName.Truncation = fyne.TextTruncateEllipsis
|
||||||
n.trackName.Truncation = fyne.TextTruncateEllipsis
|
n.trackName.Truncation = fyne.TextTruncateEllipsis
|
||||||
n.albumName.OnTapped = n.onAlbumNameTapped
|
n.albumName.OnTapped = n.onAlbumNameTapped
|
||||||
@@ -100,13 +98,19 @@ func (n *LargeNowPlayingCard) onSetRating(rating int) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (n *LargeNowPlayingCard) Update(track *mediaprovider.Track) {
|
func (n *LargeNowPlayingCard) Update(track *mediaprovider.Track) {
|
||||||
n.trackName.Segments[0].(*widget.TextSegment).Text = track.Name
|
if track != nil {
|
||||||
n.trackName.Hidden = track.Name == ""
|
n.trackName.Segments[0].(*widget.TextSegment).Text = track.Name
|
||||||
n.artistName.BuildSegments(track.ArtistNames, track.ArtistIDs)
|
n.artistName.BuildSegments(track.ArtistNames, track.ArtistIDs)
|
||||||
n.albumName.Text = track.Album
|
n.albumName.Text = track.Album
|
||||||
n.albumName.Hidden = track.Album == ""
|
n.rating.Rating = track.Rating
|
||||||
n.rating.Rating = track.Rating
|
n.favorite.Favorite = track.Favorite
|
||||||
n.favorite.Favorite = track.Favorite
|
} else {
|
||||||
|
n.trackName.Segments[0].(*widget.TextSegment).Text = ""
|
||||||
|
n.artistName.BuildSegments([]string{}, []string{})
|
||||||
|
n.albumName.Text = ""
|
||||||
|
n.rating.Rating = 0
|
||||||
|
n.favorite.Favorite = false
|
||||||
|
}
|
||||||
|
|
||||||
n.Refresh()
|
n.Refresh()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import (
|
|||||||
"fyne.io/fyne/v2/canvas"
|
"fyne.io/fyne/v2/canvas"
|
||||||
"fyne.io/fyne/v2/container"
|
"fyne.io/fyne/v2/container"
|
||||||
"fyne.io/fyne/v2/driver/desktop"
|
"fyne.io/fyne/v2/driver/desktop"
|
||||||
|
"fyne.io/fyne/v2/layout"
|
||||||
"fyne.io/fyne/v2/theme"
|
"fyne.io/fyne/v2/theme"
|
||||||
"fyne.io/fyne/v2/widget"
|
"fyne.io/fyne/v2/widget"
|
||||||
"github.com/dweymouth/supersonic/backend"
|
"github.com/dweymouth/supersonic/backend"
|
||||||
@@ -19,7 +20,7 @@ import (
|
|||||||
"github.com/dweymouth/supersonic/ui/util"
|
"github.com/dweymouth/supersonic/ui/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
const thumbnailSize = 60
|
const thumbnailSize = 52
|
||||||
|
|
||||||
type PlayQueueList struct {
|
type PlayQueueList struct {
|
||||||
widget.BaseWidget
|
widget.BaseWidget
|
||||||
@@ -41,7 +42,8 @@ func NewPlayQueueList(im *backend.ImageManager) *PlayQueueList {
|
|||||||
p.ExtendBaseWidget(p)
|
p.ExtendBaseWidget(p)
|
||||||
|
|
||||||
// #, Cover, Title/Artist, Time
|
// #, Cover, Title/Artist, Time
|
||||||
p.colLayout = layouts.NewColumnsLayout([]float32{40, thumbnailSize, -1, 60})
|
coverWidth := NewPlayQueueListRow(p, im, layout.NewSpacer()).cover.MinSize().Width
|
||||||
|
p.colLayout = layouts.NewColumnsLayout([]float32{40, coverWidth, -1, 60})
|
||||||
|
|
||||||
playIconResource := theme.NewThemedResource(theme.MediaPlayIcon())
|
playIconResource := theme.NewThemedResource(theme.MediaPlayIcon())
|
||||||
playIconResource.ColorName = theme.ColorNamePrimary
|
playIconResource.ColorName = theme.ColorNamePrimary
|
||||||
@@ -215,7 +217,7 @@ func NewPlayQueueListRow(playQueueList *PlayQueueList, im *backend.ImageManager,
|
|||||||
|
|
||||||
p.Content = container.New(playQueueList.colLayout,
|
p.Content = container.New(playQueueList.colLayout,
|
||||||
container.NewCenter(p.num),
|
container.NewCenter(p.num),
|
||||||
p.cover,
|
container.NewPadded(p.cover),
|
||||||
container.New(&layouts.VboxCustomPadding{ExtraPad: -15},
|
container.New(&layouts.VboxCustomPadding{ExtraPad: -15},
|
||||||
p.title, p.artist),
|
p.title, p.artist),
|
||||||
container.NewCenter(p.time),
|
container.NewCenter(p.time),
|
||||||
|
|||||||
Reference in New Issue
Block a user