GoScrobble/internal/goscrobble/ingress_multiscrobbler.go

59 lines
1.4 KiB
Go
Raw Normal View History

package goscrobble
import (
"database/sql"
2021-04-02 12:44:11 +00:00
"errors"
"log"
"net"
"time"
)
type MultiScrobblerInput struct {
Artists []string `json:"artists"`
Album string `json:"album"`
Track string `json:"track"`
PlayedAt time.Time `json:"playDate"`
2021-04-02 12:44:11 +00:00
Duration int `json:"duration"`
}
// ParseMultiScrobblerInput - Transform API data
2021-04-02 12:44:11 +00:00
func ParseMultiScrobblerInput(userUUID string, data MultiScrobblerInput, ip net.IP, tx *sql.Tx) error {
// Debugging
2021-04-02 12:44:11 +00:00
artists := make([]string, 0)
albumartists := make([]string, 0)
// Insert track artists
for _, artist := range data.Artists {
artist, err := insertArtist(artist, "", "", tx)
if err != nil {
log.Printf("%+v", err)
return errors.New("Failed to map artist: " + artist.Name)
}
artists = append(artists, artist.Uuid)
}
// Insert album if not exist
album, err := insertAlbum(data.Album, "", "", albumartists, tx)
if err != nil {
log.Printf("%+v", err)
return errors.New("Failed to map album")
}
// Insert track if not exist
2021-04-02 12:44:11 +00:00
track, err := insertTrack(data.Track, data.Duration, "", "", album.Uuid, artists, tx)
if err != nil {
log.Printf("%+v", err)
return errors.New("Failed to map track")
}
// Insert scrobble if not exist
err = insertScrobble(userUUID, track.Uuid, "multiscrobbler", data.PlayedAt, ip, tx)
if err != nil {
log.Printf("%+v", err)
return errors.New("Failed to map track")
}
return nil
}