refactor: merge client/helper package to client

- remove helper package and move functions to client package
- merge `terminalOutput()` to `view.go`
- move `desktopNotifications()` to `cmd/client`

🤖
This commit is contained in:
Sebastian Mark 2024-11-13 09:43:58 +01:00
parent 54339dc59f
commit a5afcd2507
3 changed files with 67 additions and 76 deletions

View file

@ -1,71 +0,0 @@
package helper
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 (
output string
modePrefix string
timerOutput string
)
// header
output += colour.Sprintf("^D^4Work: %d ◊ Break: %d ◊ Longbreak: %d^R\n\n",
pomodoro.Settings.Work/60,
pomodoro.Settings.ShortBreak/60,
pomodoro.Settings.LongBreak/60,
)
//body
switch pomodoro.Mode {
case "Idle":
modePrefix = " "
timerOutput = ""
default:
modePrefix = " "
if pomodoro.Paused {
modePrefix = " "
}
minutes := pomodoro.TimeLeft / 60
seconds := pomodoro.TimeLeft % 60
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) + "\n"
output += timerOutput
return output
}

View file

@ -1,4 +1,4 @@
package helper package client
import ( import (
"fmt" "fmt"
@ -8,7 +8,7 @@ import (
) )
// Send desktop notifications on the start of each segment // Send desktop notifications on the start of each segment
func DesktopNotifications(pomodoro GoTomato.ServerMessage) { func desktopNotifications(pomodoro GoTomato.ServerMessage) {
var ( var (
duration int duration int
notification string notification string

View file

@ -1,22 +1,25 @@
package client package client
import ( import (
"fmt"
"strings" "strings"
"github.com/alecthomas/colour" "github.com/alecthomas/colour"
"git.smsvc.net/pomodoro/ChronoTomato/cmd/client/helper"
GoTomato "git.smsvc.net/pomodoro/GoTomato/pkg/models" GoTomato "git.smsvc.net/pomodoro/GoTomato/pkg/models"
"github.com/charmbracelet/bubbles/progress"
) )
var progressBar = progress.New(progress.WithDefaultGradient(), progress.WithoutPercentage())
func (a app) View() string { func (a app) View() string {
var body string var body string
var serverStatus string var serverStatus string
body = "Waiting for server message..." body = "Waiting for server message..."
if a.pomodoro != (GoTomato.ServerMessage{}) { if a.pomodoro != (GoTomato.ServerMessage{}) {
body = helper.TerminalOutput(a.pomodoro) body = terminalOutput(a.pomodoro)
helper.DesktopNotifications(a.pomodoro) desktopNotifications(a.pomodoro)
} }
serverStatus = colour.Sprintf("^D^1disconnected: %v^R\n", client.LastErr) serverStatus = colour.Sprintf("^D^1disconnected: %v^R\n", client.LastErr)
@ -29,3 +32,62 @@ func (a app) View() string {
return body + strings.Repeat("\n", height) + serverStatus + helpView return body + strings.Repeat("\n", height) + serverStatus + helpView
} }
// Return terminal output based on the passed ServerMessage
func terminalOutput(pomodoro GoTomato.ServerMessage) string {
var (
output string
modePrefix string
timerOutput string
)
// header
output += colour.Sprintf("^D^4Work: %d ◊ Break: %d ◊ Longbreak: %d^R\n\n",
pomodoro.Settings.Work/60,
pomodoro.Settings.ShortBreak/60,
pomodoro.Settings.LongBreak/60,
)
//body
switch pomodoro.Mode {
case "Idle":
modePrefix = " "
timerOutput = ""
default:
modePrefix = " "
if pomodoro.Paused {
modePrefix = " "
}
minutes := pomodoro.TimeLeft / 60
seconds := pomodoro.TimeLeft % 60
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) + "\n"
output += timerOutput
return output
}
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)
}