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
+8 -2
View File
@@ -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...)