make tracks page show now playing + tracklist now playing refactor

This commit is contained in:
Drew Weymouth
2023-04-20 21:07:31 -07:00
parent 6b57df78a9
commit 78ed013466
2 changed files with 31 additions and 21 deletions
+18
View File
@@ -3,6 +3,7 @@ package browsing
import ( import (
"supersonic/backend" "supersonic/backend"
"supersonic/res" "supersonic/res"
"supersonic/sharedutil"
"supersonic/ui/controller" "supersonic/ui/controller"
"supersonic/ui/layouts" "supersonic/ui/layouts"
"supersonic/ui/widgets" "supersonic/ui/widgets"
@@ -11,6 +12,7 @@ import (
"fyne.io/fyne/v2/container" "fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/layout" "fyne.io/fyne/v2/layout"
"fyne.io/fyne/v2/widget" "fyne.io/fyne/v2/widget"
"github.com/dweymouth/go-subsonic/subsonic"
) )
type TracksPage struct { type TracksPage struct {
@@ -18,6 +20,8 @@ type TracksPage struct {
tracksPageState tracksPageState
nowPlayingID string
title *widget.RichText title *widget.RichText
searcher *widgets.Searcher searcher *widgets.Searcher
tracklist *widgets.Tracklist tracklist *widgets.Tracklist
@@ -71,6 +75,19 @@ func (t *TracksPage) Reload() {
t.loader = widgets.NewTracklistLoader(t.tracklist, iter) t.loader = widgets.NewTracklistLoader(t.tracklist, iter)
} }
func (t *TracksPage) OnSongChange(track *subsonic.Child, lastScrobbledIfAny *subsonic.Child) {
t.nowPlayingID = sharedutil.TrackIDOrEmptyStr(track)
t.tracklist.SetNowPlaying(t.nowPlayingID)
if t.searchTracklist != nil {
t.searchTracklist.SetNowPlaying(t.nowPlayingID)
}
playedID := sharedutil.TrackIDOrEmptyStr(lastScrobbledIfAny)
t.tracklist.IncrementPlayCount(playedID)
if t.searchTracklist != nil {
t.searchTracklist.IncrementPlayCount(playedID)
}
}
func (t *TracksPage) OnSearched(query string) { func (t *TracksPage) OnSearched(query string) {
t.searchText = query t.searchText = query
if query == "" { if query == "" {
@@ -89,6 +106,7 @@ func (t *TracksPage) doSearch(query string) {
t.searchTracklist = widgets.NewTracklist(nil) t.searchTracklist = widgets.NewTracklist(nil)
t.searchTracklist.AutoNumber = true t.searchTracklist.AutoNumber = true
t.searchTracklist.SetVisibleColumns(t.conf.TracklistColumns) t.searchTracklist.SetVisibleColumns(t.conf.TracklistColumns)
t.searchTracklist.SetNowPlaying(t.nowPlayingID)
t.contr.ConnectTracklistActions(t.searchTracklist) t.contr.ConnectTracklistActions(t.searchTracklist)
} else { } else {
t.searchTracklist.Clear() t.searchTracklist.Clear()
+13 -21
View File
@@ -71,18 +71,18 @@ type Tracklist struct {
visibleColumns []bool visibleColumns []bool
tracksMutex sync.RWMutex tracksMutex sync.RWMutex
selectionMgr util.ListSelectionManager selectionMgr util.ListSelectionManager
nowPlayingIdx int nowPlayingID string
colLayout *layouts.ColumnsLayout colLayout *layouts.ColumnsLayout
hdr *ListHeader hdr *ListHeader
list *widget.List list *widget.List
ctxMenu *fyne.Menu ctxMenu *fyne.Menu
container *fyne.Container container *fyne.Container
} }
func NewTracklist(tracks []*subsonic.Child) *Tracklist { func NewTracklist(tracks []*subsonic.Child) *Tracklist {
t := &Tracklist{Tracks: tracks, nowPlayingIdx: -1, visibleColumns: make([]bool, 11)} t := &Tracklist{Tracks: tracks, visibleColumns: make([]bool, 11)}
t.ExtendBaseWidget(t) t.ExtendBaseWidget(t)
t.selectionMgr = util.NewListSelectionManager(t.lenTracks) t.selectionMgr = util.NewListSelectionManager(t.lenTracks)
@@ -113,7 +113,7 @@ func NewTracklist(tracks []*subsonic.Child) *Tracklist {
if t.AutoNumber { if t.AutoNumber {
i = itemID + 1 i = itemID + 1
} }
tr.Update(t.TrackAt(itemID), itemID == t.nowPlayingIdx, i) tr.Update(t.TrackAt(itemID), i)
if t.OnTrackShown != nil { if t.OnTrackShown != nil {
t.OnTrackShown(itemID) t.OnTrackShown(itemID)
} }
@@ -185,15 +185,7 @@ func (t *Tracklist) setColumnVisible(colNum int, vis bool) {
} }
func (t *Tracklist) SetNowPlaying(trackID string) { func (t *Tracklist) SetNowPlaying(trackID string) {
t.nowPlayingIdx = -1 t.nowPlayingID = trackID
t.tracksMutex.RLock()
for i, tr := range t.Tracks {
if tr.ID == trackID {
t.nowPlayingIdx = i
break
}
}
t.tracksMutex.RUnlock()
t.list.Refresh() t.list.Refresh()
} }
@@ -466,7 +458,7 @@ func NewTrackRow(tracklist *Tracklist, playingIcon fyne.CanvasObject) *TrackRow
return t return t
} }
func (t *TrackRow) Update(tr *subsonic.Child, isPlaying bool, rowNum int) { func (t *TrackRow) Update(tr *subsonic.Child, rowNum int) {
// Update info that can change if this row is bound to // Update info that can change if this row is bound to
// a new track (*subsonic.Child) // a new track (*subsonic.Child)
if tr.ID != t.trackID { if tr.ID != t.trackID {
@@ -516,7 +508,7 @@ func (t *TrackRow) Update(tr *subsonic.Child, isPlaying bool, rowNum int) {
} }
// Render whether track is playing or not // Render whether track is playing or not
if isPlaying != t.isPlaying { if isPlaying := t.tracklist.nowPlayingID == tr.ID; isPlaying != t.isPlaying {
t.isPlaying = isPlaying t.isPlaying = isPlaying
t.name.Segments[0].(*widget.TextSegment).Style.TextStyle.Bold = isPlaying t.name.Segments[0].(*widget.TextSegment).Style.TextStyle.Bold = isPlaying
t.dur.Segments[0].(*widget.TextSegment).Style.TextStyle.Bold = isPlaying t.dur.Segments[0].(*widget.TextSegment).Style.TextStyle.Bold = isPlaying