METANOIA/handler/metadata.go

66 lines
2.2 KiB
Go

package handler
import (
"git.gammaspectra.live/S.O.N.G/METANOIA/metadata"
accuraterip_com "git.gammaspectra.live/S.O.N.G/METANOIA/metadata/accuraterip.com"
cuetools_net "git.gammaspectra.live/S.O.N.G/METANOIA/metadata/cuetools.net"
en_touhouwiki_net "git.gammaspectra.live/S.O.N.G/METANOIA/metadata/en.touhouwiki.net"
musicbrainz_org "git.gammaspectra.live/S.O.N.G/METANOIA/metadata/musicbrainz.org"
thwiki_cc "git.gammaspectra.live/S.O.N.G/METANOIA/metadata/thwiki.cc"
vgmdb_net "git.gammaspectra.live/S.O.N.G/METANOIA/metadata/vgmdb.net"
)
var metadataSources = []metadata.SourceMetadata{
accuraterip_com.NewSource(),
cuetools_net.NewSource(),
musicbrainz_org.NewSource(),
vgmdb_net.NewSource(),
thwiki_cc.NewSource(),
en_touhouwiki_net.NewSource(),
}
func SearchMetadata(disc *DiscHandlerResult, fuzzy bool) []*metadata.Album {
var albums []*metadata.Album
for _, source := range metadataSources {
var foundAlbums []*metadata.Album
if tocSource, ok := source.(metadata.TOCSource); ok {
foundAlbums = tocSource.FindByTOC(disc.TOC)
}
if cddb1Source, ok := source.(metadata.CDDB1Source); (fuzzy || len(foundAlbums) == 0) && ok {
foundAlbums = cddb1Source.FindByCDDB1(disc.TOC.GetCDDB1())
if fuzzy || len(foundAlbums) == 0 {
for _, id := range disc.Identifiers {
if id.Kind == "cddb1" {
foundAlbums = append(foundAlbums, cddb1Source.FindByCDDB1(metadata.NewCDDB1FromString(id.Name))...)
}
}
}
}
if catalogSource, ok := source.(metadata.CatalogSource); (fuzzy || len(foundAlbums) == 0) && ok {
var catalogNumbers []metadata.CatalogNumber
for _, id := range disc.Identifiers {
if id.Kind == "catalog" {
catalogNumbers = append(catalogNumbers, metadata.CatalogNumber(id.Name))
}
}
//TODO: also search combined number (aka EX-1000~11 or EX-1234~6)
for _, catno := range catalogNumbers {
foundAlbums = append(foundAlbums, catalogSource.FindByCatalogNumber(catno)...)
}
}
if nameSource, ok := source.(metadata.AlbumNameSource); (fuzzy || len(foundAlbums) == 0) && ok && len(disc.Album) > 0 {
nameSource.FindByAlbumNames([]metadata.Name{
{Kind: "original", Name: disc.Album},
})
}
albums = append(albums, foundAlbums...)
}
return albums
}