add year column to tracklist

This commit is contained in:
Drew Weymouth
2023-02-19 12:36:23 -08:00
parent 76a8742317
commit 631ef947e5
+25 -13
View File
@@ -22,6 +22,7 @@ const (
ColumnArtist = "Artist" ColumnArtist = "Artist"
ColumnAlbum = "Album" ColumnAlbum = "Album"
ColumnTime = "Time" ColumnTime = "Time"
ColumnYear = "Year"
ColumnPlays = "Plays" ColumnPlays = "Plays"
ColumnBitrate = "Bitrate" ColumnBitrate = "Bitrate"
) )
@@ -53,11 +54,11 @@ type Tracklist struct {
} }
func NewTracklist(tracks []*subsonic.Child) *Tracklist { func NewTracklist(tracks []*subsonic.Child) *Tracklist {
t := &Tracklist{Tracks: tracks, nowPlayingIdx: -1, visibleColumns: make([]bool, 7)} t := &Tracklist{Tracks: tracks, nowPlayingIdx: -1, visibleColumns: make([]bool, 8)}
t.ExtendBaseWidget(t) t.ExtendBaseWidget(t)
t.selectionMgr = util.NewListSelectionManager(func() int { return len(t.Tracks) }) t.selectionMgr = util.NewListSelectionManager(func() int { return len(t.Tracks) })
t.colLayout = layouts.NewColumnsLayout([]float32{35, -1, -1, -1, 60, 65, 75}) t.colLayout = layouts.NewColumnsLayout([]float32{35, -1, -1, -1, 60, 60, 65, 75})
t.buildHeader() t.buildHeader()
t.hdr.OnColumnVisibilityChanged = t.setColumnVisible t.hdr.OnColumnVisibilityChanged = t.setColumnVisible
playingIcon := container.NewCenter(container.NewHBox(NewHSpace(2), widget.NewIcon(theme.MediaPlayIcon()))) playingIcon := container.NewCenter(container.NewHBox(NewHSpace(2), widget.NewIcon(theme.MediaPlayIcon())))
@@ -86,13 +87,14 @@ func NewTracklist(tracks []*subsonic.Child) *Tracklist {
func (t *Tracklist) buildHeader() { func (t *Tracklist) buildHeader() {
t.hdr = NewListHeader([]ListColumn{ t.hdr = NewListHeader([]ListColumn{
{"#", true, false}, {Text: "#", AlignTrailing: true, CanToggleVisible: false},
{"Title", false, false}, {Text: "Title", AlignTrailing: false, CanToggleVisible: false},
{"Artist", false, true}, {Text: "Artist", AlignTrailing: false, CanToggleVisible: true},
{"Album", false, true}, {Text: "Album", AlignTrailing: false, CanToggleVisible: true},
{"Time", true, true}, {Text: "Time", AlignTrailing: true, CanToggleVisible: true},
{"Plays", true, true}, {Text: "Year", AlignTrailing: true, CanToggleVisible: true},
{"Bitrate", true, true}}, {Text: "Plays", AlignTrailing: true, CanToggleVisible: true},
{Text: "Bitrate", AlignTrailing: true, CanToggleVisible: true}},
t.colLayout) t.colLayout)
} }
@@ -264,10 +266,12 @@ func ColNumber(colName string) int {
return 3 return 3
case ColumnTime: case ColumnTime:
return 4 return 4
case ColumnPlays: case ColumnYear:
return 5 return 5
case ColumnBitrate: case ColumnPlays:
return 6 return 6
case ColumnBitrate:
return 7
default: default:
log.Printf("error: Tracklist: invalid column name %s", colName) log.Printf("error: Tracklist: invalid column name %s", colName)
return -100 return -100
@@ -284,8 +288,10 @@ func colName(i int) string {
case 4: case 4:
return ColumnTime return ColumnTime
case 5: case 5:
return ColumnPlays return ColumnYear
case 6: case 6:
return ColumnPlays
case 7:
return ColumnBitrate return ColumnBitrate
default: default:
return "" return ""
@@ -308,6 +314,7 @@ type TrackRow struct {
artist *widget.RichText artist *widget.RichText
album *widget.RichText album *widget.RichText
dur *widget.RichText dur *widget.RichText
year *widget.RichText
bitrate *widget.RichText bitrate *widget.RichText
plays *widget.RichText plays *widget.RichText
@@ -333,6 +340,8 @@ func NewTrackRow(tracklist *Tracklist, playingIcon fyne.CanvasObject) *TrackRow
t.album.Wrapping = fyne.TextTruncate t.album.Wrapping = fyne.TextTruncate
t.dur = widget.NewRichTextWithText("") t.dur = widget.NewRichTextWithText("")
t.dur.Segments[0].(*widget.TextSegment).Style.Alignment = fyne.TextAlignTrailing t.dur.Segments[0].(*widget.TextSegment).Style.Alignment = fyne.TextAlignTrailing
t.year = widget.NewRichTextWithText("")
t.year.Segments[0].(*widget.TextSegment).Style.Alignment = fyne.TextAlignTrailing
t.plays = widget.NewRichTextWithText("") t.plays = widget.NewRichTextWithText("")
t.plays.Segments[0].(*widget.TextSegment).Style.Alignment = fyne.TextAlignTrailing t.plays.Segments[0].(*widget.TextSegment).Style.Alignment = fyne.TextAlignTrailing
t.bitrate = widget.NewRichTextWithText("") t.bitrate = widget.NewRichTextWithText("")
@@ -342,7 +351,7 @@ func NewTrackRow(tracklist *Tracklist, playingIcon fyne.CanvasObject) *TrackRow
t.selectionRect.Hidden = true t.selectionRect.Hidden = true
t.container = container.NewMax(t.selectionRect, t.container = container.NewMax(t.selectionRect,
container.New(tracklist.colLayout, container.New(tracklist.colLayout,
t.num, t.name, t.artist, t.album, t.dur, t.plays, t.bitrate)) t.num, t.name, t.artist, t.album, t.dur, t.year, t.plays, t.bitrate))
return t return t
} }
@@ -360,6 +369,7 @@ func (t *TrackRow) Update(tr *subsonic.Child, isPlaying bool, rowNum int) {
t.artist.Segments[0].(*widget.TextSegment).Text = tr.Artist t.artist.Segments[0].(*widget.TextSegment).Text = tr.Artist
t.album.Segments[0].(*widget.TextSegment).Text = tr.Album t.album.Segments[0].(*widget.TextSegment).Text = tr.Album
t.dur.Segments[0].(*widget.TextSegment).Text = util.SecondsToTimeString(float64(tr.Duration)) t.dur.Segments[0].(*widget.TextSegment).Text = util.SecondsToTimeString(float64(tr.Duration))
t.year.Segments[0].(*widget.TextSegment).Text = strconv.Itoa(tr.Year)
t.plays.Segments[0].(*widget.TextSegment).Text = strconv.Itoa(int(tr.PlayCount)) t.plays.Segments[0].(*widget.TextSegment).Text = strconv.Itoa(int(tr.PlayCount))
t.bitrate.Segments[0].(*widget.TextSegment).Text = strconv.Itoa(tr.BitRate) t.bitrate.Segments[0].(*widget.TextSegment).Text = strconv.Itoa(tr.BitRate)
@@ -367,6 +377,7 @@ func (t *TrackRow) Update(tr *subsonic.Child, isPlaying bool, rowNum int) {
t.artist.Segments[0].(*widget.TextSegment).Style.TextStyle.Bold = isPlaying t.artist.Segments[0].(*widget.TextSegment).Style.TextStyle.Bold = isPlaying
t.album.Segments[0].(*widget.TextSegment).Style.TextStyle.Bold = isPlaying t.album.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
t.year.Segments[0].(*widget.TextSegment).Style.TextStyle.Bold = isPlaying
t.plays.Segments[0].(*widget.TextSegment).Style.TextStyle.Bold = isPlaying t.plays.Segments[0].(*widget.TextSegment).Style.TextStyle.Bold = isPlaying
t.bitrate.Segments[0].(*widget.TextSegment).Style.TextStyle.Bold = isPlaying t.bitrate.Segments[0].(*widget.TextSegment).Style.TextStyle.Bold = isPlaying
@@ -380,6 +391,7 @@ func (t *TrackRow) Update(tr *subsonic.Child, isPlaying bool, rowNum int) {
t.artist.Hidden = !t.tracklist.visibleColumns[ColNumber(ColumnArtist)] t.artist.Hidden = !t.tracklist.visibleColumns[ColNumber(ColumnArtist)]
t.album.Hidden = !t.tracklist.visibleColumns[ColNumber(ColumnAlbum)] t.album.Hidden = !t.tracklist.visibleColumns[ColNumber(ColumnAlbum)]
t.dur.Hidden = !t.tracklist.visibleColumns[ColNumber(ColumnTime)] t.dur.Hidden = !t.tracklist.visibleColumns[ColNumber(ColumnTime)]
t.year.Hidden = !t.tracklist.visibleColumns[ColNumber(ColumnYear)]
t.plays.Hidden = !t.tracklist.visibleColumns[ColNumber(ColumnPlays)] t.plays.Hidden = !t.tracklist.visibleColumns[ColNumber(ColumnPlays)]
t.bitrate.Hidden = !t.tracklist.visibleColumns[ColNumber(ColumnBitrate)] t.bitrate.Hidden = !t.tracklist.visibleColumns[ColNumber(ColumnBitrate)]