update metadata tags when sorting
This commit is contained in:
@@ -8,6 +8,8 @@ import (
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
"strings"
|
||||
|
||||
"git.kapelle.org/niklas/ripsort/internal/metadata"
|
||||
)
|
||||
|
||||
func fileSupported(file string) bool {
|
||||
@@ -19,8 +21,8 @@ func fileSupported(file string) bool {
|
||||
return supported[strings.ToLower(filepath.Ext(file))]
|
||||
}
|
||||
|
||||
func sortSong(src, dst string) error {
|
||||
m, err := ReadAudioTags(src)
|
||||
func sortSong(src, dst string, updateMeta bool) error {
|
||||
m, err := metadata.ReadAudioTags(src)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -28,10 +30,20 @@ func sortSong(src, dst string) error {
|
||||
dstPath := pathForFile(src, *m)
|
||||
finalPath := filepath.Join(dst, dstPath)
|
||||
|
||||
slog.Info("Copying song", "file", src, "dst", dstPath)
|
||||
err = copyFile(src, finalPath)
|
||||
if err != nil {
|
||||
return err
|
||||
if updateMeta {
|
||||
|
||||
slog.Info("Copying song with updated metadata", "file", src, "dst", dstPath)
|
||||
err = copyFileUpdateMetadata(src, finalPath, *m)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
|
||||
slog.Info("Copying song", "file", src, "dst", dstPath)
|
||||
err = copyFile(src, finalPath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
extraFiles := checkForExtraFiles(src)
|
||||
@@ -66,7 +78,7 @@ func sanitizeName(name string) *string {
|
||||
return &name
|
||||
}
|
||||
|
||||
func getArtistName(m metadata) string {
|
||||
func getArtistName(m metadata.Metadata) string {
|
||||
var artist *string
|
||||
|
||||
if len(m.Artist) > 0 {
|
||||
@@ -86,7 +98,7 @@ func getArtistName(m metadata) string {
|
||||
return *artist
|
||||
}
|
||||
|
||||
func getAlbumName(m metadata) string {
|
||||
func getAlbumName(m metadata.Metadata) string {
|
||||
album := sanitizeName(m.Album)
|
||||
if album == nil {
|
||||
return "Unknown Album"
|
||||
@@ -94,7 +106,7 @@ func getAlbumName(m metadata) string {
|
||||
return *album
|
||||
}
|
||||
|
||||
func getTitle(src string, m metadata) string {
|
||||
func getTitle(src string, m metadata.Metadata) string {
|
||||
title := sanitizeName(m.Title)
|
||||
if title == nil {
|
||||
return *sanitizeName(strings.TrimSuffix(filepath.Base(src), filepath.Ext(src)))
|
||||
@@ -102,7 +114,7 @@ func getTitle(src string, m metadata) string {
|
||||
return *title
|
||||
}
|
||||
|
||||
func pathForFile(src string, m metadata) string {
|
||||
func pathForFile(src string, m metadata.Metadata) string {
|
||||
ext := strings.ToLower(filepath.Ext(src))
|
||||
|
||||
artist := getArtistName(m)
|
||||
@@ -114,6 +126,22 @@ func pathForFile(src string, m metadata) string {
|
||||
return filepath.Join(artist, album, filename)
|
||||
}
|
||||
|
||||
func copyFileUpdateMetadata(src, dst string, m metadata.Metadata) error {
|
||||
ext := strings.ToLower(filepath.Ext(src))
|
||||
|
||||
if ext != ".flac" {
|
||||
slog.Warn("Copying file without updating metadata. Unsupported format", "file", src)
|
||||
return copyFile(src, dst)
|
||||
}
|
||||
|
||||
dir := filepath.Dir(dst)
|
||||
if err := os.MkdirAll(dir, 0o755); err != nil {
|
||||
return fmt.Errorf("create destination directory: %w", err)
|
||||
}
|
||||
|
||||
return metadata.UpdateMetadata(src, dst, m)
|
||||
}
|
||||
|
||||
func copyFile(src, dst string) error {
|
||||
in, err := os.Open(src)
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user