tme

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

commit 35432023977291eba0a1c6fb2a3864f83e2b75c8
parent 2fbc5eb1861dba9b1915de64b62fade04cf7248f
Author: Tomas Nemec <nemi@skaut.cz>
Date:   Wed,  8 Feb 2023 17:21:08 +0100

update

Diffstat:
Acommand.go | 170+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mmain.go | 162-------------------------------------------------------------------------------
Mtme/group.go | 2+-
3 files changed, 171 insertions(+), 163 deletions(-)

diff --git a/command.go b/command.go @@ -0,0 +1,170 @@ +package main + +import ( + "errors" + "fmt" + "os" + + "gtms.dev/tme/tme" +) + +type Command struct { + basePath string + args []string + entryTime *tme.Time +} + +func (c *Command) nextArg() (string, error) { + if len(c.args) == 0 { + return "", errors.New("No more arguments") + } + + if len(c.args) == 1 { + first := (c.args)[0] + c.args = make([]string, 0) + return first, nil + } + + first := (c.args)[0] + c.args = (c.args)[1:] + return first, nil +} + +func (c Command) add() { + if len(c.args) != 3 { + fmt.Fprintln(os.Stderr, "add <path> <start> <stop>") + os.Exit(1) + } + + groupArg, _ := c.nextArg() + startArg, _ := c.nextArg() + stopArg, _ := c.nextArg() + + start, err := c.entryTime.ParseArg(startArg) + if err != nil { + fmt.Fprintf(os.Stderr, "[start] time (%s) could not be parsed\n", startArg) + os.Exit(1) + } + + stop, err := c.entryTime.ParseArg(stopArg) + if err != nil { + fmt.Fprintf(os.Stderr, "[stop] time (%s) could not be parsed\n", stopArg) + os.Exit(1) + } + + group := tme.NewGroup(c.basePath, groupArg) + // TODO(tms) 22.10.22: maybe ask if user want create new folder (fe: typo) + group.Create() + + entry, err := tme.NewEntry(start, stop) + if err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } + + if entry.Exists(group) { + fmt.Fprintln(os.Stderr, "entry already created") + os.Exit(1) + } + + group.Add(entry) +} + +func (c Command) start() { + if len(c.args) != 2 { + fmt.Fprintln(os.Stderr, "start <path> <start>") + os.Exit(1) + } + + groupArg, _ := c.nextArg() + startArg, _ := c.nextArg() + + start, err := c.entryTime.ParseArg(startArg) + if err != nil { + fmt.Fprintf(os.Stderr, "[start] time (%s) could not be parsed\n", startArg) + os.Exit(1) + } + + group := tme.NewGroup(c.basePath, groupArg) + // TODO(tms) 22.10.22: maybe ask if user want create new folder (fe: typo) + group.Create() + + entry := tme.NewStartEntry(start) + + if entry.Exists(group) { + fmt.Fprintln(os.Stderr, "entry in this group already started") + os.Exit(1) + } + + group.Add(entry) +} + +func (c Command) stop() { + if len(c.args) != 2 { + fmt.Fprintln(os.Stderr, "stop <path> <stop>") + os.Exit(1) + } + + groupArg, _ := c.nextArg() + stopArg, _ := c.nextArg() + + stop, err := c.entryTime.ParseArg(stopArg) + if err != nil { + fmt.Fprintf(os.Stderr, "[start] time (%s) could not be parsed\n", stopArg) + os.Exit(1) + } + + group := tme.NewGroup(c.basePath, groupArg) + + startEntry, err := tme.NewStartEntryFromGroup(group, c.entryTime) + if err != nil { + fmt.Fprintf(os.Stderr, "no entry running in %q\n", groupArg) + os.Exit(1) + } + + entry, err := startEntry.Stop(stop) + if err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } + + if entry.Exists(group) { + fmt.Fprintln(os.Stderr, "entry already created") + os.Exit(1) + } + + err = group.Add(entry) + if err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } + + err = group.Remove(startEntry) + if err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } +} + +func (c Command) ls() { + if len(c.args) > 1 { + fmt.Fprintln(os.Stderr, "ls [<path>]") + os.Exit(1) + } + + rootPath := "" + if len(c.args) == 1 { + rootPath, _ = c.nextArg() + } + + group := tme.NewGroup(c.basePath, rootPath) + files, err := group.List() + if err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } + + for _, file := range files { + fmt.Println(file) + } +} diff --git a/main.go b/main.go @@ -1,7 +1,6 @@ package main import ( - "errors" "fmt" "os" @@ -44,164 +43,3 @@ func main() { command.ls() } } - -type Command struct { - basePath string - args []string - entryTime *tme.Time -} - -func (c *Command) nextArg() (string, error) { - if len(c.args) == 0 { - return "", errors.New("No more arguments") - } - - if len(c.args) == 1 { - first := (c.args)[0] - c.args = make([]string, 0) - return first, nil - } - - first := (c.args)[0] - c.args = (c.args)[1:] - return first, nil -} - -func (c Command) add() { - if len(c.args) != 3 { - fmt.Fprintln(os.Stderr, "add <path> <start> <stop>") - os.Exit(1) - } - - groupArg, _ := c.nextArg() - startArg, _ := c.nextArg() - stopArg, _ := c.nextArg() - - start, err := c.entryTime.ParseArg(startArg) - if err != nil { - fmt.Fprintf(os.Stderr, "[start] time (%s) could not be parsed\n", startArg) - os.Exit(1) - } - - stop, err := c.entryTime.ParseArg(stopArg) - if err != nil { - fmt.Fprintf(os.Stderr, "[stop] time (%s) could not be parsed\n", stopArg) - os.Exit(1) - } - - group := tme.NewGroup(c.basePath, groupArg) - // TODO(tms) 22.10.22: maybe ask if user want create new folder (fe: typo) - group.Create() - - entry, err := tme.NewEntry(start, stop) - if err != nil { - fmt.Fprintln(os.Stderr, err) - os.Exit(1) - } - - if entry.Exists(group) { - fmt.Fprintln(os.Stderr, "entry already created") - os.Exit(1) - } - - group.Add(entry) -} - -func (c Command) start() { - if len(c.args) != 2 { - fmt.Fprintln(os.Stderr, "start <path> <start>") - os.Exit(1) - } - - groupArg, _ := c.nextArg() - startArg, _ := c.nextArg() - - start, err := c.entryTime.ParseArg(startArg) - if err != nil { - fmt.Fprintf(os.Stderr, "[start] time (%s) could not be parsed\n", startArg) - os.Exit(1) - } - - group := tme.NewGroup(c.basePath, groupArg) - // TODO(tms) 22.10.22: maybe ask if user want create new folder (fe: typo) - group.Create() - - entry := tme.NewStartEntry(start) - - if entry.Exists(group) { - fmt.Fprintln(os.Stderr, "entry in this group already started") - os.Exit(1) - } - - group.Add(entry) -} - -func (c Command) stop() { - if len(c.args) != 2 { - fmt.Fprintln(os.Stderr, "stop <path> <stop>") - os.Exit(1) - } - - groupArg, _ := c.nextArg() - stopArg, _ := c.nextArg() - - stop, err := c.entryTime.ParseArg(stopArg) - if err != nil { - fmt.Fprintf(os.Stderr, "[start] time (%s) could not be parsed\n", stopArg) - os.Exit(1) - } - - group := tme.NewGroup(c.basePath, groupArg) - - startEntry, err := tme.NewStartEntryFromGroup(group, c.entryTime) - if err != nil { - fmt.Fprintf(os.Stderr, "no entry running in %q\n", groupArg) - os.Exit(1) - } - - entry, err := startEntry.Stop(stop) - if err != nil { - fmt.Fprintln(os.Stderr, err) - os.Exit(1) - } - - if entry.Exists(group) { - fmt.Fprintln(os.Stderr, "entry already created") - os.Exit(1) - } - - err = group.Add(entry) - if err != nil { - fmt.Fprintln(os.Stderr, err) - os.Exit(1) - } - - err = group.Remove(startEntry) - if err != nil { - fmt.Fprintln(os.Stderr, err) - os.Exit(1) - } -} - -func (c Command) ls() { - if len(c.args) > 1 { - fmt.Fprintln(os.Stderr, "ls [<path>]") - os.Exit(1) - } - - rootPath := "" - if len(c.args) == 1 { - rootPath, _ = c.nextArg() - } - - group := tme.NewGroup(c.basePath, rootPath) - files, err := group.List() - if err != nil { - fmt.Fprintln(os.Stderr, err) - os.Exit(1) - } - - for _, file := range files { - fmt.Println(file) - } -} diff --git a/tme/group.go b/tme/group.go @@ -61,7 +61,7 @@ func (g Group) Remove(entry Entry) error { func (g Group) List() ([]string, error) { if !g.Exists() { - return []string{}, errors.New("Group does not exist") + return []string{}, errors.New("Group '" + g.Path + "' does not exist") } var files []string