Skip to content

Commit

Permalink
GH-4 Doing sides is now optional.
Browse files Browse the repository at this point in the history
By default, sides are disabled.
  • Loading branch information
alanxoc3 committed Jun 27, 2020
1 parent 1434e52 commit f7988fa
Show file tree
Hide file tree
Showing 6 changed files with 33 additions and 31 deletions.
8 changes: 6 additions & 2 deletions core/deck.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
19 changes: 11 additions & 8 deletions file/argparse.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ type Config struct {
IsReview bool
IsMemorize bool
IsDone bool
IsSides bool
IsPrint bool
IsStream bool

Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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

Expand Down
21 changes: 7 additions & 14 deletions file/edit.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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.")
}
Expand All @@ -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.
Expand Down
12 changes: 7 additions & 5 deletions file/txtfile.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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
Expand All @@ -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))
}
Expand Down
2 changes: 1 addition & 1 deletion main.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
Expand Down
2 changes: 1 addition & 1 deletion termboxgui/tboxapp.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down

0 comments on commit f7988fa

Please sign in to comment.