Fix refreshing of lyrics viewer on song change

This commit is contained in:
Drew Weymouth
2024-04-19 08:12:48 -07:00
parent 4861ad4532
commit 3045fcf94e
2 changed files with 29 additions and 12 deletions
+5 -4
View File
@@ -203,17 +203,18 @@ func (a *NowPlayingPage) OnSongChange(song, lastScrobbledIfAny *mediaprovider.Tr
} }
}) })
go func() {
if lp, ok := a.sm.Server.(mediaprovider.LyricsProvider); ok { if lp, ok := a.sm.Server.(mediaprovider.LyricsProvider); ok {
lyrics, err := lp.GetLyrics(song) go func() {
if err == nil { if lyrics, err := lp.GetLyrics(song); err == nil {
a.lyricsViewer.SetLyrics(lyrics) a.lyricsViewer.SetLyrics(lyrics)
} else { } else {
log.Printf("Error fetching lyrics: %v", err) log.Printf("Error fetching lyrics: %v", err)
a.lyricsViewer.SetLyrics(nil) a.lyricsViewer.SetLyrics(nil)
} }
}
}() }()
} else {
a.lyricsViewer.SetLyrics(nil)
}
} }
func (a *NowPlayingPage) OnPlayQueueChange() { func (a *NowPlayingPage) OnPlayQueueChange() {
+17 -1
View File
@@ -14,8 +14,17 @@ type LyricsViewer struct {
unsyncedViewer *widget.RichText unsyncedViewer *widget.RichText
container *container.Scroll container *container.Scroll
currentView lyricView
} }
type lyricView int
const (
lyricViewEmpty lyricView = iota
lyricViewUnsynced
lyricViewSynced
)
func NewLyricsViewer() *LyricsViewer { func NewLyricsViewer() *LyricsViewer {
l := &LyricsViewer{noLyricsLabel: widget.Label{ l := &LyricsViewer{noLyricsLabel: widget.Label{
Text: "Lyrics not available", Text: "Lyrics not available",
@@ -27,8 +36,11 @@ func NewLyricsViewer() *LyricsViewer {
func (l *LyricsViewer) SetLyrics(lyrics *mediaprovider.Lyrics) { func (l *LyricsViewer) SetLyrics(lyrics *mediaprovider.Lyrics) {
if lyrics == nil || len(lyrics.Lines) == 0 { if lyrics == nil || len(lyrics.Lines) == 0 {
if l.currentView != lyricViewEmpty {
l.container.Content = &l.noLyricsLabel l.container.Content = &l.noLyricsLabel
l.currentView = lyricViewEmpty
l.Refresh() l.Refresh()
}
return return
} }
@@ -36,7 +48,7 @@ func (l *LyricsViewer) SetLyrics(lyrics *mediaprovider.Lyrics) {
l.unsyncedViewer = widget.NewRichText() l.unsyncedViewer = widget.NewRichText()
l.unsyncedViewer.Wrapping = fyne.TextWrapWord l.unsyncedViewer.Wrapping = fyne.TextWrapWord
} }
l.unsyncedViewer.Segments = l.unsyncedViewer.Segments[:0] l.unsyncedViewer.Segments = nil
for _, line := range lyrics.Lines { for _, line := range lyrics.Lines {
ts := &widget.TextSegment{Text: line.Text} ts := &widget.TextSegment{Text: line.Text}
ts.Style.Alignment = fyne.TextAlignCenter ts.Style.Alignment = fyne.TextAlignCenter
@@ -44,9 +56,13 @@ func (l *LyricsViewer) SetLyrics(lyrics *mediaprovider.Lyrics) {
ts.Style.Inline = false ts.Style.Inline = false
l.unsyncedViewer.Segments = append(l.unsyncedViewer.Segments, ts) l.unsyncedViewer.Segments = append(l.unsyncedViewer.Segments, ts)
} }
l.unsyncedViewer.Refresh()
if l.currentView != lyricViewUnsynced {
l.container.Content = l.unsyncedViewer l.container.Content = l.unsyncedViewer
l.currentView = lyricViewUnsynced
l.Refresh() l.Refresh()
} }
}
func (l *LyricsViewer) CreateRenderer() fyne.WidgetRenderer { func (l *LyricsViewer) CreateRenderer() fyne.WidgetRenderer {
return widget.NewSimpleRenderer(l.container) return widget.NewSimpleRenderer(l.container)