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