Add ticker to track info

Signed-off-by: AKP <tom@tdpain.net>
This commit is contained in:
akp 2022-07-13 18:15:23 +01:00
parent 4943ebd67d
commit 497964002f
No known key found for this signature in database
GPG key ID: AA5726202C8879B7

View file

@ -22,14 +22,19 @@ const (
type AudioPlayer struct {
ShowTextOnPause bool
MaxLabelLen int
TickerSteps int
name string
lastText string
tickerCursor int
}
func NewAudioPlayer(maxLabelLength int) *AudioPlayer {
return &AudioPlayer{
MaxLabelLen: maxLabelLength,
name: "audioPlayer",
TickerSteps: 10,
name: "audioPlayer",
}
}
@ -93,11 +98,31 @@ func (g *AudioPlayer) getInfo() (*playingAudioInfo, error) {
return info, nil
}
func (g *AudioPlayer) TrimString(x string) string {
if len(x) > g.MaxLabelLen {
x = x[:g.MaxLabelLen] + "..."
func (g *AudioPlayer) AnimateTicker(x string) string {
if len(x) <= g.MaxLabelLen {
g.lastText = x
return x
}
return x
mod := x + " "
if mod != g.lastText {
g.tickerCursor = 0
g.lastText = mod
return mod[:g.MaxLabelLen]
}
g.tickerCursor += g.TickerSteps
if l := len(mod); g.tickerCursor >= l {
g.tickerCursor -= l
}
if g.tickerCursor + g.MaxLabelLen > len(mod) {
diff := len(mod) - g.tickerCursor
fmt.Println("diff", diff, "cursor", g.tickerCursor)
return mod[g.tickerCursor:] + mod[:g.MaxLabelLen-diff]
}
return mod[g.tickerCursor:g.tickerCursor+g.MaxLabelLen]
}
func (g *AudioPlayer) Block(colors *i3bar.ColorSet) (*i3bar.Block, error) {
@ -110,20 +135,16 @@ func (g *AudioPlayer) Block(colors *i3bar.ColorSet) (*i3bar.Block, error) {
b.Name = g.name
b.FullText = musicNoteString
b.ShortText = musicNoteString
if info.Status == playerStatusPlaying || (info.Status == playerStatusPaused && g.ShowTextOnPause) {
b.ShortText += " "
b.FullText += " "
if info.Status == playerStatusPaused {
b.ShortText += pausedIconString + " "
b.FullText += pausedIconString + " "
}
b.ShortText += g.TrimString(info.Track)
b.FullText += g.TrimString(fmt.Sprintf("%s - %s", info.Track, info.Artist))
b.FullText += g.AnimateTicker(fmt.Sprintf("%s - %s", info.Track, info.Artist))
}
return b, nil
@ -140,4 +161,4 @@ func (g *AudioPlayer) OnClick(event *i3bar.ClickEvent) bool {
_, _ = runCommand(playerctlExecutable, "play-pause")
time.Sleep(time.Millisecond * 50)
return true
}
}