diff options
Diffstat (limited to 'internal/timer/operations.go')
| -rw-r--r-- | internal/timer/operations.go | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/internal/timer/operations.go b/internal/timer/operations.go new file mode 100644 index 0000000..3035b58 --- /dev/null +++ b/internal/timer/operations.go @@ -0,0 +1,75 @@ +package timer + +import ( + "fmt" + "os" + "time" +) + +func StartTimer() (string, error) { + state, err := LoadState() + if err != nil { + return "", fmt.Errorf("error loading state: %w", err) + } + + if state.Running { + return "Timer is already running.", nil + } + + state.Running = true + state.StartTime = time.Now() + if err := state.Save(); err != nil { + return "", fmt.Errorf("error saving state: %w", err) + } + return "Timer started.", nil +} + +func StopTimer() (string, error) { + state, err := LoadState() + if err != nil { + return "", fmt.Errorf("error loading state: %w", err) + } + + if !state.Running { + return "Timer is not running.", nil + } + + state.Running = false + state.ElapsedTime += time.Since(state.StartTime) + if err := state.Save(); err != nil { + return "", fmt.Errorf("error saving state: %w", err) + } + return "Timer stopped.", nil +} + +func GetStatus() (string, error) { + state, err := LoadState() + if err != nil { + return "", fmt.Errorf("error loading state: %w", err) + } + + if state.Running { + elapsed := (state.ElapsedTime + time.Since(state.StartTime)).Round(time.Second) + return fmt.Sprintf("Status: Running\nElapsed Time: %s", elapsed), nil + } else { + elapsed := state.ElapsedTime.Round(time.Second) + return fmt.Sprintf("Status: Stopped\nElapsed Time: %s", elapsed), nil + } +} + +func ResetTimer() (string, error) { + stateFile, err := GetStateFile() + if err != nil { + return "", fmt.Errorf("error getting state file path: %w", err) + } + if err := os.Remove(stateFile); err != nil { + if !os.IsNotExist(err) { + return "", fmt.Errorf("error resetting timer: %w", err) + } + } + state := State{} + if err := state.Save(); err != nil { + return "", fmt.Errorf("error saving state: %w", err) + } + return "Timer reset.", nil +}
\ No newline at end of file |
