gime-bolt/timer_ops_add.go

129 lines
2.7 KiB
Go

package main
import (
"fmt"
"strings"
"time"
gime "git.bullercodeworks.com/brian/gime-lib"
)
// cmdStartTimer takes a list of arguments and returns the return code
// to be passed along to os.Exit
func cmdStartTimer(args []string) int {
var err error
var entry *gime.TimeEntry
// By default we start the timer now
tm := time.Now()
tags, rem := pullTagsFromArgs(args)
if len(rem) > 0 {
// Check if the first argument looks like a date/time
tm, err = parseFuzzyTime(rem[0])
}
tc := new(gime.TagCollection)
for i := range tags {
tc.Push(tags[i])
}
if entry, err = gime.CreateTimeEntry(tm, time.Time{}, tc); err != nil {
fmt.Println(err)
return 1
}
if err = gdb.SaveTimeEntry(entry); err != nil {
fmt.Println(err)
return 1
}
fmt.Println("Started:", TimerToString(entry))
return 0
}
func cmdAddTimer(args []string) int {
var err error
var entry *gime.TimeEntry
// By default we start the timer now
tags, rem := pullTagsFromArgs(args)
var beg, end time.Time
for _, opt := range rem {
var tmpBeg, tmpEnd time.Time
if strings.Contains(opt, "-") {
pts := strings.Split(opt, "-")
if len(pts[0]) > 0 {
// This should be the starting date
tmpBeg, err = parseFuzzyTime(pts[0])
if err != nil {
continue
}
}
if len(pts[1]) > 0 {
// This should be the ending date
tmpEnd, err = parseFuzzyTime(pts[1])
if err != nil {
continue
}
}
}
if !tmpBeg.IsZero() || !tmpEnd.IsZero() {
beg, end = tmpBeg, tmpEnd
}
}
if end.IsZero() {
end = time.Now()
}
tc := new(gime.TagCollection)
for i := range tags {
tc.Push(tags[i])
}
if entry, err = gime.CreateTimeEntry(beg, end, tc); err != nil {
fmt.Println(err)
return 1
}
if err = gdb.SaveTimeEntry(entry); err != nil {
fmt.Println(err)
return 1
}
fmt.Println("Added Time Entry:", TimerToString(entry))
return 0
}
func cmdContinueTimer(args []string) int {
// Get the last running timer and start a new one with the same tags
te, err := getMostRecentTimeEntry()
if err != nil {
fmt.Println(err.Error())
return 1
}
tagColl := te.GetTags()
var tags []string
for i := 0; i < tagColl.Length(); i++ {
tags = append(tags, "+"+tagColl.Get(i))
}
args = append(args, tags...)
return cmdStartTimer(args)
}
// switchTimer performs a stop on any currently running timers
// and starts a new timer with the given arguments
func cmdSwitchTimer(args []string) int {
stopId := "@all"
stopIdIdx := -1
for i := range args {
// see if we have a timer id in the args
if args[i][0] == '@' {
stopId = args[i]
stopIdIdx = i
}
}
if stopIdIdx >= 0 {
args = append(args[:stopIdIdx], args[stopIdIdx+1:]...)
}
if cmdStopTimer([]string{stopId}) != 0 {
// Error while stopping timers
return 1
}
return cmdStartTimer(args)
}