Files
ripsort/internal/metadata.go
2026-04-07 18:58:24 +02:00

66 lines
1.3 KiB
Go

package ripsort
import (
"fmt"
"os"
"strings"
"github.com/dhowden/tag"
)
type metadata struct {
Format tag.Format
FileType tag.FileType
Title string
Artist []string
Album string
AlbumArtist []string
Composer []string
Genre string
Year int
Track int
TotalTracks int
Disc int
TotalDiscs int
Lyrics string
Comment string
HasPicture bool
}
func ReadAudioTags(filePath string) (*metadata, error) {
f, err := os.Open(filePath)
if err != nil {
return nil, fmt.Errorf("failed to open file: %w", err)
}
defer f.Close()
m, err := tag.ReadFrom(f)
if err != nil {
return nil, fmt.Errorf("failed to read tags: %w", err)
}
track, totalTracks := m.Track()
disc, totalDiscs := m.Disc()
info := &metadata{
Format: m.Format(),
FileType: m.FileType(),
Title: m.Title(),
Artist: strings.Split(m.Artist(), ";"),
Album: m.Album(),
AlbumArtist: strings.Split(m.AlbumArtist(), ";"),
Composer: strings.Split(m.Composer(), ";"),
Genre: m.Genre(),
Year: m.Year(),
Track: track,
TotalTracks: totalTracks,
Disc: disc,
TotalDiscs: totalDiscs,
Lyrics: m.Lyrics(),
Comment: m.Comment(),
HasPicture: m.Picture() != nil,
}
return info, nil
}