diff --git a/cmd/scan.go b/cmd/scan.go index 41d28107..e587b893 100644 --- a/cmd/scan.go +++ b/cmd/scan.go @@ -4,7 +4,6 @@ import ( "context" "encoding/gob" "os" - "strings" "github.com/navidrome/navidrome/core" "github.com/navidrome/navidrome/db" @@ -19,13 +18,13 @@ import ( var ( fullScan bool subprocess bool - targets string + targets []string ) func init() { scanCmd.Flags().BoolVarP(&fullScan, "full", "f", false, "check all subfolders, ignoring timestamps") scanCmd.Flags().BoolVarP(&subprocess, "subprocess", "", false, "run as subprocess (internal use)") - scanCmd.Flags().StringVarP(&targets, "targets", "t", "", "comma-separated list of libraryID:folderPath pairs (e.g., \"1:Music/Rock,1:Music/Jazz,2:Classical\")") + scanCmd.Flags().StringArrayVarP(&targets, "target", "t", []string{}, "list of libraryID:folderPath pairs, can be repeated (e.g., \"-t 1:Music/Rock -t 1:Music/Jazz -t 2:Classical\")") rootCmd.AddCommand(scanCmd) } @@ -74,9 +73,9 @@ func runScanner(ctx context.Context) { // Parse targets if provided var scanTargets []model.ScanTarget - if targets != "" { + if len(targets) > 0 { var err error - scanTargets, err = model.ParseTargets(strings.Split(targets, ",")) + scanTargets, err = model.ParseTargets(targets) if err != nil { log.Fatal(ctx, "Failed to parse targets", err) } diff --git a/scanner/external.go b/scanner/external.go index b6d7639b..f5a117e4 100644 --- a/scanner/external.go +++ b/scanner/external.go @@ -8,12 +8,10 @@ import ( "io" "os" "os/exec" - "strings" "github.com/navidrome/navidrome/conf" "github.com/navidrome/navidrome/log" "github.com/navidrome/navidrome/model" - "github.com/navidrome/navidrome/utils/slice" ) // scannerExternal is a scanner that runs an external process to do the scanning. It is used to avoid @@ -47,9 +45,10 @@ func (s *scannerExternal) scan(ctx context.Context, fullScan bool, targets []mod // Add targets if provided if len(targets) > 0 { - targetsStr := strings.Join(slice.Map(targets, func(t model.ScanTarget) string { return t.String() }), ",") - args = append(args, "--targets", targetsStr) - log.Debug(ctx, "Spawning external scanner process with targets", "fullScan", fullScan, "path", exe, "targets", targetsStr) + for _, target := range targets { + args = append(args, "-t", target.String()) + } + log.Debug(ctx, "Spawning external scanner process with targets", "fullScan", fullScan, "path", exe, "targets", targets) } else { log.Debug(ctx, "Spawning external scanner process", "fullScan", fullScan, "path", exe) }