fixed pointer issue

This commit is contained in:
acute_interpreter_panic
2025-10-10 14:36:33 +02:00
parent 87e276de3d
commit 964512de06
4 changed files with 58 additions and 23 deletions

View File

@@ -76,21 +76,29 @@ func (s musicObjectStore) currentMusicObjects() ([]data.MusicObject, error) {
var indexSelectionPattern = regexp.MustCompile(`^[\d ,]+$`) var indexSelectionPattern = regexp.MustCompile(`^[\d ,]+$`)
func interpretCommand(command string, store musicObjectStore) (musicObjectStore, error) { func interpretCommand(command string, store musicObjectStore) (musicObjectStore, []error) {
// going back in history // going back in history
if command == ".." { if command == ".." {
if len(store) <= 1 { if len(store) <= 1 {
return store, errors.New("can't go back") return store, []error{errors.New("can't go back")}
} }
return store[:len(store)-1], nil return store[:len(store)-1], []error{}
}
forceDownload := false
if strings.HasPrefix(command, "d:") {
command, _ = strings.CutPrefix(command, "d:")
command = strings.TrimSpace(command)
forceDownload = true
} }
// fetch special music object // fetch special music object
if indexSelectionPattern.MatchString(command) { if indexSelectionPattern.MatchString(command) {
currentMusicObjects, err := store.currentMusicObjects() currentMusicObjects, err := store.currentMusicObjects()
if err != nil { if err != nil {
return store, err return store, []error{err}
} }
var fetched data.MusicObject var fetched data.MusicObject
@@ -99,14 +107,14 @@ func interpretCommand(command string, store musicObjectStore) (musicObjectStore,
index, _ := strconv.Atoi(strings.TrimSpace(stringIndex)) index, _ := strconv.Atoi(strings.TrimSpace(stringIndex))
if index >= len(currentMusicObjects) || index < 0 { if index >= len(currentMusicObjects) || index < 0 {
return store, errors.New(command + " is out of bounds [0 <= " + strconv.Itoa(index) + " <= " + strconv.Itoa(len(currentMusicObjects)-1) + "]") return store, []error{errors.New(command + " is out of bounds [0 <= " + strconv.Itoa(index) + " <= " + strconv.Itoa(len(currentMusicObjects)-1) + "]")}
} }
current := currentMusicObjects[index] current := currentMusicObjects[index]
newFetched, err := plugin.Fetch(current) newFetched, err := plugin.Fetch(current)
if err != nil { if err != nil {
return store, err return store, []error{err}
} }
if fetched == nil { if fetched == nil {
@@ -116,7 +124,13 @@ func interpretCommand(command string, store musicObjectStore) (musicObjectStore,
} }
} }
return append(store, fetched.Related()), nil if forceDownload {
return store, plugin.Download(fetched)
} else {
return append(store, fetched.Related()), []error{}
}
} else if forceDownload {
return store, []error{errors.New("can only download indices not " + command)}
} }
// search in every other case // search in every other case
@@ -126,7 +140,7 @@ func interpretCommand(command string, store musicObjectStore) (musicObjectStore,
fmt.Println() fmt.Println()
} }
return append(store, currentMusicObjects), nil return append(store, currentMusicObjects), []error{}
} }
func Shell(commandsList ...[]string) { func Shell(commandsList ...[]string) {
@@ -161,10 +175,13 @@ func Shell(commandsList ...[]string) {
fmt.Println("> " + command) fmt.Println("> " + command)
} }
store, err = interpretCommand(strings.TrimSpace(command), store) var errList []error
if err != nil { store, errList = interpretCommand(strings.TrimSpace(command), store)
if len(errList) > 0 {
fmt.Println() fmt.Println()
fmt.Println(color.Yellow + err.Error() + color.Reset) for _, err := range errList {
fmt.Println(color.Yellow + err.Error() + color.Reset)
}
fmt.Println() fmt.Println()
} }

View File

@@ -84,7 +84,7 @@ func CleanSongTitle(title string, artistName string) string {
title = strings.TrimSpace(title) title = strings.TrimSpace(title)
for _, d := range commonTitleSuffix { for _, d := range commonTitleSuffix {
if strings.HasSuffix(strings.ToLower(d), d) { if strings.HasSuffix(strings.ToLower(title), d) {
title = strings.TrimSpace(title[:len(d)-1]) title = strings.TrimSpace(title[:len(d)-1])
} }
} }

View File

@@ -2,6 +2,7 @@ package plugin
import ( import (
"errors" "errors"
"fmt"
"regexp" "regexp"
"gitea.elara.ws/Hazel/music-kraken/internal/common" "gitea.elara.ws/Hazel/music-kraken/internal/common"
@@ -163,7 +164,7 @@ func Fetch(musicObject data.MusicObject) (data.MusicObject, error) {
musicObject = musicObject.Merge(newMusicObject) musicObject = musicObject.Merge(newMusicObject)
} }
return musicObject, nil return musicObject.Compile(), nil
} }
type SearchConfig struct { type SearchConfig struct {
@@ -204,15 +205,21 @@ var variousAlbum = data.Album{
Name: "VariousAlbum", Name: "VariousAlbum",
}.Compile().(data.Album) }.Compile().(data.Album)
func downloadSong(song data.Song, state downloadState) {} func downloadSong(song data.Song, state downloadState) error {
fmt.Println("downloading: " + song.Name)
return nil
}
func Download(musicObject data.MusicObject, statesInput ...downloadState) { func Download(musicObject data.MusicObject, statesInput ...downloadState) []error {
state := downloadState{} state := downloadState{}
if len(statesInput) > 0 { if len(statesInput) > 0 {
state = statesInput[0] state = statesInput[0]
} }
musicObject = musicObject.Compile() musicObject, err := Fetch(musicObject)
if err != nil {
return []error{err}
}
if song, ok := musicObject.(data.Song); ok { if song, ok := musicObject.(data.Song); ok {
state.song = &song state.song = &song
@@ -232,8 +239,13 @@ func Download(musicObject data.MusicObject, statesInput ...downloadState) {
state.album = &variousAlbum state.album = &variousAlbum
} }
} }
downloadSong(song, state)
return err := downloadSong(song, state)
if err == nil {
return []error{}
} else {
return []error{err}
}
} }
if album, ok := musicObject.(data.Album); ok { if album, ok := musicObject.(data.Album); ok {
@@ -247,18 +259,24 @@ func Download(musicObject data.MusicObject, statesInput ...downloadState) {
} }
} }
errList := []error{}
for _, song := range album.Songs { for _, song := range album.Songs {
Download(song, state) errList = append(errList, Download(song, state)...)
} }
return return errList
} }
if artist, ok := musicObject.(data.Artist); ok { if artist, ok := musicObject.(data.Artist); ok {
state.artist = &artist state.artist = &artist
errList := []error{}
for _, album := range artist.Albums { for _, album := range artist.Albums {
Download(album, state) errList = append(errList, Download(album, state)...)
} }
return return errList
}
return []error{
errors.New("music object not recognized"),
} }
} }

View File

@@ -7,6 +7,6 @@ import (
func main() { func main() {
cli.Shell([]string{ cli.Shell([]string{
"#a Crystal F", "#a Crystal F",
"20", "d: 0",
}) })
} }