Skip to content

Commit 1bc6744

Browse files
author
Brian Strauch
committed
fix variable length emoji bug
1 parent d685c34 commit 1bc6744

8 files changed

Lines changed: 27 additions & 18 deletions

File tree

internal/back/back_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ func TestBackCommand(t *testing.T) {
3737
api.On("Back").Return(nil)
3838

3939
status, err := back(api)
40-
require.Equal(t, "🎵 Song\n🎤 Artist\n▶️ 0:00 [ ] 0:01\n", status)
40+
require.Equal(t, " Song\r🎵\n Artist\r🎤\n 0:00 [ ] 0:01\r▶️\n", status)
4141
require.NoError(t, err)
4242
}
4343

internal/next/next_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ func TestNextCommand(t *testing.T) {
3636
api.On("Next").Return(nil)
3737

3838
status, err := next(api)
39-
require.Equal(t, "🎵 Song\n🎤 Artist\n▶️ 0:00 [ ] 0:01\n", status)
39+
require.Equal(t, " Song\r🎵\n Artist\r🎤\n 0:00 [ ] 0:01\r▶️\n", status)
4040
require.NoError(t, err)
4141
}
4242

internal/p/p_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ func TestPCommandPlay(t *testing.T) {
3535
api.On("Play", "").Return(nil)
3636

3737
status, err := p(api)
38-
require.Equal(t, "🎵 Song\n🎤 Artist\n▶️ 0:00 [ ] 0:01\n", status)
38+
require.Equal(t, " Song\r🎵\n Artist\r🎤\n 0:00 [ ] 0:01\r▶️\n", status)
3939
require.NoError(t, err)
4040
}
4141

@@ -64,7 +64,7 @@ func TestPCommandPause(t *testing.T) {
6464
api.On("Pause").Return(nil)
6565

6666
status, err := p(api)
67-
require.Equal(t, "🎵 Song\n🎤 Artist\n0:00 [ ] 0:01\n", status)
67+
require.Equal(t, " Song\r🎵\n Artist\r🎤\n 0:00 [ ] 0:01\r\n", status)
6868
require.NoError(t, err)
6969
}
7070

internal/pause/pause_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ func TestPauseCommand(t *testing.T) {
3636
api.On("Pause").Return(nil)
3737

3838
status, err := Pause(api)
39-
require.Equal(t, "🎵 Song\n🎤 Artist\n0:00 [ ] 0:01\n", status)
39+
require.Equal(t, " Song\r🎵\n Artist\r🎤\n 0:00 [ ] 0:01\r\n", status)
4040
require.NoError(t, err)
4141
}
4242

internal/play/play_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ func TestPlayCommand(t *testing.T) {
3636
api.On("Play", "").Return(nil)
3737

3838
status, err := Play(api, "")
39-
require.Equal(t, "🎵 Song\n🎤 Artist\n▶️ 0:00 [ ] 0:01\n", status)
39+
require.Equal(t, " Song\r🎵\n Artist\r🎤\n 0:00 [ ] 0:01\r▶️\n", status)
4040
require.NoError(t, err)
4141
}
4242

internal/status/status.go

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -46,22 +46,26 @@ func status(api spotify.APIInterface) (string, error) {
4646
}
4747

4848
func Show(playback *model.Playback) string {
49-
status := fmt.Sprintf("🎵 %s\n", playback.Item.Name)
50-
49+
var artistLine string
5150
switch playback.Item.Type {
5251
case "track":
53-
status += fmt.Sprintf("🎤 %s\n", joinArtists(playback.Item.Artists))
52+
artistLine = joinArtists(playback.Item.Artists)
5453
case "episode":
55-
status += fmt.Sprintf("🎤 %s\n", playback.Item.Show.Name)
54+
artistLine = playback.Item.Show.Name
5655
}
5756

57+
var isPlayingEmoji string
5858
if playback.IsPlaying {
59-
status += "▶️ "
59+
isPlayingEmoji = "▶️"
6060
} else {
61-
status += "⏸ "
61+
isPlayingEmoji = "⏸"
6262
}
6363

64-
status += showProgressBar(playback.ProgressMs, playback.Item.DurationMs)
64+
progressBar := showProgressBar(playback.ProgressMs, playback.Item.DurationMs)
65+
66+
status := prefixLineWithEmoji("🎵", playback.Item.Name)
67+
status += prefixLineWithEmoji("🎤", artistLine)
68+
status += prefixLineWithEmoji(isPlayingEmoji, progressBar)
6569

6670
return status
6771
}
@@ -85,7 +89,7 @@ func showProgressBar(progress, duration int) string {
8589
for i := bars; i < length; i++ {
8690
status += " "
8791
}
88-
status += fmt.Sprintf("] %s\n", formatTime(duration))
92+
status += fmt.Sprintf("] %s", formatTime(duration))
8993

9094
return status
9195
}
@@ -94,3 +98,8 @@ func formatTime(ms int) string {
9498
s := ms / 1000
9599
return fmt.Sprintf("%d:%02d", s/60, s%60)
96100
}
101+
102+
func prefixLineWithEmoji(emoji, line string) string {
103+
// Carriage return jumps to start of line because emojis can have variable widths
104+
return fmt.Sprintf(" %s\r%s\n", line, emoji)
105+
}

internal/status/status_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ func TestStatusCommand(t *testing.T) {
2828
api.On("Status").Return(playback, nil)
2929

3030
status, err := status(api)
31-
require.Equal(t, "🎵 Song\n🎤 Artist\n▶️ 0:00 [ ] 0:01\n", status)
31+
require.Equal(t, " Song\r🎵\n Artist\r🎤\n 0:00 [ ] 0:01\r▶️\n", status)
3232
require.NoError(t, err)
3333
}
3434

@@ -52,7 +52,7 @@ func TestMultipleArtists(t *testing.T) {
5252
api.On("Status").Return(playback, nil)
5353

5454
status, err := status(api)
55-
require.Equal(t, "🎵 Song\n🎤 Artist 1, Artist 2\n▶️ 0:00 [ ] 0:01\n", status)
55+
require.Equal(t, " Song\r🎵\n Artist 1, Artist 2\r🎤\n 0:00 [ ] 0:01\r▶️\n", status)
5656
require.NoError(t, err)
5757
}
5858

@@ -75,7 +75,7 @@ func TestPodcast(t *testing.T) {
7575
api.On("Status").Return(playback, nil)
7676

7777
status, err := status(api)
78-
require.Equal(t, "🎵 Episode\n🎤 Podcast\n▶️ 0:00 [ ] 0:01\n", status)
78+
require.Equal(t, " Episode\r🎵\n Podcast\r🎤\n 0:00 [ ] 0:01\r▶️\n", status)
7979
require.NoError(t, err)
8080
}
8181

main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ func main() {
3131
root := &cobra.Command{
3232
Use: "spotify",
3333
Short: "Spotify for the terminal 🎵",
34-
Version: "1.5.1",
34+
Version: "1.5.2",
3535
PersistentPreRunE: promptUpdate,
3636
}
3737

0 commit comments

Comments
 (0)