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 }