From 19f45116e42c69cbd9e59fe15b6fb229a46a376e Mon Sep 17 00:00:00 2001 From: Martin Polden Date: Tue, 21 Sep 2021 18:42:57 +0200 Subject: cmd: Try all parsers --- cmd/lftpq/main.go | 7 ++++--- cmd/lftpq/main_test.go | 29 +++++++++++++++++++++-------- 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/cmd/lftpq/main.go b/cmd/lftpq/main.go index 6b752bf..f96b5c9 100644 --- a/cmd/lftpq/main.go +++ b/cmd/lftpq/main.go @@ -93,15 +93,16 @@ func (c *CLI) classify(dirs []queue.LocalDir) error { name := filepath.Base(c.Name) sortedDirs := make([]queue.LocalDir, len(dirs)) copy(sortedDirs, dirs) - // Always try show parsers first + // Sort parsers in this order: show, movie, default sort.Slice(sortedDirs, func(i, j int) bool { - return sortedDirs[i].Parser == "show" && sortedDirs[j].Parser != "show" + return (sortedDirs[i].Parser == "show" && sortedDirs[j].Parser != "show") || + (sortedDirs[i].Parser != "" && sortedDirs[j].Parser == "") }) parsed := false for _, dir := range sortedDirs { media, err := dir.Media(name) if err != nil { - return err + continue // Try next parser } path, err := media.PathIn(dir.Template) if err != nil { diff --git a/cmd/lftpq/main_test.go b/cmd/lftpq/main_test.go index bfe6910..911801d 100644 --- a/cmd/lftpq/main_test.go +++ b/cmd/lftpq/main_test.go @@ -414,12 +414,16 @@ func TestClassify(t *testing.T) { { "LocalDirs": [ { - "Name": "d1", + "Name": "d0", + "Dir": "/media/" + }, + { + "Name": "d2", "Parser": "movie", "Dir": "/media/{{ .Year}}/" }, { - "Name": "d2", + "Name": "d3", "Parser": "show", "Dir": "/media/{{ .Name }}/S{{ .Season | Sprintf \"%02d\" }}/", "Replacements": [ @@ -433,13 +437,22 @@ func TestClassify(t *testing.T) { }`) defer os.Remove(cli.Config) - cli.Name = "/download/foo.S01E01" - if err := cli.Run(); err != nil { - t.Fatal(err) + var tests = []struct { + in string + out string + }{ + {"/download/foo.S01E01", "/media/Foo/S01/foo.S01E01\n"}, + {"/download/foo.2018", "/media/2018/foo.2018\n"}, } - want := "/media/Foo/S01/foo.S01E01\n" - if got := buf.String(); got != want { - t.Errorf("want %q, got %q", want, got) + for _, tt := range tests { + buf.Reset() + cli.Name = tt.in + if err := cli.Run(); err != nil { + t.Fatal(err) + } + if got := buf.String(); got != tt.out { + t.Errorf("want %q, got %q", tt.out, got) + } } } -- cgit v1.2.3