package ripsort import ( "fmt" "io/fs" "log/slog" "os" "path/filepath" "git.kapelle.org/niklas/ripsort/internal/metadata" ) func Scan(filePath string) { info, err := metadata.ReadAudioTags(filePath) if err != nil { slog.Error("Reading metadata", "file", filePath, "err", err) os.Exit(1) } fmt.Printf("Title: %s\n", info.Title) fmt.Printf("Artist: %s\n", info.Artist) fmt.Printf("Album: %s\n", info.Album) fmt.Printf("Album Artist: %s\n", info.AlbumArtist) fmt.Printf("Track: %d/%d\n", info.Track, info.TotalTracks) fmt.Printf("Comment: %s\n", info.Comment) sortPath := pathForFile(filePath, *info) fmt.Printf("Sort path: %s\n", sortPath) } func Sort(dst, path string) { info, err := os.Stat(path) if err != nil { slog.Error("Failed to stat path", "file", path, "err", err) os.Exit(1) } // Handle single file if !info.IsDir() { if !fileSupported(path) { slog.Error("Unsupported file format", "file", path) os.Exit(1) } if err := sortSong(path, dst, true); err != nil { slog.Error("Failed to sort single file", "file", path, "err", err) os.Exit(1) } return } // Handle directory err = filepath.WalkDir(path, func(p string, d fs.DirEntry, err error) error { if err != nil { slog.Error("Failed to walk path", "path", path, "file", p, "err", err) return err } if !d.IsDir() { if !fileSupported(p) { return nil } if err := sortSong(p, dst, true); err != nil { slog.Error("Failed to sort file", "file", p, "err", err) return err } } return nil }) if err != nil { os.Exit(1) } }