Files
miaosic/tag/writer.go
2025-08-06 00:29:00 +08:00

56 lines
1.2 KiB
Go

package tag
import (
"errors"
"github.com/gabriel-vasile/mimetype"
"io"
"os"
)
func fixMeta(meta *Metadata) {
// fix picture meme
for idx, _ := range meta.Pictures {
if meta.Pictures[idx].Mimetype == "" {
meta.Pictures[idx].Mimetype = mimetype.Detect(meta.Pictures[idx].Data).String()
}
}
}
// Write metadata to file, input file will be closed after this method
func Write(f *os.File, meta Metadata) error {
_, err := f.Seek(0, io.SeekStart)
if err != nil {
return err
}
b := make([]byte, 512)
_, err = io.ReadFull(f, b)
if err != nil {
return err
}
mimeType := mimetype.Detect(b).String()
_, err = f.Seek(0, io.SeekStart)
fixMeta(&meta)
switch mimeType {
case "audio/flac", "audio/x-flac":
return WriteFlacTags(f, meta)
//case string(b[0:4]) == "OggS":
// return ReadOGGTags(r)
//case string(b[4:8]) == "ftyp":
// return ReadAtoms(r)
case "audio/mpeg":
return WriteID3v2Tags(f, meta)
//case string(b[0:4]) == "DSD ":
// return ReadDSFTags(r)
}
return errors.New("miaosic: mime-type not supported")
}
func WriteTo(path string, meta Metadata) error {
file, err := os.Open(path)
defer file.Close()
if err != nil {
return err
}
return Write(file, meta)
}