From cd45c3f40a9163e7265b8159ec9dce8967ea1746 Mon Sep 17 00:00:00 2001 From: Mathis Maquenne <124215603+mathismqn@users.noreply.github.com> Date: Sun, 1 Mar 2026 21:29:02 +0100 Subject: [PATCH] perf(downloader): fetch metadata concurrently with stream download --- internal/downloader/client.go | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/internal/downloader/client.go b/internal/downloader/client.go index d3c34ec..830a7b2 100644 --- a/internal/downloader/client.go +++ b/internal/downloader/client.go @@ -167,8 +167,11 @@ func (c *Client) downloadSong(ctx context.Context, resource deezer.Resource, son } metadataFetcher := newMetadataFetcher(c.deezerClient.Session.HttpClient) - metadataResult := metadataFetcher.fetch(ctx, song, opts) - warnings = append(warnings, metadataResult.warnings...) + metadataChan := make(chan metadataResult, 1) + go func() { + metadataResult := metadataFetcher.fetch(ctx, song, opts) + 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...)