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", "n":
|
|
//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", "ls":
|
|
if len(os.Args) > 2 {
|
|
param := os.Args[2]
|
|
if param == "-a" {
|
|
listProjectsDetails()
|
|
}
|
|
} else {
|
|
//list projects
|
|
listProjects()
|
|
}
|
|
break
|
|
case "start", "s":
|
|
//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)
|
|
} else {
|
|
color.Red("No project name to start selected")
|
|
}
|
|
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()
|
|
color.Green("Worked " + work.Projects[i].Streaks[j].Duration.String() + " in the project " + work.Projects[i].Name)
|
|
break
|
|
case "rm":
|
|
if len(os.Args) > 2 {
|
|
projectName := os.Args[2]
|
|
if work.CurrentProjectName == projectName {
|
|
work.CurrentProjectName = ""
|
|
}
|
|
deleteProject(projectName)
|
|
saveWork()
|
|
color.Yellow("Project " + projectName + " deleted")
|
|
} else {
|
|
color.Red("no project name specified")
|
|
}
|
|
|
|
break
|
|
case "current", "c":
|
|
if work.CurrentProjectName != "" {
|
|
fmt.Print("Current working project: ")
|
|
color.Blue(work.CurrentProjectName)
|
|
} else {
|
|
fmt.Println("No current working project.")
|
|
}
|
|
case "help", "h":
|
|
fmt.Println("./wtt new {projectname}")
|
|
fmt.Println("./wtt ls")
|
|
fmt.Println("./wtt ls -a")
|
|
fmt.Println("./wtt start {projectname}")
|
|
fmt.Println("./wtt stop")
|
|
fmt.Println("./wtt rm")
|
|
fmt.Println("./wtt current")
|
|
fmt.Println("./wtt help")
|
|
default:
|
|
color.Red("option not exists")
|
|
os.Exit(1)
|
|
}
|
|
} else {
|
|
color.Red("no option selected")
|
|
fmt.Println("Can run 'help' for commands information")
|
|
fmt.Println("./wtt help")
|
|
os.Exit(1)
|
|
}
|
|
}
|