perf(downloader): fetch metadata concurrently with stream download

This commit is contained in:
Mathis Maquenne
2026-03-01 21:29:02 +01:00
parent 0a8da3d0e7
commit cd45c3f40a
+7 -1
View File
@@ -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...)