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 }