aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2021-09-21 18:42:57 +0200
committerMartin Polden <mpolden@mpolden.no>2021-09-21 18:53:54 +0200
commit19f45116e42c69cbd9e59fe15b6fb229a46a376e (patch)
treed647731e702211d31be895d5666bd5aff289fbff
parent4318414c02363e14f755b0003bfda83ee80c32ec (diff)
cmd: Try all parsers
-rw-r--r--cmd/lftpq/main.go7
-rw-r--r--cmd/lftpq/main_test.go29
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)
+ }
}
}