diff --git a/cmd/am/main.go b/cmd/am/main.go index 431d8b0..855e0c9 100644 --- a/cmd/am/main.go +++ b/cmd/am/main.go @@ -7,9 +7,10 @@ import ( "os" ) -const usage = "am [flags]" +const usage = "am [flags]" const arrUsage = "am arr [-h|-cores=N] " const cleanUsage = "am clean [-h|-cores=N] " +const metaUsage = "am meta [-h|-cores=N] ... " type stats struct { total int @@ -53,6 +54,13 @@ func main() { fmt.Fprintf(os.Stderr, "problem cleaning: %v\n", err) os.Exit(1) } + case "m", "meta": + args := flag.Args() + if len(args) < 1 { + fmt.Fprintf(os.Stderr, "%s\n", metaUsage) + os.Exit(1) + } + meta(args) default: fmt.Fprintf(os.Stderr, "%s\n", usage) os.Exit(1) diff --git a/cmd/am/meta.go b/cmd/am/meta.go new file mode 100644 index 0000000..54d6d12 --- /dev/null +++ b/cmd/am/meta.go @@ -0,0 +1,42 @@ +package main + +import ( + "fmt" + "log" + "runtime" + "sync" + + "mcquay.me/arrange" +) + +func meta(files []string) { + workers := runtime.NumCPU() + if *cores != 0 { + workers = *cores + } + fc := make(chan arrange.Media) + + go func() { + wg := &sync.WaitGroup{} + s := make(chan bool, workers) + for _, f := range files { + wg.Add(1) + go func(pth string) { + s <- true + pf, err := arrange.ParseFile(pth) + if err != nil { + log.Printf("%+v", err) + } + + fc <- pf + <-s + wg.Done() + }(f) + } + wg.Wait() + close(fc) + }() + for f := range fc { + fmt.Printf("%+v: %v\n", f.Time, f.Path) + } +}