diff --git a/convids/logic.go b/convids/logic.go index da53737..53a9618 100644 --- a/convids/logic.go +++ b/convids/logic.go @@ -1,6 +1,7 @@ package convids import ( + "bufio" "cmp" "context" "errors" @@ -165,14 +166,49 @@ func GetShow(ctx context.Context) ShowWalker { func GetShowWithIO(ctx context.Context, stdin io.Reader, stdout, stderr io.Writer) ShowWalker { return func(s *Show, path string) error { - //nolint:gosec // I don't care if this is using user input - cmd := exec.CommandContext(ctx, "get-shows", s.Folder, path) - cmd.Stdin = stdin - cmd.Stdout = stdout - cmd.Stderr = stderr - return cmd.Run() - } + if !s.Url { + return runGetShowsCmd(ctx, s.Folder, path, stdin, stdout, stderr) + } + orig := path + //nolint:gosec // I don't care if this is user input + readFile, err := os.Open(orig) + if err != nil { + return err + } + //nolint:errcheck // I don't care + defer readFile.Close() + + fileScan := bufio.NewScanner(readFile) + fileScan.Split(bufio.ScanLines) + + for fileScan.Scan() { + path = fileScan.Text() + err := runGetShowsCmd(ctx, s.Folder, path, stdin, stdout, stderr) + if err != nil { + return err + } + } + + if s.Backup != "" { + err = os.Rename(orig, fp.Join(s.Backup, fp.Base(orig))) + if err != nil { + _, _ = fmt.Fprintf(stdout, "Moved %s to %s\n", orig, s.Backup) + } + } else { + err = os.Remove(orig) + } + return err + } +} + +func runGetShowsCmd(ctx context.Context, folder, path string, stdin io.Reader, stdout, stderr io.Writer) error { + //nolint:gosec // I don't care if this is using user input + cmd := exec.CommandContext(ctx, "get-shows", folder, path) + cmd.Stdin = stdin + cmd.Stdout = stdout + cmd.Stderr = stderr + return cmd.Run() } func PrintGroupName(out io.Writer) GroupPrinter { diff --git a/convids/models.go b/convids/models.go index 58b8992..ce23ca8 100644 --- a/convids/models.go +++ b/convids/models.go @@ -25,6 +25,8 @@ type Show struct { Pattern string Name string Anime bool + Url bool + Backup string Sources []string re *regexp.Regexp