From 8682925f2bf9dd033591630e810a8b4d451e0254 Mon Sep 17 00:00:00 2001 From: Gabe Farrell Date: Wed, 10 Dec 2025 14:36:26 -0500 Subject: [PATCH] add pre-import clustering --- main.go | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/main.go b/main.go index 174fb0e..27747ad 100644 --- a/main.go +++ b/main.go @@ -8,6 +8,7 @@ import ( "net/http" "os" "os/exec" + "path" "path/filepath" "strings" "sync" @@ -154,6 +155,11 @@ func RunImporter() { fmt.Println("=== Starting Import ===") + if err := cluster(importDir); err != nil { + log.Println("Failed to cluster top-level audio files:", err) + return + } + entries, err := os.ReadDir(importDir) if err != nil { log.Println("Failed to read import dir:", err) @@ -234,6 +240,31 @@ func RunImporter() { fmt.Println("\n=== Import Complete ===") } +// moves all top-level audio files into folders defined by their album tags +func cluster(dir string) error { + files, err := getAudioFiles(dir) + if err != nil { + return err + } + + for _, f := range files { + tags, err := readTags(f) + if err != nil { + return err + } + err = os.MkdirAll(path.Join(dir, fmt.Sprintf("%s", sanitize(tags.Album))), 0755) + if err != nil { + return err + } + err = os.Rename(f, path.Join(dir, fmt.Sprintf("%s", sanitize(tags.Album)), path.Base(f))) + if err != nil { + return err + } + } + + return nil +} + func getAudioFiles(dir string) ([]string, error) { entries, err := os.ReadDir(dir) if err != nil {