From 2bc4849976ec2366013e7e70d5f8b7cf758f3bfd Mon Sep 17 00:00:00 2001 From: Aleksey Lobanov Date: Sat, 26 Mar 2016 18:09:19 +0300 Subject: [PATCH] Added initing of db, function InitDb --- src/main.go | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/src/main.go b/src/main.go index 6e78144..a816015 100644 --- a/src/main.go +++ b/src/main.go @@ -2,6 +2,7 @@ package main import ( + "database/sql" "flag" "fmt" "log" @@ -10,11 +11,15 @@ import ( "strconv" "strings" "time" + + _ "github.com/mattn/go-sqlite3" ) const ( SLEEP_TIME = 3 * time.Second KEYBOARD_BUFER_SIZE = 10000 + DATABASE_NAME = "./gokeystat.db" + CAPTURE_TIME = 5 * time.Second // time between capturing keyboard to db ) // Return map from key numbers to key names like "F1", "Tab", "d" @@ -66,6 +71,54 @@ func GetKeyNumsFromOutput(buf []byte) []uint8 { return keyNums } +func InitDb(db *sql.DB, keyMap map[uint8]string) { + keyNums := make([]int, 0, len(keyMap)) + for keyNum := range keyMap { + keyNums = append(keyNums, int(keyNum)) + } + + sqlInit := `CREATE TABLE IF NOT EXISTS keylog ( + time INTEGER primary key` + + for keyNum := range keyNums { + sqlInit += ",\n" + "KEY" + strconv.Itoa(keyNum) + " INTEGER" + } + sqlInit += "\n);" + _, err := db.Exec(sqlInit) + if err != nil { + log.Fatalf("%q: %s\n", err, sqlInit) + } + + // Inserting keymap to table + sqlInit = `CREATE TABLE IF NOT EXISTS keymap ( + num INTEGER primary key, + value STRING + );` + + _, err = db.Exec(sqlInit) + if err != nil { + log.Fatalf("%q: %s\n", err, sqlInit) + } + + tx, err := db.Begin() + if err != nil { + log.Fatal(err) + } + stmt, err := tx.Prepare("insert into keymap(num, value) values(?, ?)") + if err != nil { + log.Fatal(err) + } + defer stmt.Close() + + for keyNum, keyName := range keyMap { + _, err = stmt.Exec(keyNum, keyName) + if err != nil { + log.Fatal(err) + } + } + tx.Commit() +} + func main() { keyboardId := flag.Int("id", -1, "Your keyboard id") @@ -77,6 +130,15 @@ func main() { flag.PrintDefaults() return case *keyboardId != -1: + // Opening database + db, err := sql.Open("sqlite3", DATABASE_NAME) + if err != nil { + log.Fatal(err) + } + defer db.Close() + keyMap := GetKeymap() + + InitDb(db, keyMap) cmd := exec.Command("xinput", "test", strconv.Itoa(*keyboardId)) stdout, err := cmd.StdoutPipe()