running_entry.go (1228B)
1 package main 2 3 import ( 4 "fmt" 5 "os" 6 "path" 7 "strings" 8 "time" 9 ) 10 11 type RunningEntry struct { 12 Start time.Time 13 } 14 15 func NewRunningEntry(start time.Time) RunningEntry { 16 return RunningEntry{ 17 Start: start, 18 } 19 } 20 21 func NewRunningEntryFromPath(entryPath string, entryTime *Time) (RunningEntry, error) { 22 if _, err := os.Stat(entryPath); os.IsNotExist(err) { 23 return RunningEntry{}, err 24 } 25 26 data, err := os.ReadFile(entryPath) 27 if err != nil { 28 return RunningEntry{}, err 29 } 30 31 firstLine := strings.Split(string(data), "\n")[0] 32 start, _ := entryTime.ParseEntry(firstLine) 33 34 return RunningEntry{ 35 Start: start, 36 }, nil 37 38 } 39 40 func (e RunningEntry) Data() string { 41 return fmt.Sprintf("%s\n", e.Start.Format(DataTimeLayout)) 42 } 43 44 func (e RunningEntry) FileName() string { 45 return "active" 46 } 47 48 func (e RunningEntry) FullPath(group Group) string { 49 return path.Join(group.FullPath(), e.FileName()) 50 } 51 52 func (e RunningEntry) Exists(group Group) bool { 53 if _, err := os.Stat(e.FullPath(group)); !os.IsNotExist(err) { 54 return true 55 } 56 return false 57 } 58 59 func (e RunningEntry) Stop(stop time.Time) (CompletedEntry, error) { 60 return NewCompletedEntry(e.Start, stop) 61 } 62 63 func (e RunningEntry) Duration() time.Duration { 64 return time.Since(e.Start) 65 }