From f7988facea0f6730f7e220e1c49478a3043560fc Mon Sep 17 00:00:00 2001 From: Alan Morgan Date: Sat, 27 Jun 2020 00:42:25 -0600 Subject: [PATCH] GH-4 Doing sides is now optional. By default, sides are disabled. --- core/deck.go | 8 ++++++-- file/argparse.go | 19 +++++++++++-------- file/edit.go | 21 +++++++-------------- file/txtfile.go | 12 +++++++----- main.go | 2 +- termboxgui/tboxapp.go | 2 +- 6 files changed, 33 insertions(+), 31 deletions(-) diff --git a/core/deck.go b/core/deck.go index 90f1bbd..657646e 100644 --- a/core/deck.go +++ b/core/deck.go @@ -70,10 +70,14 @@ func (d *Deck) InsertCard(c *Card, i int) error { } } -func (d *Deck) AddCardAndSubCardsFromSides(file string, sides string) []error { +func (d *Deck) AddCardFromSides(file string, sides string, include_sides bool) []error { errors := []error{} if c, create_err := NewCard(file, sides); create_err == nil { - cards := append(c.GetSubCards(), c) + cards := []*Card{c} + if include_sides { + cards = append(cards, c.GetSubCards()...) + } + for _, c := range cards { if add_err := d.AddCard(c); add_err != nil { errors = append(errors, add_err) diff --git a/file/argparse.go b/file/argparse.go index a6627ce..a1923c1 100644 --- a/file/argparse.go +++ b/file/argparse.go @@ -12,6 +12,7 @@ type Config struct { IsReview bool IsMemorize bool IsDone bool + IsSides bool IsPrint bool IsStream bool @@ -57,14 +58,15 @@ func GenConfig() *Config { parser := argparse.NewParser("concards", "Concards is a simple CLI based SRS flashcard app.") // Create flags - f_version := parser.Flag("V", "version", &argparse.Options{Help: "Concards build information."}) - f_review := parser.Flag("r", "review", &argparse.Options{Help: "Show cards available to be reviewed"}) - f_memorize := parser.Flag("m", "memorize", &argparse.Options{Help: "Show cards available to be memorized"}) - f_done := parser.Flag("d", "done", &argparse.Options{Help: "Show cards not available to be reviewed or memorized"}) - f_print := parser.Flag("p", "print", &argparse.Options{Help: "Prints all cards, one line per card"}) - f_number := parser.Int("n", "number", &argparse.Options{Default: 0, Help: "How many cards to review"}) - f_editor := parser.String("E", "editor", &argparse.Options{Default: getDefaultEditor(), Help: "Which editor to use. Defaults to \"$EDITOR\""}) - f_meta := parser.String("M", "meta", &argparse.Options{Default: getDefaultMeta(), Help: "Path to meta file. Defaults to \"$CONCARDS_META\" or \"~/.concards-meta\""}) + f_version := parser.Flag("V", "version", &argparse.Options{Help: "Concards build information."}) + f_review := parser.Flag("r", "review", &argparse.Options{Help: "Show cards available to be reviewed."}) + f_memorize := parser.Flag("m", "memorize", &argparse.Options{Help: "Show cards available to be memorized."}) + f_done := parser.Flag("d", "done", &argparse.Options{Help: "Show cards not available to be reviewed or memorized."}) + f_sides := parser.Flag("s", "sides", &argparse.Options{Help: "Add cards for all sides."}) + f_print := parser.Flag("p", "print", &argparse.Options{Help: "Prints all cards, one line per card."}) + f_number := parser.Int("n", "number", &argparse.Options{Default: 0, Help: "How many cards to review."}) + f_editor := parser.String("E", "editor", &argparse.Options{Default: getDefaultEditor(), Help: "Which editor to use. Defaults to \"$EDITOR\""}) + f_meta := parser.String("M", "meta", &argparse.Options{Default: getDefaultMeta(), Help: "Path to meta file. Defaults to \"$CONCARDS_META\" or \"~/.concards-meta\""}) parser.HelpFunc = func(c *argparse.Command, msg interface{}) string { var help string @@ -98,6 +100,7 @@ func GenConfig() *Config { c.IsReview = *f_review c.IsMemorize = *f_memorize c.IsDone = *f_done + c.IsSides = *f_sides c.IsPrint = *f_print c.IsStream = false diff --git a/file/edit.go b/file/edit.go index 00965cb..f7bd952 100644 --- a/file/edit.go +++ b/file/edit.go @@ -8,11 +8,11 @@ import ( "github.com/alanxoc3/concards/core" ) -type DeckFunc func(string) (*core.Deck, error) +type DeckFunc func(string, *Config) (*core.Deck, error) -func ReadCards(filename string) (*core.Deck, error) { +func ReadCards(filename string, cfg *Config) (*core.Deck, error) { d := core.NewDeck() - if err := ReadCardsToDeck(d, filename); err != nil { + if err := ReadCardsToDeck(d, filename, cfg.IsSides); err != nil { return nil, err } return d, nil @@ -30,18 +30,11 @@ func EditCards(filename string, cfg *Config) (*core.Deck, error) { return nil, fmt.Errorf("Error: The editor returned an error code.") } - return ReadCards(filename) -} - - -func EditLambda(cfg *Config) DeckFunc { - return func(filename string) (*core.Deck, error) { - return EditCards(filename, cfg) - } + return ReadCards(filename, cfg) } // Assumes the deck is sorted how you want it to be sorted. -func EditFile(d *core.Deck, rf DeckFunc, ef DeckFunc) error { +func EditFile(d *core.Deck, cfg *Config, rf DeckFunc, ef DeckFunc) error { if d.IsEmpty() { return fmt.Errorf("Error: The deck is empty.") } @@ -51,11 +44,11 @@ func EditFile(d *core.Deck, rf DeckFunc, ef DeckFunc) error { filename := cur_card.GetFile() // Deck before editing. - deck_before, e := rf(filename) + deck_before, e := rf(filename, cfg) if e != nil { return e } // Deck after editing. - deck_after, e := ef(filename) + deck_after, e := ef(filename, cfg) if e != nil { return e } // Take out any card that was removed from the file. diff --git a/file/txtfile.go b/file/txtfile.go index 7981735..e7dae29 100644 --- a/file/txtfile.go +++ b/file/txtfile.go @@ -12,7 +12,7 @@ import ( ) // Open opens filename and loads cards into new deck -func ReadCardsToDeck(d *core.Deck, filename string) error { +func ReadCardsToDeck(d *core.Deck, filename string, include_sides bool) error { err := filepath.Walk(filename, func(path string, info os.FileInfo, e error) error { if e != nil { return e @@ -33,7 +33,7 @@ func ReadCardsToDeck(d *core.Deck, filename string) error { return fmt.Errorf("Error: Unable to open file \"%s\"", filename) } else { defer f.Close() - ReadCardsToDeckHelper(f, d, abs_path) + ReadCardsToDeckHelper(f, d, abs_path, include_sides) } return nil @@ -42,7 +42,7 @@ func ReadCardsToDeck(d *core.Deck, filename string) error { return err } -func ReadCardsToDeckHelper(r io.Reader, d *core.Deck, f string) { +func ReadCardsToDeckHelper(r io.Reader, d *core.Deck, f string, include_sides bool) { // Initialization. facts := []string{} state := false @@ -57,10 +57,12 @@ func ReadCardsToDeckHelper(r io.Reader, d *core.Deck, f string) { if state { if t == "@>" { - td.AddCardAndSubCardsFromSides(f, strings.Join(facts, " ")) + td.AddCardFromSides(f, strings.Join(facts, " "), include_sides) + facts = []string{} } else if t == "<@" { - td.AddCardAndSubCardsFromSides(f, strings.Join(facts, " ")) + td.AddCardFromSides(f, strings.Join(facts, " "), include_sides) + for i := 0; i < td.Len(); i++ { d.AddCard(td.GetCard(i)) } diff --git a/main.go b/main.go index 20faa05..9fb6671 100644 --- a/main.go +++ b/main.go @@ -23,7 +23,7 @@ func main() { } for _, f := range c.Files { - if err := file.ReadCardsToDeck(d, f); err != nil { + if err := file.ReadCardsToDeck(d, f, c.IsSides); err != nil { fmt.Printf("Error: File \"%s\" does not exist!\n", f) os.Exit(1) } diff --git a/termboxgui/tboxapp.go b/termboxgui/tboxapp.go index b0516d3..29d0ccc 100644 --- a/termboxgui/tboxapp.go +++ b/termboxgui/tboxapp.go @@ -81,7 +81,7 @@ func TermBoxRun(d *core.Deck, cfg *file.Config) error { d.TopToEnd() save(d) } else if inp == "e" { - err := file.EditFile(d, file.ReadCards, file.EditLambda(cfg)) + err := file.EditFile(d, cfg, file.ReadCards, file.EditCards) if err != nil { update_stat_msg(err.Error(), termbox.ColorRed)