diff options
author | Teddy Wing | 2017-06-04 02:07:50 +0200 |
---|---|---|
committer | Teddy Wing | 2017-06-04 02:07:50 +0200 |
commit | 02e4fb5d0d95b8c5c5442ee0a97b960f1296c236 (patch) | |
tree | 4cf323694692322036b80d2d921ff966096c6c36 /main.go | |
parent | 055301ca09d57b759b290d897bbb7560460251ca (diff) | |
parent | 9b6a6543e351308939bd420243507368b0669e63 (diff) | |
download | timetasker-02e4fb5d0d95b8c5c5442ee0a97b960f1296c236.tar.bz2 |
Merge branch 'timetasker-daily'
Diffstat (limited to 'main.go')
-rw-r--r-- | main.go | 118 |
1 files changed, 85 insertions, 33 deletions
@@ -2,58 +2,110 @@ package main import ( "fmt" - "io/ioutil" - "log" "os" + "time" "github.com/teddywing/timetasker/timetask" - "gopkg.in/yaml.v2" + "gopkg.in/alecthomas/kingpin.v2" ) -type Config struct { - Auth struct { - Username string - PasswordCmd string `yaml:"password_cmd"` - } - Fields timetask.Fields - Defaults timetask.TimeEntry -} +var VERSION string = "0.1.0" var config Config func main() { - loadConfig() + var err error - if len(os.Args) == 1 { - fmt.Println("Not enough arguments") - os.Exit(1) + // Parse command line arguments + project_alias := kingpin.Flag( + "project", + "Project alias defined in config.toml.", + ). + Short('p'). + String() + time_spent := kingpin.Flag("time", "Time spent working on project."). + Short('t'). + Default("7"). + Float() + date_str := kingpin.Flag("date", "Date when work was done (e.g. 2017-01-31)"). + Short('d'). + String() + description := kingpin.Flag("description", "Description of work."). + Short('m'). + String() + write_config_description := fmt.Sprintf( + "Initialise a new config file template at %s", + configFile(), + ) + write_config := kingpin.Flag("write-config", write_config_description). + Bool() + list_modules := kingpin.Flag("list-modules", "List sprints with IDs").Bool() + kingpin.Version(VERSION) + kingpin.Parse() + + // Error if no --project unless --write-config was passed + if *project_alias == "" && !*write_config { + kingpin.Fatalf("required flag --project not provided, try --help") } - file_path := os.Args[len(os.Args)-1] - file, err := ioutil.ReadFile(file_path) - if err != nil { - log.Println(err) + if *write_config { + err = maybeWriteConfig() + kingpin.FatalIfError(err, "could not write config file") + + os.Exit(0) } - time_entries := []timetask.TimeEntry{} - err = yaml.Unmarshal(file, &time_entries) - if err != nil { - log.Println(err) + err = loadConfig() + kingpin.FatalIfError(err, "could not load config file, try --write-config") + + // Submit time entry + project, ok := config.Projects[*project_alias] + if !ok { + kingpin.Errorf("project '%s' not found", *project_alias) + os.Exit(1) } - log.Printf("%+v", time_entries) + var date time.Time - // timetask.SubmitTimeEntries(config.Fields, time_entries) + // If the date argument isn't sent, default to today + if *date_str == "" { + date = time.Now() + } else { + date, err = time.Parse("2006-01-02", *date_str) + kingpin.FatalIfError( + err, + "date '%s' could not be parsed. Example: -d 2017-01-31\n", + *date_str, + ) + } - timetask.GenerateWeeklyTimesheet(os.Stdout, config.Defaults) -} + time_entry := timetask.NewTimeEntry( + config.Profile, + project, + date, + *time_spent, + *description, + ) + + password, err := passwordCmd(config.Auth.PasswordCmd) + kingpin.FatalIfError(err, "password command failed") -func loadConfig() { - config_str, err := ioutil.ReadFile("config.yml") - config = Config{} - err = yaml.Unmarshal(config_str, &config) - if err != nil { - log.Println(err) + client, err := timetask.Login( + config.Auth.Username, + password, + ) + kingpin.FatalIfError(err, "login request failed") + + // List modules + if *list_modules { + modules, err := timetask.RequestModules(*client, time_entry) + kingpin.FatalIfError(err, "could not retrieve sprints") + fmt.Println(modules) + + os.Exit(0) } + + err = timetask.SubmitTimeEntry(*client, time_entry) + kingpin.FatalIfError(err, "time entry submission request failed") } |