aboutsummaryrefslogtreecommitdiffstats
path: root/cmd/lftpq/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/lftpq/main.go')
-rw-r--r--cmd/lftpq/main.go53
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 {