mirror of
https://github.com/AynaLivePlayer/miaosic.git
synced 2025-12-06 13:02:48 +08:00
56 lines
1.2 KiB
Go
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)
|
|
}
|