/* Copyright © 2022 Brian Buller */ package cmd import ( "fmt" "time" "git.bullercodeworks.com/brian/gime/cli" "git.bullercodeworks.com/brian/gime/util" "git.bullercodeworks.com/brian/go-timertxt" "github.com/spf13/cobra" ) // timeCmd represents the time command var timeCmd = &cobra.Command{ Use: "time", Short: "A brief description of your command", RunE: opShowTimers, } func init() { rootCmd.AddCommand(timeCmd) // Local Flags timeCmd.Flags().BoolP("all", "a", false, "Include done.txt timers") timeCmd.Flags().BoolP("done", "d", false, "Only done.txt timers") } func opShowTimers(cmd *cobra.Command, args []string) error { var err error var includeArchive bool var onlyArchive bool if onlyArchive, err = cmd.Flags().GetBool("done"); err != nil { return err } else if includeArchive, err = cmd.Flags().GetBool("all"); err != nil { return err } p := cli.Program{} err = p.Initialize() if err != nil { return err } if !onlyArchive { if err := p.LoadTimerList(); err != nil { return err } } if includeArchive || onlyArchive { if err := p.LoadDoneList(); err != nil { return err } } list := timertxt.NewTimerList() if !onlyArchive { list = p.TimerList if includeArchive { for _, tmr := range p.DoneList.GetTimerSlice() { list.AddTimer(tmr) } } } else { list = p.DoneList } filter := util.BuildFilterFromArgs(args) list = list.Filter(filter) list.Sort(timertxt.SortFinishDateAsc) var isActive bool var total time.Duration for _, v := range list.GetTimerSlice() { dur := util.Round(v.FinishDate.Sub(v.StartDate)) if v.FinishDate.IsZero() { dur = util.Round(time.Now().Sub(v.StartDate)) isActive = true } total += dur } total = util.Round(total) if isActive { fmt.Printf("%.2f+\n", util.DurationToDecimal(total)) } else { fmt.Printf("%.2f\n", util.DurationToDecimal(total)) } return nil }