Jellyfin does not support 5-star ratings - make it disableable

This commit is contained in:
Drew Weymouth
2023-11-14 09:05:02 -08:00
parent f25e748be5
commit e261eab4f3
12 changed files with 72 additions and 24 deletions
+34 -6
View File
@@ -15,15 +15,19 @@ import (
)
var (
themedResStarFilled = theme.NewThemedResource(res.ResStarFilledSvg)
themedResStarOutline = theme.NewThemedResource(res.ResStarOutlineSvg)
themedResStarFilled = theme.NewThemedResource(res.ResStarFilledSvg)
themedResStarOutline = theme.NewThemedResource(res.ResStarOutlineSvg)
themedDisabledStarOutline = theme.NewDisabledResource(res.ResStarOutlineSvg)
)
var _ fyne.Disableable = (*StarRating)(nil)
type StarRating struct {
widget.BaseWidget
Rating int
StarSize float32
IsDisabled bool
Rating int
StarSize float32
OnRatingChanged func(int)
@@ -44,7 +48,9 @@ func (s *StarRating) createContainer() {
})
var im *canvas.Image
for i := 0; i < 5; i++ {
if s.Rating > i {
if s.IsDisabled {
im = canvas.NewImageFromResource(themedDisabledStarOutline)
} else if s.Rating > i {
im = canvas.NewImageFromResource(themedResStarFilled)
} else {
im = canvas.NewImageFromResource(themedResStarOutline)
@@ -61,6 +67,9 @@ func (s *StarRating) MouseIn(e *desktop.MouseEvent) {
}
func (s *StarRating) MouseMoved(e *desktop.MouseEvent) {
if s.IsDisabled {
return
}
hoverRating := int(math.Ceil(5 * float64(e.Position.X/s.Size().Width)))
if s.mouseHoverRating != hoverRating {
s.holdRating = false
@@ -69,7 +78,24 @@ func (s *StarRating) MouseMoved(e *desktop.MouseEvent) {
}
}
func (s *StarRating) Disable() {
s.IsDisabled = true
s.Refresh()
}
func (s *StarRating) Enable() {
s.IsDisabled = false
s.Refresh()
}
func (s *StarRating) Disabled() bool {
return s.IsDisabled
}
func (s *StarRating) MouseOut() {
if s.IsDisabled {
return
}
s.mouseHoverRating = 0
s.holdRating = false
s.Refresh()
@@ -105,7 +131,9 @@ func (s *StarRating) Refresh() {
for i := 0; i < 5; i++ {
im := s.container.Objects[i].(*canvas.Image)
im.SetMinSize(fyne.NewSize(s.StarSize, s.StarSize))
if rating > i {
if s.IsDisabled {
im.Resource = themedDisabledStarOutline
} else if rating > i {
im.Resource = themedResStarFilled
} else {
im.Resource = themedResStarOutline
+5
View File
@@ -66,6 +66,9 @@ type TracklistOptions struct {
// Disables sorting the tracklist by clicking individual columns.
DisableSorting bool
// Disables the five star rating widget.
DisableRating bool
}
type Tracklist struct {
@@ -732,6 +735,7 @@ func NewTrackRow(tracklist *Tracklist, playingIcon fyne.CanvasObject) *TrackRow
favorite.OnTapped = t.toggleFavorited
t.favorite = container.NewCenter(favorite)
t.rating = NewStarRating()
t.rating.IsDisabled = t.tracklist.Options.DisableRating
t.rating.StarSize = 16
t.rating.OnRatingChanged = t.setTrackRating
t.plays = newTrailingAlignLabel()
@@ -842,6 +846,7 @@ func (t *TrackRow) Update(tm *trackModel, rowNum int) {
t.dur.Hidden = !t.tracklist.visibleColumns[ColNumber(ColumnTime)]
t.year.Hidden = !t.tracklist.visibleColumns[ColNumber(ColumnYear)]
t.favorite.Hidden = !t.tracklist.visibleColumns[ColNumber(ColumnFavorite)]
t.rating.IsDisabled = t.tracklist.Options.DisableRating
t.rating.Hidden = !t.tracklist.visibleColumns[ColNumber(ColumnRating)]
t.plays.Hidden = !t.tracklist.visibleColumns[ColNumber(ColumnPlays)]
t.bitrate.Hidden = !t.tracklist.visibleColumns[ColNumber(ColumnBitrate)]