diff options
Diffstat (limited to 'cmd/lftpq/main.go')
-rw-r--r-- | cmd/lftpq/main.go | 53 |
1 files changed, 30 insertions, 23 deletions
diff --git a/cmd/lftpq/main.go b/cmd/lftpq/main.go index 65837d7..6b752bf 100644 --- a/cmd/lftpq/main.go +++ b/cmd/lftpq/main.go @@ -7,10 +7,10 @@ import ( "os" "os/signal" "path/filepath" + "sort" "syscall" "github.com/mpolden/lftpq/lftp" - "github.com/mpolden/lftpq/parser" "github.com/mpolden/lftpq/queue" ) @@ -66,28 +66,7 @@ func (c *CLI) Run() error { return nil } if c.Name != "" { - name := filepath.Base(c.Name) - media, parserName, err := parser.Guess(name) - if err != nil { - return err - } - templateFound := false - for _, dir := range cfg.LocalDirs { - if dir.Parser != parserName { - continue - } - path, err := media.PathIn(dir.Template) - if err != nil { - return err - } - templateFound = true - fmt.Fprintln(c.stdout, path) - break - } - if !templateFound { - return fmt.Errorf("no template set for parser: %s", parserName) - } - return nil + return c.classify(cfg.LocalDirs) } var queues []queue.Queue if c.Import { @@ -110,6 +89,34 @@ func (c *CLI) Run() error { return nil } +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.Slice(sortedDirs, func(i, j int) bool { + return sortedDirs[i].Parser == "show" && sortedDirs[j].Parser != "show" + }) + parsed := false + for _, dir := range sortedDirs { + media, err := dir.Media(name) + if err != nil { + return err + } + path, err := media.PathIn(dir.Template) + if err != nil { + return err + } + parsed = true + fmt.Fprintln(c.stdout, path) + break + } + if !parsed { + return fmt.Errorf("parsing failed: %q", name) + } + return nil +} + func (c *CLI) lockfile() string { return filepath.Join(os.TempDir(), ".lftpqlock") } func (c *CLI) lock() error { |