tme

Toggl like Time Manager
git clone git://gtms.dev:tme
Log | Files | Refs

commit fe47b0f799a7b9820db2aa85de38b87f2e0cc1df
parent bb9e6e1b8cba396ab309d94d586d8ddb00f9cc13
Author: Tomas Nemec <nemi@skaut.cz>
Date:   Tue, 28 Feb 2023 15:23:22 +0100

update

Diffstat:
Mcommand.go | 45+++++++++++++++++++++++++++------------------
Mentry.go | 7-------
Mentry_test.go | 12++++++------
Mrepository.go | 6+++---
Mrepository_test.go | 4++--
Mtime_context.go | 23+++++++++++------------
Mtime_context_test.go | 4++--
7 files changed, 51 insertions(+), 50 deletions(-)

diff --git a/command.go b/command.go @@ -9,9 +9,9 @@ import ( ) type Command struct { - repository FSRepository - args []string - entryTimeContext *TimeContext + repository FSRepository + args []string + timeContext *TimeContext } func (c *Command) nextArg() (string, error) { @@ -40,13 +40,13 @@ func (c Command) Add() { startArg, _ := c.nextArg() stopArg, _ := c.nextArg() - start, err := c.entryTimeContext.ParseArg(startArg) + start, err := c.timeContext.ParseArgDir(startArg, false) if err != nil { fmt.Fprintf(os.Stderr, "[start] time (%s) could not be parsed\n", startArg) os.Exit(1) } - stop, err := tryParseRelative(*c.entryTimeContext, start, stopArg) + stop, err := tryParseRelative(*c.timeContext, start, stopArg) if err != nil { fmt.Fprintf(os.Stderr, "[stop] time (%s) could not be parsed\n", stopArg) os.Exit(1) @@ -80,7 +80,7 @@ func (c Command) Start() { startArg, err := c.nextArg() start := time.Now() if err == nil { - start, err = c.entryTimeContext.ParseArg(startArg) + start, err = c.timeContext.ParseArgDir(startArg, false) if err != nil { fmt.Fprintf(os.Stderr, "[start] time (%s) could not be parsed\n", startArg) os.Exit(1) @@ -106,7 +106,7 @@ func (c Command) Stop() { groupArg, _ := c.nextArg() group := NewGroup(groupArg) - entry, err := c.repository.RunningEntry(group, c.entryTimeContext) + runningEntry, err := c.repository.RunningEntry(group, c.timeContext) if err != nil { fmt.Fprintf(os.Stderr, "no entry running in %q\n", groupArg) os.Exit(1) @@ -115,22 +115,31 @@ func (c Command) Stop() { stop := time.Now() stopArg, err := c.nextArg() if err == nil { - stop, err = tryParseRelative(*c.entryTimeContext, entry.TimeRange.Start, stopArg) + stop, err = tryParseRelative(*c.timeContext, runningEntry.TimeRange.Start, stopArg) if err != nil { fmt.Fprintf(os.Stderr, "[start] time (%s) could not be parsed\n", stopArg) os.Exit(1) } } - entry.Complete(stop) + completedEntry, err := NewCompletedEntry(runningEntry.TimeRange.Start, stop) + if err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } - if c.repository.ExistsEntry(group, entry) { + if c.repository.ExistsEntry(group, completedEntry) { fmt.Fprintln(os.Stderr, "entry already created") os.Exit(1) } - c.repository.Remove(group, entry) - c.repository.Save(group, entry) + err = c.repository.Save(group, completedEntry) + if err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } + + c.repository.Remove(group, runningEntry) } func (c Command) Ls() { @@ -145,7 +154,7 @@ func (c Command) Ls() { } group := NewGroup(rootPath) - formatEntries(c.repository, group, c.entryTimeContext) + formatEntries(c.repository, group, c.timeContext) } func (c Command) Lsr() { @@ -166,7 +175,7 @@ func (c Command) Lsr() { } for _, group := range groups { - formatEntries(c.repository, group, c.entryTimeContext) + formatEntries(c.repository, group, c.timeContext) } } @@ -183,7 +192,7 @@ func (c Command) Report() { // } sinceArg, _ := c.nextArg() - sinceTime, err := c.entryTimeContext.ParseArg(sinceArg) + sinceTime, err := c.timeContext.ParseArgDir(sinceArg, false) if err != nil { fmt.Fprintf(os.Stderr, "[since] time (%s) could not be parsed\n", sinceArg) os.Exit(1) @@ -192,7 +201,7 @@ func (c Command) Report() { untilTime := time.Now() untilArgs, err := c.nextArg() if err == nil { - untilTime, err = c.entryTimeContext.ParseArgRight(untilArgs) + untilTime, err = c.timeContext.ParseArgDir(untilArgs, true) if err != nil { fmt.Fprintf(os.Stderr, "[until] time (%s) could not be parsed\n", sinceArg) os.Exit(1) @@ -208,7 +217,7 @@ func (c Command) Report() { var atLeastOneEntry bool var totalDuration time.Duration for _, group := range groups { - entries, err := c.repository.ListEntries(group, c.entryTimeContext) + entries, err := c.repository.ListEntries(group, c.timeContext) if err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(1) @@ -268,7 +277,7 @@ func tryParseRelative(timeContext TimeContext, start time.Time, rawStop string) if strings.IndexAny(rawStop, "+") == 0 { stop, err = timeContext.ParseArgRelative(start, rawStop) } else { - stop, err = timeContext.ParseArg(rawStop) + stop, err = timeContext.ParseArgDir(rawStop, false) } return stop, err } diff --git a/entry.go b/entry.go @@ -24,10 +24,3 @@ func NewRunningEntry(start time.Time) Entry { func (e Entry) Duration() time.Duration { return e.TimeRange.Stop.Sub(e.TimeRange.Start) } - -func (e *Entry) Complete(stop time.Time) error { - timeRange, err := NewTimeRange(e.TimeRange.Start, stop) - e.TimeRange = timeRange - e.Completed = true - return err -} diff --git a/entry_test.go b/entry_test.go @@ -6,8 +6,8 @@ func TestEntry(t *testing.T) { entryTime := NewTimeToday() t.Run("positive duration should pass", func(b *testing.T) { - start, _ := entryTime.ParseArg("5:00") - stop, _ := entryTime.ParseArg("6:00") + start, _ := entryTime.ParseArgDir("5:00", false) + stop, _ := entryTime.ParseArgDir("6:00", true) _, err := NewCompletedEntry(start, stop) if err != nil { b.Error(err) @@ -15,8 +15,8 @@ func TestEntry(t *testing.T) { }) t.Run("zero duration should fail", func(b *testing.T) { - start, _ := entryTime.ParseArg("6:00") - stop, _ := entryTime.ParseArg("6:00") + start, _ := entryTime.ParseArgDir("6:00", false) + stop, _ := entryTime.ParseArgDir("6:00", true) _, err := NewCompletedEntry(start, stop) if err == nil { b.Error(err) @@ -24,8 +24,8 @@ func TestEntry(t *testing.T) { }) t.Run("negative duration should fail", func(b *testing.T) { - start, _ := entryTime.ParseArg("6:00") - stop, _ := entryTime.ParseArg("5:00") + start, _ := entryTime.ParseArgDir("6:00", false) + stop, _ := entryTime.ParseArgDir("5:00", true) _, err := NewCompletedEntry(start, stop) if err == nil { b.Error(err) diff --git a/repository.go b/repository.go @@ -133,9 +133,9 @@ func (repo FSRepository) ListGroups(groupPath string) ([]Group, error) { if path == groupPath { return nil } - groupPath := strings.TrimPrefix(path, repo.rootPath) - groupPath = strings.TrimPrefix(groupPath, string(os.PathSeparator)) - group := NewGroup(groupPath) + gp := strings.TrimPrefix(path, repo.rootPath) + gp = strings.TrimPrefix(gp, string(os.PathSeparator)) + group := NewGroup(gp) groups = append(groups, group) } return nil diff --git a/repository_test.go b/repository_test.go @@ -47,8 +47,8 @@ func TestSave(t *testing.T) { } func createEntry(timeContext *TimeContext, s string, st string) Entry { - start, _ := timeContext.ParseArg(s) - stop, _ := timeContext.ParseArgRight(st) + start, _ := timeContext.ParseArgDir(s, false) + stop, _ := timeContext.ParseArgDir(st, true) entry, _ := NewCompletedEntry(start, stop) return entry } diff --git a/time_context.go b/time_context.go @@ -28,20 +28,10 @@ func (et *TimeContext) ParseArgRelative(start time.Time, raw string) (time.Time, return start.Add(dur), err } -func (et *TimeContext) ParseArg(raw string) (time.Time, error) { - return et.ParseArgDir(raw, false) -} - -func (et *TimeContext) ParseArgRight(raw string) (time.Time, error) { - return et.ParseArgDir(raw, true) -} - // TODO(tms) 11.02.23: Simplify func (et *TimeContext) ParseArgDir(raw string, shiftRight bool) (time.Time, error) { parts := strings.Split(raw, " ") - hour := et.context.Hour() - min := et.context.Minute() - sec := et.context.Second() + hour, min, sec := et.context.Clock() year, mon, day := et.context.Date() zeroTime := 0 @@ -146,7 +136,16 @@ func (et *TimeContext) ParseArgDir(raw string, shiftRight bool) (time.Time, erro } } - return time.Date(year, mon, day, hour, min, sec, 0, et.context.Location()), nil + return time.Date( + year, + mon, + day, + hour, + min, + sec, + 0, + et.context.Location(), + ), nil } func (et *TimeContext) ParseEntry(raw string) (time.Time, error) { diff --git a/time_context_test.go b/time_context_test.go @@ -14,7 +14,7 @@ func TestParseArg(t *testing.T) { b.Helper() tmeTime := NewTime(context) expected, _ := time.Parse(layout, expected) - parsed, err := tmeTime.ParseArg(raw) + parsed, err := tmeTime.ParseArgDir(raw, false) if err != nil { b.Fatal(err) } @@ -53,7 +53,7 @@ func TestParseRelative(t *testing.T) { tmeTime := NewTime(context) expected, _ := time.Parse(layout, expected) - start, err := tmeTime.ParseArg(raw) + start, err := tmeTime.ParseArgDir(raw, false) if err != nil { b.Fatal(err) }