commit fe47b0f799a7b9820db2aa85de38b87f2e0cc1df
parent bb9e6e1b8cba396ab309d94d586d8ddb00f9cc13
Author: Tomas Nemec <nemi@skaut.cz>
Date: Tue, 28 Feb 2023 15:23:22 +0100
update
Diffstat:
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)
}