Optimize GetArtists: parallel artist processing, batch album upserts, batch download lookups, retry on metadata calls
This commit is contained in:
@@ -117,6 +117,40 @@ func (s *MetadataService) PersistAlbum(ctx context.Context, album *metadataPb.Al
|
||||
s.PersistAlbumForArtist(ctx, album, "", state)
|
||||
}
|
||||
|
||||
func (s *MetadataService) PersistAlbumsForArtist(ctx context.Context, metadataAlbums []*metadataPb.Album, artistDBID string, state database.MonitorState) {
|
||||
if len(metadataAlbums) == 0 || artistDBID == "" {
|
||||
return
|
||||
}
|
||||
|
||||
dbAlbums := make([]*database.Album, 0, len(metadataAlbums))
|
||||
for _, album := range metadataAlbums {
|
||||
var genres []string
|
||||
for _, g := range album.GetGenres() {
|
||||
genres = append(genres, g.GetName())
|
||||
}
|
||||
labelName := ""
|
||||
if album.GetLabel() != nil {
|
||||
labelName = album.GetLabel().GetName()
|
||||
}
|
||||
dbAlbums = append(dbAlbums, &database.Album{
|
||||
ExternalID: album.GetId(),
|
||||
ArtistID: artistDBID,
|
||||
Title: album.GetTitle(),
|
||||
AlbumType: album.GetAlbumType(),
|
||||
TotalTracks: int(album.GetTotalTracks()),
|
||||
TotalDiscs: int(album.GetTotalDiscs()),
|
||||
Label: labelName,
|
||||
Genres: genres,
|
||||
CoverURL: album.GetCoverUrl(),
|
||||
MonitorState: state,
|
||||
})
|
||||
}
|
||||
|
||||
if err := s.albums.CreateBatch(ctx, dbAlbums); err != nil {
|
||||
log.Warn().Err(err).Int("count", len(dbAlbums)).Msg("failed to batch persist albums")
|
||||
}
|
||||
}
|
||||
|
||||
func (s *MetadataService) PersistAlbumForArtist(ctx context.Context, album *metadataPb.Album, artistDBID string, state database.MonitorState) {
|
||||
if artistDBID == "" {
|
||||
if len(album.GetArtists()) > 0 {
|
||||
|
||||
Reference in New Issue
Block a user