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)
|
metadataFetcher := newMetadataFetcher(c.deezerClient.Session.HttpClient)
|
||||||
metadataResult := metadataFetcher.fetch(ctx, song, opts)
|
metadataChan := make(chan metadataResult, 1)
|
||||||
warnings = append(warnings, metadataResult.warnings...)
|
go func() {
|
||||||
|
metadataResult := metadataFetcher.fetch(ctx, song, opts)
|
||||||
|
metadataChan <- metadataResult
|
||||||
|
}()
|
||||||
|
|
||||||
stream, err := c.deezerClient.GetMediaStream(ctx, media, song.ID)
|
stream, err := c.deezerClient.GetMediaStream(ctx, media, song.ID)
|
||||||
if err != nil {
|
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))
|
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)
|
finalizeWarnings := c.finalizeDownload(resource, song, outputPath, mediaFormat, metadataResult.genre, cover, metadataResult.bpmKey)
|
||||||
warnings = append(warnings, finalizeWarnings...)
|
warnings = append(warnings, finalizeWarnings...)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user