wtt/main.go
main.goRaw
1package main
2
3import (
4 "fmt"
5 "log"
6 "os"
7 "os/user"
8 "time"
9
10 "github.com/fatih/color"
11)
12
13var directoryPath string
14var filePath string
15
16func main() {
17 usr, err := user.Current()
18 if err != nil {
19 log.Fatal(err)
20 }
21 directoryPath = usr.HomeDir + "/.wtt"
22 filePath = directoryPath + "/work.json"
23 readProjects()
24
25 //get the command line parameters
26 if len(os.Args) > 1 {
27 switch os.Args[1] {
28 case "new":
29 //create project os.Args[2]
30 if len(os.Args) > 2 {
31 projectName := os.Args[2]
32 color.Green("creating new project: " + projectName)
33 err := newProject(projectName)
34 if err != nil {
35 break
36 }
37 saveWork()
38 } else {
39 color.Red("No project name specified")
40 }
41 break
42 case "list":
43 //list projects
44 listProjects()
45 break
46 case "start":
47 //check if already there is any project started
48 if work.CurrentProjectName != "" {
49 color.Red("Can not start project, already project " + work.CurrentProjectName + " running")
50 break
51 }
52 //start project os.Args[2]
53 if len(os.Args) > 2 {
54 projectName := os.Args[2]
55 i := getProjectIByName(projectName)
56 if i < 0 {
57 color.Red("Project name: " + projectName + ", no exists")
58 break
59 }
60 var newStreak Streak
61 newStreak.Start = time.Now()
62 work.Projects[i].Streaks = append(work.Projects[i].Streaks, newStreak)
63 work.CurrentProjectName = projectName
64 saveWork()
65 fmt.Println("starting to work in project " + work.Projects[i].Name)
66 }
67 break
68 case "stop":
69 if work.CurrentProjectName == "" {
70 color.Red("no project started to stop")
71 break
72 }
73 i := getProjectIByName(work.CurrentProjectName)
74 if i < 0 {
75 color.Red("Project name: " + work.CurrentProjectName + ", no exists")
76 break
77 }
78 j := len(work.Projects[i].Streaks) - 1
79 work.Projects[i].Streaks[j].End = time.Now()
80 work.Projects[i].Streaks[j].Duration = time.Now().Sub(work.Projects[i].Streaks[j].Start)
81 work.CurrentProjectName = ""
82 saveWork()
83 fmt.Print("Worked ")
84 fmt.Print(work.Projects[i].Streaks[j].Duration)
85 fmt.Println(" in the project " + work.Projects[i].Name)
86
87 //stop project os.Args[2]
88 break
89 default:
90 color.Red("no option selected")
91 os.Exit(1)
92 }
93 } else {
94 color.Red("no option selected")
95 os.Exit(1)
96 }
97}