mirror of
https://github.com/Superredstone/spotiflac-cli.git
synced 2026-03-07 20:18:07 +01:00
68 lines
1.3 KiB
Go
68 lines
1.3 KiB
Go
package lib
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
|
|
id3v2 "github.com/bogem/id3v2/v2"
|
|
)
|
|
|
|
func (app *App) GetTrackMetadata(url string) (TrackMetadata, error) {
|
|
app.log("Getting metadata for " + url)
|
|
|
|
client := NewSpotifyClient()
|
|
var result TrackMetadata
|
|
|
|
err := client.Initialize()
|
|
if err != nil {
|
|
return result, errors.New("Unable to fetch Spotify metadata.")
|
|
}
|
|
|
|
trackId, err := ParseTrackId(url)
|
|
if err != nil {
|
|
return result, err
|
|
}
|
|
|
|
payload := BuildSpotifyReqPayloadTrack(trackId)
|
|
|
|
rawMetadata, err := client.Query(payload)
|
|
if err != nil {
|
|
return result, err
|
|
}
|
|
|
|
byteMetadata, err := json.Marshal(rawMetadata)
|
|
err = json.Unmarshal(byteMetadata, &result)
|
|
if err != nil {
|
|
return result, err
|
|
}
|
|
|
|
return result, nil
|
|
}
|
|
|
|
func (app *App) PrintMetadata(url string) error {
|
|
return errors.New("Unimplemented.")
|
|
}
|
|
|
|
func (app *App) EmbedMetadata(file string, metadata TrackMetadata) error {
|
|
tag, err := id3v2.Open(file, id3v2.Options{Parse: true})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
artists, err := GetArtists(metadata)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
tag.SetArtist(artists)
|
|
tag.SetTitle(metadata.Data.TrackUnion.Name)
|
|
tag.SetYear(string(metadata.Data.TrackUnion.AlbumOfTrack.Date.Year))
|
|
tag.SetAlbum(metadata.Data.TrackUnion.AlbumOfTrack.Name)
|
|
|
|
if err = tag.Save(); err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|