From a6df85f96e618de0e38edc90e10d2b3925b5c91f Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Tue, 3 Mar 2026 23:55:42 +0200 Subject: timer: remove global state file override --- internal/timer/operations_test.go | 6 ++---- internal/timer/timer.go | 38 +++++++++++++++++++++++--------------- 2 files changed, 25 insertions(+), 19 deletions(-) (limited to 'internal/timer') 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 } -- cgit v1.2.3