Merge branch 'main' into feature/shuffle

This commit is contained in:
Siiiiinth
2026-01-24 21:18:52 +01:00
10 changed files with 135 additions and 78 deletions
+40 -17
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,11 +445,31 @@ 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
fullRefresh := false
if tm.Selected != t.Selected {
t.Selected = tm.Selected
changed = true
fullRefresh = true
}
// Update info that can change if this row is bound to
@@ -473,7 +504,7 @@ func (t *tracklistRowBase) doUpdate(tm *util.TrackListModel, rowNum int) {
t.dateAdded.Text = util.FormatDate(tr.DateAdded)
t.path.Text = tr.FilePath
t.path.SetToolTip(tr.FilePath)
changed = true
fullRefresh = true
}
// Update track num if needed
@@ -493,21 +524,20 @@ func (t *tracklistRowBase) doUpdate(tm *util.TrackListModel, rowNum int) {
} else {
str = strconv.Itoa(rowNum)
}
t.num.Text = str
changed = true
t.num.SetText(str)
}
// Update play count if needed
if tr.PlayCount != t.playCount {
t.playCount = tr.PlayCount
t.plays.Text = strconv.Itoa(int(tr.PlayCount))
changed = true
t.plays.SetText(strconv.Itoa(int(tr.PlayCount)))
}
// Render whether track is playing or not
if isPlaying := t.tracklist.nowPlayingID == tr.ID; isPlaying != t.isPlaying {
t.isPlaying = isPlaying
t.name.Segments[0].(*widget.TextSegment).Style.TextStyle.Bold = isPlaying
t.name.Refresh()
if isPlaying {
t.originalNumColContent = t.Content.(*fyne.Container).Objects[0]
@@ -515,14 +545,14 @@ func (t *tracklistRowBase) doUpdate(tm *util.TrackListModel, rowNum int) {
} else {
t.Content.(*fyne.Container).Objects[0] = t.originalNumColContent
}
changed = true
canvas.Refresh(t)
}
// Update favorite column
if tr.Favorite != t.isFavorite {
t.isFavorite = tr.Favorite
t.favorite.Objects[0].(*FavoriteIcon).Favorite = tr.Favorite
changed = true
canvas.Refresh(t.favorite)
}
// Update rating column
@@ -535,14 +565,7 @@ 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 {
if fullRefresh {
tracklistUpdateCounter.Add()
t.Refresh()
}