aboutsummaryrefslogtreecommitdiffstats
path: root/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'main.go')
-rw-r--r--main.go118
1 files changed, 85 insertions, 33 deletions
diff --git a/main.go b/main.go
index 5a9f0d1..2f37632 100644
--- a/main.go
+++ b/main.go
@@ -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")
}