From d5e7f601b6c082eaaa10ec8261c5f3146668cce3 Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Mon, 4 Nov 2024 15:20:09 -0600 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Better=20names=20and=20add?= =?UTF-8?q?=20printing=20methods?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd/convids/main.go | 12 ++++++++---- convids/logic.go | 25 +++++++++++++++++++++++-- convids/methods.go | 19 +++++++++---------- convids/models.go | 2 +- 4 files changed, 41 insertions(+), 17 deletions(-) diff --git a/cmd/convids/main.go b/cmd/convids/main.go index 08479a0..fd53b65 100644 --- a/cmd/convids/main.go +++ b/cmd/convids/main.go @@ -14,6 +14,7 @@ const dataPath = "shows.yml" func main() { loop := pflag.BoolP("loop", "l", false, "Loop") help := pflag.BoolP("help", "h", false, "Get Help") + dryRun := pflag.BoolP("dry-run", "d", false, "Do a dry run") pflag.Parse() if *help { @@ -21,6 +22,12 @@ func main() { os.Exit(2) } + *dryRun = true // @todo temp + var walker convids.ShowWalker + if *dryRun { + walker = convids.DryRun(os.Stdout) + } + if *loop { fmt.Println("looping") } @@ -28,9 +35,6 @@ func main() { data, err := convids.NewData(dataPath) e.HandleErr(err) - convids.WalkFiles(data, false, false, func(s *convids.Show, path string) error { - fmt.Printf("%s for %+v\n", path, s) - return nil - }) + convids.WalkFiles(data, false, convids.PrintGroupName(os.Stdout), walker) fmt.Println("Done!") } diff --git a/convids/logic.go b/convids/logic.go index 0962ab3..2909c1c 100644 --- a/convids/logic.go +++ b/convids/logic.go @@ -1,6 +1,8 @@ package convids import ( + "fmt" + "io" "os" fp "path/filepath" "regexp" @@ -28,17 +30,23 @@ func ensureExtRe(c *Config) (err error) { return } -func WalkFiles(d *Data, stopOnError, silent bool, cb func(s *Show, path string) error) (err error) { +type ShowWalker func(show *Show, path string) error +type GroupPrinter func(name string, group Shows) + +func WalkFiles(d *Data, stopOnError bool, gp GroupPrinter, cb ShowWalker) (err error) { err = ensureExtRe(d.Config) if err != nil { return } + if cb == nil { + cb = DryRun(os.Stdout) + } var files []os.DirEntry files, err = os.ReadDir(d.Config.Source) if err != nil { return } - for s := range d.AllShows(silent) { + for s := range d.AllShows(gp) { var found bool for _, file := range files { if file.IsDir() { @@ -62,3 +70,16 @@ func WalkFiles(d *Data, stopOnError, silent bool, cb func(s *Show, path string) } return nil } + +func DryRun(out io.Writer) ShowWalker { + return func(s *Show, path string) error { + fmt.Fprintf(out, "Saving %s to %s\n", path, s.Folder) + return nil + } +} + +func PrintGroupName(out io.Writer) GroupPrinter { + return func(name string, group Shows) { + fmt.Fprintf(out, "Checking %s shows\n\n", name) + } +} diff --git a/convids/methods.go b/convids/methods.go index 8162848..e10a8a9 100644 --- a/convids/methods.go +++ b/convids/methods.go @@ -2,7 +2,6 @@ package convids import ( "errors" - "fmt" "iter" "regexp" "slices" @@ -57,24 +56,24 @@ func (ss *Shows) All() iter.Seq[*Show] { return slices.Values(*ss) } -func (d *Data) AllShows(silent bool) iter.Seq[*Show] { +func (d *Data) AllShows(outputGroup GroupPrinter) iter.Seq[*Show] { return func(yield func(*Show) bool) { if d == nil || d.Config == nil { return } - for _, show := range d.Config.Shows { - sh := (*d.Shows)[show] - if sh == nil || len(*sh) < 1 { + for _, groupName := range d.Config.Groups { + group := (*d.Shows)[groupName] + if group == nil || len(*group) < 1 { continue } - if !silent { - fmt.Printf("Checking %s shows\n\n", show) + if outputGroup != nil { + outputGroup(groupName, *group) } - for s := range sh.All() { - if s == nil { + for sh := range group.All() { + if sh == nil { continue } - if !yield(s) { + if !yield(sh) { return } } diff --git a/convids/models.go b/convids/models.go index 1ae6448..55d0e64 100644 --- a/convids/models.go +++ b/convids/models.go @@ -10,7 +10,7 @@ type Data struct { type Config struct { Source string Extensions []string - Shows []string + Groups []string extRe *regexp.Regexp }