Files
ripsort/internal/ripsort.go

77 lines
1.6 KiB
Go

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("Disc: %d/%d\n", info.Disc, info.TotalDiscs)
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)
}
}