optimize tracklist rendering

This commit is contained in:
Drew Weymouth
2026-01-23 18:30:32 -08:00
parent cccc8a7de8
commit de7c49eca3
+31 -7
View File
@@ -410,6 +410,17 @@ func (t *tracklistRowBase) TrackID() string {
}
func (t *tracklistRowBase) Update(tm *util.TrackListModel, rowNum int, onUpdate func()) {
// Show only columns configured to be visible
for i := 2; i < len(t.tracklist.columns); i++ {
t.setColVisibility(i, !t.tracklist.visibleColumns[i])
}
// Ealy return if nothing else needs updating
if !t.needsUpdate(tm, rowNum) {
return
}
// Throttle updates when many are happening in a short time
if tracklistUpdateCounter.NumEventsSince(time.Now().Add(-300*time.Millisecond)) > 10 {
t.doUpdate(&emptyTrack, 1)
if t.nextUpdateModel == nil {
@@ -434,6 +445,26 @@ func (t *tracklistRowBase) Update(tm *util.TrackListModel, rowNum int, onUpdate
}
}
func (t *tracklistRowBase) needsUpdate(tm *util.TrackListModel, rowNum int) bool {
tr := tm.Track()
if tm.Selected != t.Selected {
return true
}
if t.trackID != tr.ID || t.trackNum != rowNum {
return true
}
if t.playCount != tr.PlayCount || t.isFavorite != tr.Favorite || t.rating.Rating != tr.Rating {
return true
}
if t.rating.IsDisabled != t.tracklist.Options.DisableRating {
return true
}
if isPlaying := t.tracklist.nowPlayingID == tr.ID; isPlaying != t.isPlaying {
return true
}
return false
}
func (t *tracklistRowBase) doUpdate(tm *util.TrackListModel, rowNum int) {
changed := false
if tm.Selected != t.Selected {
@@ -535,13 +566,6 @@ func (t *tracklistRowBase) doUpdate(tm *util.TrackListModel, rowNum int) {
t.rating.Refresh()
}
// Show only columns configured to be visible
for i := 2; i < len(t.tracklist.columns); i++ {
if ch := t.setColVisibility(i, !t.tracklist.visibleColumns[i]); ch {
changed = true
}
}
if changed {
tracklistUpdateCounter.Add()
t.Refresh()