74 lines
1.7 KiB
Go
74 lines
1.7 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"git.thcfree.dev/THCFree/TraktorNmlUtils/models/collection"
|
|
"git.thcfree.dev/THCFree/TraktorNmlUtils/models/history"
|
|
"github.com/urfave/cli/v2"
|
|
"log"
|
|
"os"
|
|
"path/filepath"
|
|
)
|
|
|
|
// Most of this code is based on the original python library https://github.com/wolkenarchitekt/traktor-nml-utils/ thus is subject to the same license reference it at LICENSE.txt
|
|
|
|
func main() {
|
|
app := &cli.App{
|
|
Flags: []cli.Flag{
|
|
&cli.IntFlag{
|
|
Name: "verbose",
|
|
Aliases: []string{"v"},
|
|
Usage: "Verbose logging",
|
|
},
|
|
&cli.BoolFlag{
|
|
Name: "debug",
|
|
Usage: "Debug logging",
|
|
},
|
|
},
|
|
Commands: []*cli.Command{
|
|
{
|
|
Name: "import",
|
|
Usage: "NML import from file or directory",
|
|
Action: func(c *cli.Context) error {
|
|
nml := c.Args().Get(0)
|
|
if nml == "" {
|
|
return fmt.Errorf("no NML file or directory specified")
|
|
}
|
|
return importFile(nml)
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
err := app.Run(os.Args)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|
|
|
|
func importFile(nml string) error {
|
|
err := filepath.Walk(nml, func(path string, info os.FileInfo, err error) error {
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if !info.IsDir() && filepath.Ext(path) == ".nml" {
|
|
fmt.Printf("Importing NML: %s\n", path)
|
|
if history.IsHistoryFile(path) {
|
|
toHistory, err := history.ReadFileAndConvertToHistory(path)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
fmt.Printf("Imported %d history entries\n", toHistory.Collection.Entries)
|
|
} else {
|
|
toCollection, err := collection.ReadFileAndConvertToCollection(path)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
fmt.Printf("Imported %d collection entries\n", len(toCollection.Collection.Entry))
|
|
}
|
|
}
|
|
return nil
|
|
})
|
|
return err
|
|
}
|