66 lines
2.2 KiB
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
|
|
|
|
}
|