diff --git a/anki.d b/anki.d index fa162e2..99a40e4 100755 Binary files a/anki.d and b/anki.d differ diff --git a/main.go b/main.go index 8b3ba7a..4634b17 100644 --- a/main.go +++ b/main.go @@ -16,7 +16,7 @@ type ( HistoryOf(string) map[string][]History Next(string, string) time.Time Question(string) Question - LastAnswer(string, string) Answer + LastAnswer(string, string) (string, Answer) Answer(string) Answer PushAnswer(string, string, string, bool) error } @@ -76,13 +76,21 @@ func Main() error { if len(question.Clues) == 0 || response == "/clue" { response = readline() } - if lastAnswer := db.Answer(db.LastAnswer(user, q).A); lastAnswer.A != "" { + if id, _ := db.LastAnswer(user, q); id == "" { + } else if lastAnswer := db.Answer(id); lastAnswer.A != "" { fmt.Printf("> Last time, you responded:\n\t%s\n", lastAnswer.A) } - fmt.Printf("> Did you pass this time? [Yn] ") - pass := readline() == "n" - if err := db.PushAnswer(user, q, response, pass); err != nil { - return err + fmt.Printf("> Did you pass this time? [Yns]\n") + switch readline() { + case "s": + case "n": + if err := db.PushAnswer(user, q, response, false); err != nil { + return err + } + default: + if err := db.PushAnswer(user, q, response, true); err != nil { + return err + } } fmt.Println() } diff --git a/testdata/sample.yaml b/testdata/sample.yaml index e601778..bb5861c 100644 --- a/testdata/sample.yaml +++ b/testdata/sample.yaml @@ -14,10 +14,16 @@ knowledge: a: a schema ts: 123 author: breel + uuid0: + q: uuid1 + a: not a schema + ts: 122 + author: breel users: breel: history: uuid1: + - {a: uuid0, pass: true} - {a: uuid2, pass: true} cadence: - 1d diff --git a/yamldb.go b/yamldb.go index b26440f..bc2af20 100644 --- a/yamldb.go +++ b/yamldb.go @@ -47,13 +47,18 @@ func (db yamlDB) Question(q string) Question { return db.Knowledge.Questions[q] } -func (db yamlDB) LastAnswer(user, q string) Answer { - for _, v := range db.Knowledge.Answers { +func (db yamlDB) LastAnswer(user, q string) (string, Answer) { + maxk := "" + var maxv Answer + for k, v := range db.Knowledge.Answers { if v.Q == q && v.Author == user { - return v + if maxv.TS < v.TS { + maxk = k + maxv = v + } } } - return Answer{} + return maxk, maxv } func (db yamlDB) Answer(a string) Answer {