diff options
| author | Nikolaus Gotsche <n@softwarefools.com> | 2018-01-14 05:32:44 +0100 |
|---|---|---|
| committer | Nikolaus Gotsche <n@softwarefools.com> | 2018-01-14 05:32:44 +0100 |
| commit | 4c1961ce7a2bf9e5526d906ba2c317b53ed5f331 (patch) | |
| tree | 5f7d1b68d37544ffacd9f4c9df0b042b285e91a7 | |
| parent | d9675b282394973d0755f1484fc5ebe452423de2 (diff) | |
Verison 0.1 - All Database Operations running
| -rw-r--r-- | main.go | 112 | ||||
| -rw-r--r-- | sqlite.go | 249 |
2 files changed, 350 insertions, 11 deletions
@@ -3,21 +3,111 @@ package main import ( "fmt" "flag" - "log" + _ "log" + "bufio" "os" "strings" - "os/exec" + _ "os/exec" ) -func main() { - fmt.Println("Hello World") - command := flag.String( - "command", - "", - "The MAin Command") - ignoreErrors := flag.Bool( - "ignore-errors", +var svar string +var starttime,stoptime string +var projectid int +var newproject, newtask, stoptask, allproj bool + +func init() { + + flag.BoolVar(&allproj, + "all", + false, + "Show all Projects") + flag.BoolVar(&newtask, + "start", false, - "Keep running after error if true") + "Start a new Task in current project") + flag.IntVar(&projectid, + "project", + 0, + "Specify which project to track") + flag.BoolVar(&stoptask, + "stop", + false, + "Stop the currently open task") + flag.StringVar(&starttime, + "starttime", + "now", + "") + flag.StringVar(&stoptime, + "stoptime", + "now", + "Stop to Track a Project") + flag.BoolVar(&newproject, + "new", + false, + "Create a new project") + flag.StringVar(&svar, "svar", "bar", "A String Var") + flag.Parse() + +} + +func main() { + fmt.Println("Laboravi Started") + initDB("./.mytimes.db") + getLastProject() + //getProjects() + getOpenTask() + + if allproj { + allProjects() + } + + if newproject { + fmt.Print("Enter Project Name: ") + //var input string + //fmt.Scanln(&input) + in := bufio.NewReader(os.Stdin) + line, err := in.ReadString('\n') + line = strings.TrimSuffix(line, "\n") + checkErr(err) +// fmt.Println(line) + newProject(line) + os.Exit(0) + } else if newtask { + fmt.Print("Specify Task: ") + in := bufio.NewReader(os.Stdin) + line, err := in.ReadString('\n') + line = strings.TrimSuffix(line, "\n") + checkErr(err) + // fmt.Println(line) + newTask(projectid,line) + os.Exit(0) + } else if stoptask { + closeTask() + showLastProject() + getClosedTasks(0) + //fmt.Print("Soon to Come...") + } else if (starttime != "now") { + //fmt.Println("HmmmWTF") + fmt.Print("Soon to Come...") + } else if (stoptime != "now") { + fmt.Print("Soon to Come...") + } else if (projectid>0) { + setProject(projectid) + showLastProject() + getClosedTasks(0) + showOpenTask() + } else { + showLastProject() + getClosedTasks(0) + showOpenTask() + + } + + //fmt.Println("Start Act:",actstart) + //fmt.Println("Stop Act:",actstop) + //fmt.Println("Project:",projectid) + //fmt.Println("New Project:",newproject) + //fmt.Println("svar:",svar) + fmt.Println("Unknown Commands: ",flag.Args()) } diff --git a/sqlite.go b/sqlite.go new file mode 100644 index 0000000..271a429 --- /dev/null +++ b/sqlite.go @@ -0,0 +1,249 @@ +package main + +import ( + "database/sql" + "fmt" + "time" + "os" + _ "github.com/mattn/go-sqlite3" +) + +type project struct{ + id int + name string + first time.Time + last time.Time + finish int +} + +type task struct{ + id int + projectid int + start time.Time + stop time.Time + taskname string + checkout bool +} + +var db *sql.DB +var err error +var currproject project +var opentask task + +func initDB(filename string) { + if _, err := os.Stat(filename); os.IsNotExist(err) { + db, err = sql.Open("sqlite3", filename) + checkErr(err) + fmt.Println("Creating new DB") + sqlstmt := ` + CREATE TABLE projects( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name VARCHAR(240) NOT NULL, + first TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + last TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + finished INTEGER NOT NULL); + CREATE TABLE timetable( + id INTEGER PRIMARY KEY AUTOINCREMENT, + project INTEGER NOT NULL, + start TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + stop TIMESTAMP DEFAULT '1791-09-30 19:07', + task VARCHAR(240) NOT NULL, + checkout INTEGER NOT NULL); + ` + _, err = db.Exec(sqlstmt) + checkErr(err) + }else{ + db, err = sql.Open("sqlite3", filename) + checkErr(err) + fmt.Println("Opening DB") + } +} + +func newTask(proj int ,task string) { + stmt, err := db.Prepare("INSERT INTO timetable(project, task, checkout) values(?, ?, ?)") + checkErr(err) + if (proj == 0) { + _, err = stmt.Exec(currproject.id,task,0) + }else{ + _, err = stmt.Exec(proj,task,0) + } + checkErr(err) + fmt.Println("...New Task inserted into",currproject.name,": ",task) + getOpenTask() + updateProject(currproject.id) +} + +func closeTask() { + fmt.Println("...Closing Task",opentask.id) + stmt, err := db.Prepare("UPDATE timetable SET stop = datetime('now') WHERE id = ?") + checkErr(err) + _, err = stmt.Exec(opentask.id) + checkErr(err) + opentask.id=0 + updateProject(opentask.projectid) +} + +func updateProject(id int) { + stmt, err := db.Prepare("UPDATE projects SET last = datetime('now') WHERE id = ?") + checkErr(err) + _, err = stmt.Exec(id) + checkErr(err) +} + +func getOpenTask() { + rows,err := db.Query("SELECT id, project, start, task, checkout FROM timetable WHERE stop = '1791-09-30 19:07'") + checkErr(err) + var id,project,checkout int + var task string + var start time.Time + + defer rows.Close() + for rows.Next() { + err = rows.Scan(&id, &project, &start , &task, &checkout) + checkErr(err) + //fmt.Println(id, "Open Task:", task, project, start) + } + //rows.Close() //good habit to close + opentask.id = id + opentask.projectid = project + opentask.start = start + opentask.taskname = task + opentask.checkout = checkout != 0 +} + +func showOpenTask() { + if (opentask.id==0) { + fmt.Println("___No Open Tasks____________") + } else { + fmt.Println("___Open Task________________") + fmt.Println(opentask.id,":", opentask.taskname, opentask.projectid, opentask.start.Local().Format("Mon Jan _2 15:04")) + } +} + +func showLastProject() { + if (currproject.id==0) { + fmt.Println("Empty DB") + } else { + fmt.Println("___Last Project_____________") + fmt.Println(currproject.id,":", currproject.name, currproject.last.Local().Format("Mon Jan _2 15:04 2006")) + } +} + + +func newProject(nam string) { + stmt, err := db.Prepare("INSERT INTO projects(name, finished) values(?, ?)") + + checkErr(err) + _, err = stmt.Exec(nam,0) + checkErr(err) + fmt.Println(" Project Created:",nam) + getLastProject() +} + +func getClosedTasks(num int) { + //var rows sql.Rows + //var err error + fmt.Println("___Past Tasks________________") + rows,err := db.Query("SELECT * FROM timetable WHERE stop != '1791-09-30 19:07' ORDER BY datetime(start)",currproject.id) + checkErr(err) + if num > 0 { + rows,err = db.Query("SELECT * FROM timetable WHERE project = $1 AND stop != '1791-09-30 19:07'ORDER BY datetime(start) DESC LIMIT $2",currproject.id,num) + checkErr(err) + } else { + rows,err = db.Query("SELECT * FROM timetable WHERE project = $1 AND stop != '1791-09-30 19:07'ORDER BY datetime(start)",currproject.id) + checkErr(err) + } + var id, proj,check int + var sta,sto time.Time + var tas string + checkErr(err) + + for rows.Next() { + err = rows.Scan(&id, &proj, &sta, &sto, &tas, &check) + checkErr(err) + fmt.Println(id,tas,sta.Local().Format("Mon Jan _2 15:04"),sto.Local().Format("15:04")) + } + rows.Close() +} + +func getLastProject() { + rows,err := db.Query("SELECT * FROM projects") + checkErr(err) + + var uid,nuid int + var prname,nprname string + var first,nfirst time.Time + var last,nlast time.Time + var finish,nfinish int + + for rows.Next() { + err = rows.Scan(&uid, &prname, &first, &last, &finish) + checkErr(err) + if (last.After(nlast)){ + nuid=uid + nprname=prname + nfirst=first + nlast=last + nfinish=finish + } + } + rows.Close() //good habit to close + // fmt.Println(nuid,"Last Project",nprname) + // fmt.Println(nlast) + // fmt.Println("----------------------------------") + + currproject.id = nuid + currproject.name = nprname + currproject.first = nfirst + currproject.last = nlast + currproject.finish = nfinish + // getLastTasks(0) +} + +func setProject (nid int) { + rows,err := db.Query("SELECT * FROM projects WHERE id = $1",nid) + checkErr(err) + + var uid int + var prname string + var first time.Time + var last time.Time + var finish int + + for rows.Next() { + err = rows.Scan(&uid, &prname, &first, &last, &finish) + checkErr(err) + } + rows.Close() //good habit to close + currproject.id = uid + currproject.name = prname + currproject.first = first + currproject.last = last + currproject.finish = finish + updateProject(uid) +} + +func allProjects() { + rows,err := db.Query("SELECT * FROM projects") + checkErr(err) + + var uid int + var prname string + var first time.Time + var last time.Time + var finish int + + fmt.Println("___All Projects________________") + for rows.Next() { + err = rows.Scan(&uid, &prname, &first, &last, &finish) + checkErr(err) + fmt.Println(" ",uid,prname,first.Local().Format("2006-09-12 19:13"),last.Local().Format("2006-09-12 19:13"),finish) + } + rows.Close() //good habit to close +} + +func checkErr(err error) { + if err != nil { + panic(err) + } +} |
