tme

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

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 }