update metadata tags when sorting
This commit is contained in:
57
internal/metadata/vobis.go
Normal file
57
internal/metadata/vobis.go
Normal file
@@ -0,0 +1,57 @@
|
||||
package metadata
|
||||
|
||||
import (
|
||||
"log/slog"
|
||||
"strconv"
|
||||
|
||||
"github.com/go-flac/flacvorbis/v2"
|
||||
"github.com/go-flac/go-flac/v2"
|
||||
)
|
||||
|
||||
func updateFlacMetadata(m Metadata, input, output string) error {
|
||||
f, err := flac.ParseFile(input)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
vorbisMeta := createVorbisMetaBlock(m)
|
||||
meta := vorbisMeta.Marshal()
|
||||
|
||||
replaced := false
|
||||
for i, block := range f.Meta {
|
||||
if block.Type == flac.VorbisComment {
|
||||
f.Meta[i] = &meta
|
||||
replaced = true
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if !replaced {
|
||||
f.Meta = append(f.Meta, &meta)
|
||||
}
|
||||
|
||||
return f.Save(output)
|
||||
}
|
||||
|
||||
func createVorbisMetaBlock(m Metadata) flacvorbis.MetaDataBlockVorbisComment {
|
||||
vorbisMeta := flacvorbis.New()
|
||||
|
||||
vorbisMeta.Add(flacvorbis.FIELD_TITLE, m.Title)
|
||||
vorbisMeta.Add(flacvorbis.FIELD_ALBUM, m.Album)
|
||||
vorbisMeta.Add("COMMENT", m.Comment)
|
||||
vorbisMeta.Add("TRACKNUMBER", strconv.Itoa(m.Track))
|
||||
vorbisMeta.Add("TOTALTRACKS", strconv.Itoa(m.TotalTracks))
|
||||
vorbisMeta.Add("DISCNUMBER", strconv.Itoa(m.Disc))
|
||||
vorbisMeta.Add("TOTALDISCS", strconv.Itoa(m.TotalDiscs))
|
||||
|
||||
for _, artist := range m.Artist {
|
||||
vorbisMeta.Add(flacvorbis.FIELD_ARTIST, artist)
|
||||
slog.Debug("Added ARTIST filed to metadata", "artist", artist)
|
||||
}
|
||||
|
||||
for _, albumArtist := range m.AlbumArtist {
|
||||
vorbisMeta.Add("ALBUMARTIST", albumArtist)
|
||||
}
|
||||
|
||||
return *vorbisMeta
|
||||
}
|
||||
Reference in New Issue
Block a user