From 2e28571563cf36ff7eaac94367c509ce2980cc0a Mon Sep 17 00:00:00 2001 From: Logan Buchy Date: Tue, 12 May 2015 08:28:43 -0700 Subject: [PATCH] Update database on save instead of editor quit --- attr.go | 54 +++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 47 insertions(+), 7 deletions(-) diff --git a/attr.go b/attr.go index 9b1b69c..03f1807 100644 --- a/attr.go +++ b/attr.go @@ -14,6 +14,7 @@ import ( "strings" "text/tabwriter" "time" + "gopkg.in/fsnotify.v1" ) var out = colorable.NewColorableStdout() @@ -398,9 +399,54 @@ func (attr attrStruct) incrementFrequency(db *sql.DB) (rowsAffected int64) { return } +func (attr attrStruct) updateDb(db *sql.DB, valueText string) (rowsAffected int64) { + updateStmt, err := db.Prepare("UPDATE attributes SET value_text = ?, updated_at = CURRENT_TIMESTAMP WHERE id = ?") + check(err) + + result, err := updateStmt.Exec(valueText, attr.getID()) + check(err) + rowsAffected, err = result.RowsAffected() + check(err) + return rowsAffected +} + func (attr attrStruct) edit(db *sql.DB) (rowsAffected int64) { filepath := attr.filepath() + watcher, err := fsnotify.NewWatcher() + if err != nil { + log.Fatal(err) + } + defer watcher.Close() + done := make(chan bool) + go func() { + for { + select { + case event := <-watcher.Events: + if event.Op&fsnotify.Create == fsnotify.Create { + if (event.Name == filepath) { + valueText := readFile(filepath) + rowsAffected = attr.updateDb(db, valueText) + } + } + case err := <-watcher.Errors: + log.Println("error:", err) + case <-done: + // Edit the gofunction + return + } + } + }() + + err = watcher.Add("/tmp") + if err != nil { + log.Fatal(err) + } + + defer func() { + done <- true + }() + if openEditor(filepath) == false { return } @@ -408,13 +454,7 @@ func (attr attrStruct) edit(db *sql.DB) (rowsAffected int64) { valueText := readFile(filepath) if valueText != attr.getValue() { - updateStmt, err := db.Prepare("UPDATE attributes SET value_text = ?, updated_at = CURRENT_TIMESTAMP WHERE id = ?") - check(err) - - result, err := updateStmt.Exec(valueText, attr.getID()) - check(err) - rowsAffected, err = result.RowsAffected() - check(err) + rowsAffected = attr.updateDb(db, valueText) } return }