You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

97 lines
2.2 KiB

package main
import (
"fmt"
"log"
"os"
"os/user"
"time"
"github.com/fatih/color"
)
var directoryPath string
var filePath string
func main() {
usr, err := user.Current()
if err != nil {
log.Fatal(err)
}
directoryPath = usr.HomeDir + "/.wtt"
filePath = directoryPath + "/work.json"
readProjects()
//get the command line parameters
if len(os.Args) > 1 {
switch os.Args[1] {
case "new":
//create project os.Args[2]
if len(os.Args) > 2 {
projectName := os.Args[2]
color.Green("creating new project: " + projectName)
err := newProject(projectName)
if err != nil {
break
}
saveWork()
} else {
color.Red("No project name specified")
}
break
case "list":
//list projects
listProjects()
break
case "start":
//check if already there is any project started
if work.CurrentProjectName != "" {
color.Red("Can not start project, already project " + work.CurrentProjectName + " running")
break
}
//start project os.Args[2]
if len(os.Args) > 2 {
projectName := os.Args[2]
i := getProjectIByName(projectName)
if i < 0 {
color.Red("Project name: " + projectName + ", no exists")
break
}
var newStreak Streak
newStreak.Start = time.Now()
work.Projects[i].Streaks = append(work.Projects[i].Streaks, newStreak)
work.CurrentProjectName = projectName
saveWork()
fmt.Println("starting to work in project " + work.Projects[i].Name)
}
break
case "stop":
if work.CurrentProjectName == "" {
color.Red("no project started to stop")
break
}
i := getProjectIByName(work.CurrentProjectName)
if i < 0 {
color.Red("Project name: " + work.CurrentProjectName + ", no exists")
break
}
j := len(work.Projects[i].Streaks) - 1
work.Projects[i].Streaks[j].End = time.Now()
work.Projects[i].Streaks[j].Duration = time.Now().Sub(work.Projects[i].Streaks[j].Start)
work.CurrentProjectName = ""
saveWork()
fmt.Print("Worked ")
fmt.Print(work.Projects[i].Streaks[j].Duration)
fmt.Println(" in the project " + work.Projects[i].Name)
//stop project os.Args[2]
break
default:
color.Red("no option selected")
os.Exit(1)
}
} else {
color.Red("no option selected")
os.Exit(1)
}
}