perf(downloader): fetch metadata concurrently with stream download
This commit is contained in:
@@ -167,8 +167,11 @@ func (c *Client) downloadSong(ctx context.Context, resource deezer.Resource, son
|
||||
}
|
||||
|
||||
metadataFetcher := newMetadataFetcher(c.deezerClient.Session.HttpClient)
|
||||
metadataChan := make(chan metadataResult, 1)
|
||||
go func() {
|
||||
metadataResult := metadataFetcher.fetch(ctx, song, opts)
|
||||
warnings = append(warnings, metadataResult.warnings...)
|
||||
metadataChan <- metadataResult
|
||||
}()
|
||||
|
||||
stream, err := c.deezerClient.GetMediaStream(ctx, media, song.ID)
|
||||
if err != nil {
|
||||
@@ -196,6 +199,9 @@ func (c *Client) downloadSong(ctx context.Context, resource deezer.Resource, son
|
||||
warnings = append(warnings, fmt.Sprintf("failed to fetch cover image: %v", err))
|
||||
}
|
||||
|
||||
metadataResult := <-metadataChan
|
||||
warnings = append(warnings, metadataResult.warnings...)
|
||||
|
||||
finalizeWarnings := c.finalizeDownload(resource, song, outputPath, mediaFormat, metadataResult.genre, cover, metadataResult.bpmKey)
|
||||
warnings = append(warnings, finalizeWarnings...)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user