From 497964002f740878bdc32d9b9f0f84e331fef672 Mon Sep 17 00:00:00 2001 From: AKP Date: Wed, 13 Jul 2022 18:15:23 +0100 Subject: [PATCH] Add ticker to track info Signed-off-by: AKP --- internal/providers/audioPlayer.go | 43 +++++++++++++++++++++++-------- 1 file changed, 32 insertions(+), 11 deletions(-) diff --git a/internal/providers/audioPlayer.go b/internal/providers/audioPlayer.go index 03bc63c..004cb01 100644 --- a/internal/providers/audioPlayer.go +++ b/internal/providers/audioPlayer.go @@ -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 -} \ No newline at end of file +}