From 6ce1eb5f920f5c830091f785a3318505110b320a Mon Sep 17 00:00:00 2001 From: Hazel Noack Date: Wed, 8 Oct 2025 14:05:16 +0200 Subject: [PATCH] implemented fetch call --- internal/cli/shell.go | 33 ++++++++++++++++++++++++++++----- internal/plugin/interface.go | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+), 5 deletions(-) diff --git a/internal/cli/shell.go b/internal/cli/shell.go index 40b316f..4edb81c 100644 --- a/internal/cli/shell.go +++ b/internal/cli/shell.go @@ -65,6 +65,7 @@ func Shell() { fmt.Println("== MusicKraken Shell ==") fmt.Println() + currentMusicObjects := []data.MusicObject{} for { fmt.Print("> ") @@ -75,13 +76,35 @@ func Shell() { return } - searchResults, err := plugin.Search(line, plugin.SearchConfig{IgnoreErrors: false}) - if err != nil { - fmt.Println(err) - fmt.Println() + line = strings.TrimSpace(line) + + if index, err := strconv.Atoi(line); err == nil { + if index >= len(currentMusicObjects) { + fmt.Println("\n" + line + " is out of bounds") + continue + } + + current := currentMusicObjects[index] + + if len(current.GetSources()) <= 0 { + fmt.Println("\nselected has no sources to download") + continue + } + + currentMusicObjects, err = plugin.FetchList(current.GetSources()[0]) + if err != nil { + fmt.Println(err) + fmt.Println() + } + } else { + currentMusicObjects, err = plugin.Search(line, plugin.SearchConfig{IgnoreErrors: false}) + if err != nil { + fmt.Println(err) + fmt.Println() + } } fmt.Println() - printResults(searchResults) + printResults(currentMusicObjects) } } diff --git a/internal/plugin/interface.go b/internal/plugin/interface.go index 8bcc939..4190cee 100644 --- a/internal/plugin/interface.go +++ b/internal/plugin/interface.go @@ -147,6 +147,41 @@ func Fetch(source data.Source) (data.MusicObject, error) { return nil, nil } +func FetchList(source data.Source) ([]data.MusicObject, error) { + res := []data.MusicObject{} + + musicObject, err := Fetch(source) + if err != nil { + return res, err + } + + if a, ok := musicObject.(data.Song); ok { + for _, ar := range a.Artists { + res = append(res, ar) + } + if a.Album.Name != "" { + res = append(res, a.Album, a) + } + } else if a, ok := musicObject.(data.Album); ok { + for _, ar := range a.Artists { + res = append(res, ar) + } + res = append(res, a) + for _, s := range a.Songs { + res = append(res, s) + } + } else if a, ok := musicObject.(data.Artist); ok { + res = append(res, a) + for _, al := range a.Albums { + res = append(res, al) + } + } else { + res = append(res, musicObject) + } + + return res, nil +} + type SearchConfig struct { IgnoreErrors bool }