arnaucube
arnaucube/wttPublic Self-hosted repository
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}