From 6b90db0d6cbc7ce34703555f0eeaa8d04c84bb76 Mon Sep 17 00:00:00 2001 From: Sebastian Mark Date: Sun, 10 Nov 2024 20:31:21 +0100 Subject: [PATCH] feat: add progress bar to timer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - add progress package for visual feedback - implement calc_percentage function for duration calculation - update TerminalOutput to include progress percentage and view 🤖 --- cmd/client/helper/terminal.go | 26 +++++++++++++++++++++++--- cmd/client/view.go | 2 +- go.mod | 1 + go.sum | 2 ++ 4 files changed, 27 insertions(+), 4 deletions(-) diff --git a/cmd/client/helper/terminal.go b/cmd/client/helper/terminal.go index 06c1713..49049c2 100644 --- a/cmd/client/helper/terminal.go +++ b/cmd/client/helper/terminal.go @@ -4,10 +4,29 @@ import ( "fmt" "github.com/alecthomas/colour" + "github.com/charmbracelet/bubbles/progress" GoTomato "git.smsvc.net/pomodoro/GoTomato/pkg/models" ) +var progressBar = progress.New(progress.WithDefaultGradient(), progress.WithoutPercentage()) + +func calc_percentage(message GoTomato.ServerMessage) float64 { + var duration float64 + + switch message.Mode { + case "Work": + duration = float64(message.Settings.Work) + case "ShortBreak": + duration = float64(message.Settings.ShortBreak) + case "LongBreak", "End": + duration = float64(message.Settings.LongBreak) + } + + timeLeft := float64(message.TimeLeft) + return 1.0 - (timeLeft / duration) +} + // Return terminal output based on the passed ServerMessage func TerminalOutput(pomodoro GoTomato.ServerMessage) string { var ( @@ -37,15 +56,16 @@ func TerminalOutput(pomodoro GoTomato.ServerMessage) string { minutes := pomodoro.TimeLeft / 60 seconds := pomodoro.TimeLeft % 60 - timerOutput = fmt.Sprintf("⏳ %02d:%02d", minutes, seconds) + timerOutput = fmt.Sprintf("⏳ %02d:%02d", minutes, seconds) + "\n" + timerOutput += progressBar.ViewAs(calc_percentage(pomodoro)) } output += fmt.Sprintf("Session: %d/%d\n", pomodoro.Session, pomodoro.Settings.Sessions, ) - output += fmt.Sprintf("%s %s\n", modePrefix, pomodoro.Mode) - output += fmt.Sprintf(timerOutput) + output += fmt.Sprintf("%s %s\n", modePrefix, pomodoro.Mode) + "\n" + output += timerOutput return output } diff --git a/cmd/client/view.go b/cmd/client/view.go index 6189530..c7e9eb7 100644 --- a/cmd/client/view.go +++ b/cmd/client/view.go @@ -25,7 +25,7 @@ func (a app) View() string { } helpView := a.help.View(a.keys) - height := 8 - strings.Count(body, "\n") - strings.Count(serverStatus, "\n") - strings.Count(helpView, "\n") + height := 10 - strings.Count(body, "\n") - strings.Count(serverStatus, "\n") - strings.Count(helpView, "\n") return body + strings.Repeat("\n", height) + serverStatus + helpView } diff --git a/go.mod b/go.mod index 2b7f407..da5bc03 100644 --- a/go.mod +++ b/go.mod @@ -15,6 +15,7 @@ require ( require ( github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect + github.com/charmbracelet/harmonica v0.2.0 // indirect github.com/charmbracelet/lipgloss v1.0.0 // indirect github.com/charmbracelet/x/ansi v0.4.5 // indirect github.com/charmbracelet/x/term v0.2.0 // indirect diff --git a/go.sum b/go.sum index c95467b..4f15eb3 100644 --- a/go.sum +++ b/go.sum @@ -8,6 +8,8 @@ github.com/charmbracelet/bubbles v0.20.0 h1:jSZu6qD8cRQ6k9OMfR1WlM+ruM8fkPWkHvQW github.com/charmbracelet/bubbles v0.20.0/go.mod h1:39slydyswPy+uVOHZ5x/GjwVAFkCsV8IIVy+4MhzwwU= github.com/charmbracelet/bubbletea v1.2.1 h1:J041h57zculJKEKf/O2pS4edXGIz+V0YvojvfGXePIk= github.com/charmbracelet/bubbletea v1.2.1/go.mod h1:viLoDL7hG4njLJSKU2gw7kB3LSEmWsrM80rO1dBJWBI= +github.com/charmbracelet/harmonica v0.2.0 h1:8NxJWRWg/bzKqqEaaeFNipOu77YR5t8aSwG4pgaUBiQ= +github.com/charmbracelet/harmonica v0.2.0/go.mod h1:KSri/1RMQOZLbw7AHqgcBycp8pgJnQMYYT8QZRqZ1Ao= github.com/charmbracelet/lipgloss v1.0.0 h1:O7VkGDvqEdGi93X+DeqsQ7PKHDgtQfF8j8/O2qFMQNg= github.com/charmbracelet/lipgloss v1.0.0/go.mod h1:U5fy9Z+C38obMs+T+tJqst9VGzlOYGj4ri9reL3qUlo= github.com/charmbracelet/log v0.4.0 h1:G9bQAcx8rWA2T3pWvx7YtPTPwgqpk7D68BX21IRW8ZM=