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.

134 lines
3.3 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", "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)
}
}