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