Files
music-kraken/internal/cli/shell.go
2025-10-08 12:31:01 +02:00

79 lines
1.4 KiB
Go

package cli
import (
"bufio"
"fmt"
"log"
"os"
"strings"
"gitea.elara.ws/Hazel/music-kraken/internal/data"
"gitea.elara.ws/Hazel/music-kraken/internal/plugin"
)
func printResults(musicObjects []data.MusicObject) {
if len(musicObjects) <= 0 {
return
}
for _, m := range musicObjects {
if a, ok := m.(data.Artist); ok {
fmt.Println("artist: " + a.Name)
} else if a, ok := m.(data.Album); ok {
fmt.Print("release: " + a.Name)
if len(a.Artists) > 0 {
names := make([]string, len(a.Artists))
for i, artist := range a.Artists {
names[i] = artist.Name
}
fmt.Println(" by " + strings.Join(names, ", "))
} else {
fmt.Println()
}
} else if a, ok := m.(data.Song); ok {
fmt.Print("track: " + a.Name)
if len(a.Artists) > 0 {
names := make([]string, len(a.Artists))
for i, artist := range a.Artists {
names[i] = artist.Name
}
fmt.Println(" by " + strings.Join(names, ", "))
} else {
fmt.Println()
}
}
}
fmt.Println()
}
func Shell() {
plugin.RegisterPlugin(&plugin.Musify{})
fmt.Println("== MusicKraken Shell ==")
fmt.Println()
for {
fmt.Print("> ")
reader := bufio.NewReader(os.Stdin)
line, err := reader.ReadString('\n')
if err != nil {
log.Fatal(err)
return
}
searchResults, err := plugin.Search(line, plugin.SearchConfig{IgnoreErrors: false})
if err != nil {
fmt.Println(err)
fmt.Println()
}
fmt.Println()
printResults(searchResults)
}
}