diff --git a/anki.d b/anki.d index 4714fe2..0c06022 100755 Binary files a/anki.d and b/anki.d differ diff --git a/main.go b/main.go index a2bbb38..c8808b6 100644 --- a/main.go +++ b/main.go @@ -13,30 +13,35 @@ import ( type ( DB interface { - HistoryOf(string) map[string][]History - Next(string, string) time.Time - Question(string) Question - LastAnswer(string, string) (string, Answer) - Answer(string) Answer - PushAnswer(string, string, string, bool) error + HistoryOf(IDU) map[IDQ][]History + Next(IDU, IDQ) time.Time + Question(IDQ) Question + LastAnswer(IDU, IDQ) (IDA, Answer) + Answer(IDA) Answer + PushAnswer(IDU, IDQ, Renderable, bool) error Close() } Question struct { - Q string - Clues []string - Tags []string + Q Renderable + Clues []Renderable + Tags []IDT } Answer struct { - Q string - A string + Q IDQ + A Renderable TS int64 - Author string + Author IDU } History struct { - A string + A IDA TS int64 Pass bool } + IDA string + IDQ string + IDU string + IDT string + Renderable string ) func main() { @@ -51,14 +56,14 @@ func Main() error { return err } defer db.Close() - user := os.Getenv("USER") + user := IDU(os.Getenv("USER")) for q, _ := range db.HistoryOf(user) { if time.Until(db.Next(user, q)) > 0 { continue } question := db.Question(q) fmt.Printf("> Q: ") - if strings.HasPrefix(question.Q, "img:") { + if strings.HasPrefix(string(question.Q), "img:") { } else { fmt.Printf("%s", question.Q) } @@ -90,11 +95,11 @@ func Main() error { switch readline() { case "s": case "n": - if err := db.PushAnswer(user, q, response, false); err != nil { + if err := db.PushAnswer(user, q, Renderable(response), false); err != nil { return err } default: - if err := db.PushAnswer(user, q, response, true); err != nil { + if err := db.PushAnswer(user, q, Renderable(response), true); err != nil { return err } } @@ -117,7 +122,7 @@ func NewDB() (DB, error) { return newYamlDB(os.Getenv("DB")) } -func (q Question) Tagged(tag string) bool { +func (q Question) Tagged(tag IDT) bool { for i := range q.Tags { if q.Tags[i] == tag { return true diff --git a/yamldb.go b/yamldb.go index 263c344..6c29d3e 100644 --- a/yamldb.go +++ b/yamldb.go @@ -12,19 +12,19 @@ type ( yamlDB struct { addr string Knowledge knowledge - Users map[string]user + Users map[IDU]user Cadence []duration } knowledge struct { - Questions map[string]Question - Answers map[string]Answer + Questions map[IDQ]Question + Answers map[IDA]Answer } user struct { Tags tags - History map[string][]History + History map[IDQ][]History } tags struct { - Assignments []string + Assignments []IDT } ) @@ -32,10 +32,10 @@ func newYamlDB(p string) (yamlDB, error) { db := yamlDB{ addr: p, Knowledge: knowledge{ - Questions: map[string]Question{}, - Answers: map[string]Answer{}, + Questions: map[IDQ]Question{}, + Answers: map[IDA]Answer{}, }, - Users: map[string]user{}, + Users: map[IDU]user{}, Cadence: []duration{}, } if b, err := os.ReadFile(p); err != nil { @@ -62,8 +62,8 @@ func (db yamlDB) Close() { } } -func (db yamlDB) HistoryOf(user string) map[string][]History { - result := map[string][]History{} +func (db yamlDB) HistoryOf(user IDU) map[IDQ][]History { + result := map[IDQ][]History{} for k, v := range db.Users[user].History { result[k] = append([]History{}, v...) } @@ -77,7 +77,7 @@ func (db yamlDB) HistoryOf(user string) map[string][]History { return result } -func (db yamlDB) Next(user, q string) time.Time { +func (db yamlDB) Next(user IDU, q IDQ) time.Time { history := db.Users[user].History[q] progress := 0 for i := range history { @@ -95,12 +95,12 @@ func (db yamlDB) Next(user, q string) time.Time { return db.lastTS(user, q).Add(time.Duration(db.Cadence[progress])) } -func (db yamlDB) Question(q string) Question { +func (db yamlDB) Question(q IDQ) Question { return db.Knowledge.Questions[q] } -func (db yamlDB) LastAnswer(user, q string) (string, Answer) { - maxk := "" +func (db yamlDB) LastAnswer(user IDU, q IDQ) (IDA, Answer) { + var maxk IDA var maxv Answer for k, v := range db.Knowledge.Answers { if v.Q == q && v.Author == user { @@ -113,12 +113,12 @@ func (db yamlDB) LastAnswer(user, q string) (string, Answer) { return maxk, maxv } -func (db yamlDB) Answer(a string) Answer { +func (db yamlDB) Answer(a IDA) Answer { return db.Knowledge.Answers[a] } -func (db yamlDB) PushAnswer(user, q, a string, pass bool) error { - uuid := uuid.New().String() +func (db yamlDB) PushAnswer(user IDU, q IDQ, a Renderable, pass bool) error { + uuid := IDA(uuid.New().String()) db.Knowledge.Answers[uuid] = Answer{ Q: q, A: a, @@ -133,7 +133,7 @@ func (db yamlDB) PushAnswer(user, q, a string, pass bool) error { return nil } -func (db yamlDB) lastTS(user, q string) time.Time { +func (db yamlDB) lastTS(user IDU, q IDQ) time.Time { max := int64(0) for _, v := range db.Users[user].History[q] { if v.TS > max {