diff options
| -rw-r--r-- | main.go | 33 | ||||
| -rw-r--r-- | sqlite.go | 135 |
2 files changed, 151 insertions, 17 deletions
@@ -10,9 +10,9 @@ import ( _ "os/exec" ) -var svar string +//var svar string var starttime,stoptime string -var projectid int +var projectid, edittaskid, editprojectid int var newproject, newtask, stoptask, allproj bool func init() { @@ -22,30 +22,38 @@ func init() { false, "Show all Projects") flag.BoolVar(&newtask, - "start", + "startnow", false, "Start a new Task in current project") + flag.IntVar(&edittaskid, + "edittask", + 0, + "Specify which Task to edit") + flag.IntVar(&editprojectid, + "editproject", + 0, + "Specify which project to edit") flag.IntVar(&projectid, "project", 0, "Specify which project to track") flag.BoolVar(&stoptask, - "stop", + "stopnow", false, "Stop the currently open task") flag.StringVar(&starttime, - "starttime", + "start", "now", - "") + "Start a new Task in current project\nFormat: 'YYYY-MM-DD HH:MM' or 'HH:MM'") flag.StringVar(&stoptime, - "stoptime", + "stop", "now", - "Stop to Track a Project") + "Stop to Track the current Task\nFormat: 'YYYY-MM-DD HH:MM' or 'HH:MM'") flag.BoolVar(&newproject, "new", false, "Create a new project") - flag.StringVar(&svar, "svar", "bar", "A String Var") + //flag.StringVar(&svar, "svar", "bar", "A String Var") flag.Parse() @@ -69,9 +77,10 @@ func main() { newProject() os.Exit(0) } else if newtask { + newTask(projectid) showLastProject() getClosedTasks(0) - newTask(projectid) + showOpenTask() os.Exit(0) } else if stoptask { closeTask() @@ -86,6 +95,10 @@ func main() { showLastProject() getClosedTasks(0) showOpenTask() + } else if (edittaskid>0) { + editTask(edittaskid) + } else if (editprojectid>0) { + editProject(editprojectid) } else if (projectid>0) { setProject(projectid) showLastProject() @@ -8,6 +8,7 @@ import ( "bufio" "strings" "regexp" + "strconv" _ "github.com/mattn/go-sqlite3" ) @@ -77,7 +78,6 @@ func newTaskTime(proj int, tim string) { stmt, err := db.Prepare("INSERT INTO timetable(project, start, task, checkout) values(?, datetime(?,'utc'), ?, ?)") fmt.Println(timstr) task := getInput("Specify Task: ") - //stmt, err := db.Prepare("INSERT INTO timetable(project, start, task, checkout) values(?, datetime(?,'localtime'), ?, ?)") checkErr(err) if (proj == 0) { _, err = stmt.Exec(currproject.id,timstr,task,0) @@ -85,10 +85,6 @@ func newTaskTime(proj int, tim string) { _, err = stmt.Exec(proj,timstr,task,0) } checkErr(err) - //stmt, err = db.Prepare("UPDATE timetable SET start = datetime('?') WHERE id = ?") - //checkErr(err) - //_, err = stmt.Exec(opentask.id) - //checkErr(err) fmt.Println("...new task inserted into",currproject.name,": ",task) getOpenTask() @@ -121,6 +117,10 @@ func newTask(proj int) { } func closeTaskTime(tim string) { + if opentask.id==0 { + fmt.Println("There is no Open Task") + return + } //timt,err := time.Parse("2006-01-02 15:04",tim) timst,timstr := "1791-09-30 19:07","1791-09-30 19:07" zone, _ := time.Now().Zone() @@ -138,7 +138,7 @@ func closeTaskTime(tim string) { timt,err := time.Parse("2006-01-02 15:04 MST",timst) checkErr(err) - fmt.Println(timst,timt,opentask.start) + //fmt.Println(timst,timt,opentask.start) if (timt.After(opentask.start)) { //timstr := timt.UTC().Format("2006-01-02 15:04") fmt.Println("...Closing Task",opentask.id,"at",timst) @@ -155,6 +155,10 @@ func closeTaskTime(tim string) { } func closeTask() { + if opentask.id==0 { + fmt.Println("There is no Open Task") + return + } if (time.Now().After(opentask.start.Local())) { fmt.Println("...Closing Task",opentask.id) stmt, err := db.Prepare("UPDATE timetable SET stop = datetime('now') WHERE id = ?") @@ -212,7 +216,8 @@ func showLastProject() { fmt.Println("Empty DB") } else { fmt.Println("___Last Project_____________") - fmt.Println(currproject.id,":", currproject.name, currproject.last.Local().Format("2006 Mon Jan _2 15:04 2006")) + fmt.Println(currproject.id,":", currproject.name,"- Started:",currproject.first.Local().Format("Mon _2 Jan 2006")) + fmt.Println(" Last Changes",currproject.last.Local().Format("2006 Mon Jan _2 15:04")) } } @@ -340,6 +345,122 @@ func allProjects() { rows.Close() //good habit to close } +func editTask(id int) { + var chk,prj int + var start,stop time.Time + var task,startstr,stopstr string + rows,err := db.Query("SELECT project, start, stop, task, checkout FROM timetable WHERE id = $1",id) + checkErr(err) + if rows.Next() { + err = rows.Scan(&prj, &start, &stop, &task, &chk) + checkErr(err) + }else{ + fmt.Println("There Is No Task",id) + os.Exit(0) + } + rows.Close() //good habit to close + + fmt.Println("Edit Task",id) + fmt.Println("Old Name:",task) + in := getInput("Enter New:") + if in!=""{ + task=in + } + startstr=start.Local().Format("2006-01-02 15:04") + stopstr=stop.Local().Format("2006-01-02 15:04") + fmt.Println("Old Start:",startstr) + newstart := getInput("Enter New:") + if newstart!=""{ + if isDate(newstart) { + startstr=newstart + }else{ + fmt.Println(newstart,"is Not a Valid Timestring! use: 'YYYY-MM-DD HH:MM' or 'HH:MM'") + os.Exit(0) + } + } + fmt.Println("Old End:",stopstr) + newend := getInput("Enter New:") + if newend!=""{ + if isDate(newend) { + stopstr=newend + }else{ + fmt.Println(newend,"is Not a Valid Timestring! use: 'YYYY-MM-DD HH:MM' or 'HH:MM'") + os.Exit(0) + } + } + fmt.Println("Old Project:",prj) + newprj := getInput("Enter New:") + if newprj!=""{ + prj,err = strconv.Atoi(newprj) + if err != nil { + fmt.Println(newprj,"is Not a Valid id. Try an Integer instead") + os.Exit(0) + } + if !isProject(prj) { + fmt.Println("There is no project",prj,"Try -all for Project List") + os.Exit(0) + } + } + stmt, err := db.Prepare("UPDATE timetable SET task = ?, start = datetime(?,'utc'), stop = datetime(?,'utc'), project = ? WHERE id = ?") + checkErr(err) + _, err = stmt.Exec(task,startstr,stopstr,prj,id) + checkErr(err) + updateProject(prj) + fmt.Println("...Task",id,"Updated") +} + +func editProject(id int) { + var fin int + var first time.Time + var name,nfirst string + rows,err := db.Query("SELECT name, first, finished FROM projects WHERE id = $1",id) + checkErr(err) + if rows.Next() { + err = rows.Scan(&name, &first, &fin) + checkErr(err) + fmt.Println("Edit Project",id) + fmt.Println("Old Name:",name) + in := getInput("Enter New:") + if in!=""{ + name=in + } + nfirst=first.Local().Format("2006-01-02 15:04") + fmt.Println("Old Begin:",nfirst) + newfirst := getInput("Enter New:") + if newfirst!=""{ + if isDate(newfirst) { + nfirst=newfirst + }else{ + fmt.Println(newfirst,"is Not a Valid Timestring! use: 'YYYY-MM-DD HH:MM' or 'HH:MM'") + os.Exit(0) + } + } + + }else{ + fmt.Println("There Is No Project",id) + os.Exit(0) + } + rows.Close() //good habit to close + stmt, err := db.Prepare("UPDATE projects SET name = ?, last = datetime(?,'utc') WHERE id = ?") + checkErr(err) + _, err = stmt.Exec(name,nfirst,id) + checkErr(err) + updateProject(id) + fmt.Println("...Project",id,"Updated") +} + +func isProject(id int) bool { + + rows,err := db.Query("SELECT * FROM projects WHERE id = $1",id) + checkErr(err) + defer rows.Close() + if rows.Next() { + return true + } else { + return false + } +} + func getDate(in string) string { r := regexp.MustCompile(`(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2})`) return r.FindString(in) |
