77 lines
1.4 KiB
Go
77 lines
1.4 KiB
Go
package model
|
|
|
|
import "strings"
|
|
|
|
type (
|
|
Artist struct {
|
|
ID string `json:"id"`
|
|
Name string `json:"name"`
|
|
Website string `json:"website"`
|
|
Avatar string `json:"avatar"`
|
|
}
|
|
)
|
|
|
|
func (artist Artist) GetWebsite() string {
|
|
return artist.Website
|
|
}
|
|
|
|
func (artist Artist) GetAvatar() string {
|
|
if artist.Avatar == "" {
|
|
return "/img/default-avatar.png"
|
|
}
|
|
return artist.Avatar
|
|
}
|
|
|
|
func (release FullRelease) GetUniqueArtists(only_primary bool) []*Artist {
|
|
var artists = []*Artist{}
|
|
|
|
for _, credit := range release.Credits {
|
|
if only_primary && !credit.Primary {
|
|
continue
|
|
}
|
|
|
|
exists := false
|
|
for _, a := range artists {
|
|
if a.ID == credit.Artist.ID {
|
|
exists = true
|
|
break
|
|
}
|
|
}
|
|
|
|
if exists {
|
|
continue
|
|
}
|
|
|
|
artists = append(artists, &credit.Artist)
|
|
}
|
|
|
|
return artists
|
|
}
|
|
|
|
func (release FullRelease) GetUniqueArtistNames(only_primary bool) []string {
|
|
var names = []string{}
|
|
for _, artist := range release.GetUniqueArtists(only_primary) {
|
|
names = append(names, artist.Name)
|
|
}
|
|
|
|
return names
|
|
}
|
|
|
|
func (release FullRelease) PrintArtists(only_primary bool, ampersand bool) string {
|
|
names := release.GetUniqueArtistNames(only_primary)
|
|
|
|
if len(names) == 0 {
|
|
return "Unknown Artist"
|
|
} else if len(names) == 1 {
|
|
return names[0]
|
|
}
|
|
|
|
if ampersand {
|
|
res := strings.Join(names[:len(names)-1], ", ")
|
|
res += " & " + names[len(names)-1]
|
|
return res
|
|
} else {
|
|
return strings.Join(names[:], ", ")
|
|
}
|
|
}
|