summaryrefslogtreecommitdiff
path: root/internal/timer
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-03-03 23:55:42 +0200
committerPaul Buetow <paul@buetow.org>2026-03-03 23:55:42 +0200
commita6df85f96e618de0e38edc90e10d2b3925b5c91f (patch)
tree8e23cf667e7ab36e08e55a5077c58c73f880feda /internal/timer
parent09b8aa9d74df0ef7d50858cd398efc8a952a1aad (diff)
timer: remove global state file override
Diffstat (limited to 'internal/timer')
-rw-r--r--internal/timer/operations_test.go6
-rw-r--r--internal/timer/timer.go38
2 files changed, 25 insertions, 19 deletions
diff --git a/internal/timer/operations_test.go b/internal/timer/operations_test.go
index 557631c..efdc492 100644
--- a/internal/timer/operations_test.go
+++ b/internal/timer/operations_test.go
@@ -13,10 +13,8 @@ import (
func setup(t *testing.T) {
t.Helper()
tempDir := t.TempDir()
- StateFilePathOverride = filepath.Join(tempDir, ".timr_state")
- t.Cleanup(func() {
- StateFilePathOverride = ""
- })
+ t.Setenv("XDG_CONFIG_HOME", tempDir)
+ t.Setenv("HOME", tempDir)
}
func TestStartTimer(t *testing.T) {
diff --git a/internal/timer/timer.go b/internal/timer/timer.go
index 272233a..0e29199 100644
--- a/internal/timer/timer.go
+++ b/internal/timer/timer.go
@@ -4,6 +4,7 @@ import (
"encoding/json"
"os"
"path/filepath"
+ "strings"
"time"
)
@@ -11,33 +12,36 @@ const (
stateFile = ".timr_state"
)
-// StateFilePathOverride is used by tests to override the state file path.
-var StateFilePathOverride string
-
-func SetStateFilePathOverride(path string) {
- StateFilePathOverride = path
-}
-
type State struct {
- StartTime time.Time
- ElapsedTime time.Duration
- Running bool
+ StartTime time.Time
+ ElapsedTime time.Duration
+ Running bool
}
-func GetStateFile() (string, error) {
- if StateFilePathOverride != "" {
- return StateFilePathOverride, nil
+func resolveStateFilePath(path string) (string, error) {
+ if strings.TrimSpace(path) != "" {
+ return path, nil
}
+
configDir, err := os.UserConfigDir()
if err != nil {
return "", err
}
+
return filepath.Join(configDir, "timr", stateFile), nil
}
+func GetStateFile() (string, error) {
+ return resolveStateFilePath("")
+}
+
func LoadState() (State, error) {
+ return LoadStateAt("")
+}
+
+func LoadStateAt(path string) (State, error) {
var state State
- stateFilePath, err := GetStateFile()
+ stateFilePath, err := resolveStateFilePath(path)
if err != nil {
return state, err
}
@@ -55,12 +59,16 @@ func LoadState() (State, error) {
}
func (s *State) Save() error {
+ return s.SaveAt("")
+}
+
+func (s *State) SaveAt(path string) error {
data, err := json.Marshal(s)
if err != nil {
return err
}
- stateFilePath, err := GetStateFile()
+ stateFilePath, err := resolveStateFilePath(path)
if err != nil {
return err
}