perf: download music and retrieve data in parallel

This commit is contained in:
Mathis Maquenne
2025-04-26 18:30:48 +02:00
parent 917ac5f6c2
commit c74531b36c
+17 -6
View File
@@ -26,6 +26,11 @@ var downloadCmd = &cobra.Command{
Short: "Download songs from Deezer", Short: "Download songs from Deezer",
} }
type bpmResult struct {
tempo, key string
err error
}
func init() { func init() {
RootCmd.AddCommand(downloadCmd) RootCmd.AddCommand(downloadCmd)
downloadCmd.PersistentFlags().StringVarP(&outputDir, "output", "o", "", "output directory (default is $HOME/Music/GoDeez)") downloadCmd.PersistentFlags().StringVarP(&outputDir, "output", "o", "", "output directory (default is $HOME/Music/GoDeez)")
@@ -175,6 +180,12 @@ func downloadContent(contentType string, args []string) {
fmt.Printf(" Downloading %s...", songTitle) fmt.Printf(" Downloading %s...", songTitle)
bpmCh := make(chan bpmResult, 1)
go func() {
t, k, e := song.GetTempoAndKey()
bpmCh <- bpmResult{tempo: t, key: k, err: e}
}()
err = media.Download(url, filePath, song.ID) err = media.Download(url, filePath, song.ID)
if err != nil { if err != nil {
fmt.Printf("\r Downloading %s... FAILED\n", songTitle) fmt.Printf("\r Downloading %s... FAILED\n", songTitle)
@@ -185,15 +196,15 @@ func downloadContent(contentType string, args []string) {
} }
fmt.Printf("\r Downloading %s... DONE\n", songTitle) fmt.Printf("\r Downloading %s... DONE\n", songTitle)
tempo, key, err := song.GetTempoAndKey() res := <-bpmCh
if err != nil { if res.err != nil {
fmt.Fprintf(os.Stderr, "Warning: could not get tempo and key: %v\n", err) fmt.Fprintf(os.Stderr, "Warning: could not get tempo/key for %s: %v\n", songTitle, res.err)
} else { } else {
fmt.Printf(" Tempo: %s\n", tempo) fmt.Printf(" Tempo: %s\n", res.tempo)
fmt.Printf(" Key: %s\n", key) fmt.Printf(" Key: %s\n", res.key)
} }
if err := tags.AddTags(resource, song, filePath, tempo, key); err != nil { if err := tags.AddTags(resource, song, filePath, res.tempo, res.key); err != nil {
fmt.Fprintf(os.Stderr, "Warning: could not add tags to song: %v\n", err) fmt.Fprintf(os.Stderr, "Warning: could not add tags to song: %v\n", err)
} }