60 lines
1.3 KiB
Go
60 lines
1.3 KiB
Go
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
|
|
}
|