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
 | |
| }
 |