diff --git a/main.go b/main.go index 9b5aee7..92ca940 100644 --- a/main.go +++ b/main.go @@ -218,24 +218,33 @@ func RunWith(ctx context.Context, outd, ind string, patterns []string, overrides if err != nil { return err } + done := map[int]bool{} for _, pattern := range patterns { - for _, entry := range entries { + for i, entry := range entries { + if done[i] { + continue + } if !entry.Type().IsRegular() && !(Debug && Dry) { continue } - if err := one(ctx, outd, path.Join(ind, entry.Name()), []string{pattern}, overrides, mvNLn); err != nil { + if match, err := one(ctx, outd, path.Join(ind, entry.Name()), []string{pattern}, overrides, mvNLn); err != nil { return err + } else if match { + done[i] = true } } } return nil } -func one(ctx context.Context, outd, inf string, patterns []string, overrides Fields, mvNLn MvNLn) error { +func one(ctx context.Context, outd, inf string, patterns []string, overrides Fields, mvNLn MvNLn) (bool, error) { f := path.Base(inf) for _, pattern := range patterns { found, match := Parse(f, pattern) if !match { + if Debug { + log.Printf("%q does not match %q", pattern, f) + } continue } @@ -250,14 +259,20 @@ func one(ctx context.Context, outd, inf string, patterns []string, overrides Fie } if found.Title == "" || found.Season == "" || found.Episode == "" { + if Debug { + log.Printf("%q does not match all %q: %+v", pattern, f, found) + } continue } found.Title = strings.ReplaceAll(found.Title, ".", " ") found.Title = strings.Join(strings.Fields(found.Title), "_") - return foundOne(ctx, outd, inf, found, mvNLn) + if Debug { + log.Printf("%q matches %q as %+v", pattern, f, found) + } + return true, foundOne(ctx, outd, inf, found, mvNLn) } - return nil + return false, nil } func Parse(f string, pattern string) (Fields, bool) { diff --git a/main_test.go b/main_test.go index 782d123..8b1b619 100644 --- a/main_test.go +++ b/main_test.go @@ -264,6 +264,7 @@ func TestRecursive(t *testing.T) { notExists(t, path.Join(outd, "D", "title_S02E04.d")) notExists(t, path.Join(outd, "title_S03E06.e")) exists(t, path.Join(outd, "F", "Dr_Stone_S04E12.mkv")) + notExists(t, path.Join(outd, "F", "[Yameii]_Dr_Stone_-_S04E12.mkv")) } func write(f string, b ...string) {