diff --git a/cmd/dndcheck/main.go b/cmd/dndcheck/main.go new file mode 100644 index 0000000..b6864dd --- /dev/null +++ b/cmd/dndcheck/main.go @@ -0,0 +1,88 @@ +package main + +import ( + "flag" + "fmt" + "io/fs" + "log" + "os" + "path/filepath" + "sort" + "strings" + + "github.com/samber/lo" +) + +var mapSigs = map[string]string{ + "./*.jpg;./*.psd;Objects/*.png": "patreon-drmapzo-diamond", +} + +func main() { + root := flag.String("root", "", "root directory to validate") + + flag.Parse() + + if *root == "" { + log.Fatal("please specify --root") + } + + log.Printf("validating: %s", *root) + + rootFS := os.DirFS(*root) + + validateMaps(lo.Must(fs.Sub(rootFS, "Maps"))) +} + +func validateMaps(mapsFS fs.FS) { + entries := lo.Must(mapsFS.(fs.ReadDirFS).ReadDir(".")) + + for _, entry := range entries { + if strings.HasPrefix(entry.Name(), ".") { + continue + } + + log.Printf("map: %s", entry.Name()) + + mapFS := lo.Must(fs.Sub(mapsFS, entry.Name())) + validateMap(mapFS) + } +} + +func validateMap(mapFS fs.FS) { + sig := getDirSig(mapFS) + + t := mapSigs[sig] + if t == "" { + log.Fatalf("\tunrecognized signature: %s", sig) + } + + log.Printf("\ttype: %s", t) +} + +func getDirSig(root fs.FS) string { + sigSet := map[string]bool{} + + fs.WalkDir(root, ".", func(path string, entry fs.DirEntry, err error) error { + if entry.IsDir() { + return nil + } + + if strings.HasPrefix(entry.Name(), ".") { + return nil + } + + sigSet[getPathSig(path)] = true + + return nil + }) + + sigs := lo.Keys(sigSet) + sort.Strings(sigs) + + return strings.Join(sigs, ";") +} + +func getPathSig(path string) string { + parts := strings.Split(filepath.Base(path), ".") + return fmt.Sprintf("%s/*.%s", filepath.Dir(path), lo.Must(lo.Last(parts))) +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..05606f7 --- /dev/null +++ b/go.mod @@ -0,0 +1,7 @@ +module github.com/firestuff/dnd + +go 1.20 + +require github.com/samber/lo v1.38.1 + +require golang.org/x/exp v0.0.0-20220303212507-bbda1eaf7a17 // indirect diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..7a26b7e --- /dev/null +++ b/go.sum @@ -0,0 +1,4 @@ +github.com/samber/lo v1.38.1 h1:j2XEAqXKb09Am4ebOg31SpvzUTTs6EN3VfgeLUhPdXM= +github.com/samber/lo v1.38.1/go.mod h1:+m/ZKRl6ClXCE2Lgf3MsQlWfh4bn1bz6CXEOxnEXnEA= +golang.org/x/exp v0.0.0-20220303212507-bbda1eaf7a17 h1:3MTrJm4PyNL9NBqvYDSj3DHl46qQakyfqfWo4jgfaEM= +golang.org/x/exp v0.0.0-20220303212507-bbda1eaf7a17/go.mod h1:lgLbSvA5ygNOMpwM/9anMpWVlVJ7Z+cHWq/eFuinpGE=