♻️ Move convids cmd code to internal App
This commit is contained in:
parent
64b2242567
commit
ac0baba3a8
4 changed files with 99 additions and 42 deletions
|
|
@ -4,58 +4,21 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
"codeberg.org/danjones000/utils/chill"
|
||||
c "codeberg.org/danjones000/utils/cli/context"
|
||||
e "codeberg.org/danjones000/utils/cli/err"
|
||||
"codeberg.org/danjones000/utils/cli/spin"
|
||||
"codeberg.org/danjones000/utils/convids"
|
||||
ccli "codeberg.org/danjones000/utils/internal/cli/convids"
|
||||
)
|
||||
|
||||
const dataPath = "shows.yml"
|
||||
|
||||
func main() {
|
||||
flags, err := ccli.ParseFlags(os.Args[0], os.Args[1:])
|
||||
e.HandleErr(err)
|
||||
if *ccli.Help {
|
||||
flags.Usage()
|
||||
}
|
||||
|
||||
ctx, done := c.SelfCancelingContextFromBackground()
|
||||
defer done()
|
||||
|
||||
var walker convids.ShowWalker
|
||||
if *ccli.DryRun {
|
||||
walker = convids.DryRun(os.Stdout)
|
||||
} else {
|
||||
gs := convids.GetShow(ctx)
|
||||
|
||||
walker = func(s *convids.Show, path string) error {
|
||||
ct := chill.Chill(ctx)
|
||||
msg := fmt.Sprintf("Waiting for CPU to cool, for %s", path)
|
||||
sp := spin.Spin(ct, msg)
|
||||
err := sp.Wait()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return gs(s, path)
|
||||
}
|
||||
}
|
||||
|
||||
data, err := convids.NewData(dataPath)
|
||||
app, err := ccli.NewApp(ctx, os.Args[0], os.Args[1:], dataPath, os.Stdout, os.Stdin, os.Stderr)
|
||||
e.HandleErr(err)
|
||||
|
||||
groupPrinter := convids.PrintGroupName(os.Stdout)
|
||||
|
||||
if *ccli.Loop {
|
||||
fmt.Println("looping")
|
||||
for err == nil {
|
||||
err = convids.WalkFiles(data, false, groupPrinter, walker)
|
||||
fmt.Println(err)
|
||||
}
|
||||
} else {
|
||||
err = convids.WalkFiles(data, false, groupPrinter, walker)
|
||||
}
|
||||
err = app.Run(ctx)
|
||||
e.HandleErr(err)
|
||||
|
||||
fmt.Println("Done!")
|
||||
|
|
|
|||
|
|
@ -162,13 +162,18 @@ func DryRun(out io.Writer) ShowWalker {
|
|||
}
|
||||
|
||||
func GetShow(ctx context.Context) ShowWalker {
|
||||
return GetShowWithIO(ctx, os.Stdin, os.Stdout, os.Stderr)
|
||||
}
|
||||
|
||||
func GetShowWithIO(ctx context.Context, stdin io.Reader, stdout io.Writer, stderr io.Writer) ShowWalker {
|
||||
return func(s *Show, path string) error {
|
||||
cmd := exec.CommandContext(ctx, "get-shows", s.Folder, path)
|
||||
cmd.Stdin = os.Stdin
|
||||
cmd.Stdout = os.Stdout
|
||||
cmd.Stderr = os.Stderr
|
||||
cmd.Stdin = stdin
|
||||
cmd.Stdout = stdout
|
||||
cmd.Stderr = stderr
|
||||
return cmd.Run()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func PrintGroupName(out io.Writer) GroupPrinter {
|
||||
|
|
|
|||
60
internal/cli/convids/app.go
Normal file
60
internal/cli/convids/app.go
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
package convids
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"io"
|
||||
|
||||
conutils "codeberg.org/danjones000/utils/convids"
|
||||
"github.com/spf13/pflag"
|
||||
)
|
||||
|
||||
type App struct {
|
||||
Name string
|
||||
Data *conutils.Data
|
||||
flags *pflag.FlagSet
|
||||
stdout io.Writer
|
||||
stderr io.Writer
|
||||
stdin io.Reader
|
||||
walker conutils.ShowWalker
|
||||
groupPrinter conutils.GroupPrinter
|
||||
}
|
||||
|
||||
func NewApp(ctx context.Context, name string, args []string, dataPath string, stdout io.Writer, stdin io.Reader, stderr io.Writer) (*App, error) {
|
||||
a := App{Name: name, stdout: stdout, stdin: stdin, stderr: stderr}
|
||||
var err error
|
||||
a.flags, err = ParseFlags(name, args)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
a.walker = GetWalker(ctx, *DryRun, stdin, stdout, stderr)
|
||||
a.Data, err = conutils.NewData(dataPath)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
a.groupPrinter = conutils.PrintGroupName(stdout)
|
||||
|
||||
return &a, nil
|
||||
}
|
||||
|
||||
func (a *App) Run(ctx context.Context) error {
|
||||
if *Loop {
|
||||
return a.runInLoop(ctx)
|
||||
}
|
||||
return a.run(ctx)
|
||||
}
|
||||
|
||||
func (a *App) run(ctx context.Context) error {
|
||||
return conutils.WalkFiles(a.Data, false, a.groupPrinter, a.walker)
|
||||
}
|
||||
|
||||
func (a *App) runInLoop(ctx context.Context) error {
|
||||
fmt.Fprintln(a.stdout, "Looping")
|
||||
var err error
|
||||
for err == nil {
|
||||
err = a.run(ctx)
|
||||
fmt.Fprintln(a.stdout, err)
|
||||
}
|
||||
return err
|
||||
}
|
||||
29
internal/cli/convids/walker.go
Normal file
29
internal/cli/convids/walker.go
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
package convids
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"io"
|
||||
|
||||
"codeberg.org/danjones000/utils/chill"
|
||||
"codeberg.org/danjones000/utils/cli/spin"
|
||||
conutils "codeberg.org/danjones000/utils/convids"
|
||||
)
|
||||
|
||||
func GetWalker(ctx context.Context, dryRun bool, in io.Reader, out, errOut io.Writer) conutils.ShowWalker {
|
||||
if dryRun {
|
||||
return conutils.DryRun(out)
|
||||
}
|
||||
|
||||
gs := conutils.GetShowWithIO(ctx, in, out, errOut)
|
||||
return func(s *conutils.Show, path string) error {
|
||||
ct := chill.Chill(ctx)
|
||||
msg := fmt.Sprintf("Waiting for CPU to cool, for %s", path)
|
||||
sp := spin.Spin(ct, msg)
|
||||
err := sp.Wait()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return gs(s, path)
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue