82 lines
1.8 KiB
Go
82 lines
1.8 KiB
Go
// extras/go — decorative, not wired into the build. a toy CLI that mirrors
|
|
// the shape of backend/search.py's result cards (title/artist/cover/duration)
|
|
// without actually calling anything. run with: go run main.go
|
|
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
// SearchResult mirrors the dicts returned by backend/search.py's
|
|
// search_youtube / search_soundcloud / search_apple_music.
|
|
type SearchResult struct {
|
|
Title string
|
|
Artist string
|
|
CoverURL string
|
|
Duration string
|
|
Source string
|
|
}
|
|
|
|
func (r SearchResult) String() string {
|
|
return fmt.Sprintf("[%s] %s -- %s (%s)", strings.ToUpper(r.Source), r.Artist, r.Title, r.Duration)
|
|
}
|
|
|
|
type AudioFormat struct {
|
|
Ext string
|
|
Lossless bool
|
|
}
|
|
|
|
var formats = []AudioFormat{
|
|
{"mp3", false},
|
|
{"flac", true},
|
|
{"wav", true},
|
|
{"m4a", false},
|
|
{"alac", true},
|
|
{"ogg", false},
|
|
{"opus", false},
|
|
}
|
|
|
|
func losslessFormats() []string {
|
|
var out []string
|
|
for _, f := range formats {
|
|
if f.Lossless {
|
|
out = append(out, f.Ext)
|
|
}
|
|
}
|
|
return out
|
|
}
|
|
|
|
func renderProgress(label string, percent int, width int) string {
|
|
if percent > 100 {
|
|
percent = 100
|
|
}
|
|
if percent < 0 {
|
|
percent = 0
|
|
}
|
|
filled := width * percent / 100
|
|
bar := strings.Repeat("#", filled) + strings.Repeat("-", width-filled)
|
|
return fmt.Sprintf("%-20s [%s] %3d%%", label, bar, percent)
|
|
}
|
|
|
|
func main() {
|
|
results := []SearchResult{
|
|
{"MATADORA (Extended)", "SUKA.", "", "3:42", "youtube"},
|
|
{"Aria Math (Epic Version)", "Logan Feece", "", "4:10", "soundcloud"},
|
|
}
|
|
|
|
fmt.Println("nexdex.space -- go toy search demo")
|
|
for _, r := range results {
|
|
fmt.Println(r)
|
|
}
|
|
|
|
fmt.Println("\nlossless formats:", strings.Join(losslessFormats(), ", "))
|
|
|
|
fmt.Println()
|
|
for pct := 0; pct <= 100; pct += 20 {
|
|
fmt.Println(renderProgress("MATADORA (Extended)", pct, 30))
|
|
}
|
|
|
|
fmt.Println("\nmade by savsis with <3")
|
|
}
|