fixed pointer issue
This commit is contained in:
@@ -76,21 +76,29 @@ func (s musicObjectStore) currentMusicObjects() ([]data.MusicObject, error) {
|
||||
|
||||
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
|
||||
if command == ".." {
|
||||
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
|
||||
if indexSelectionPattern.MatchString(command) {
|
||||
currentMusicObjects, err := store.currentMusicObjects()
|
||||
if err != nil {
|
||||
return store, err
|
||||
return store, []error{err}
|
||||
}
|
||||
|
||||
var fetched data.MusicObject
|
||||
@@ -99,14 +107,14 @@ func interpretCommand(command string, store musicObjectStore) (musicObjectStore,
|
||||
index, _ := strconv.Atoi(strings.TrimSpace(stringIndex))
|
||||
|
||||
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]
|
||||
|
||||
newFetched, err := plugin.Fetch(current)
|
||||
if err != nil {
|
||||
return store, err
|
||||
return store, []error{err}
|
||||
}
|
||||
|
||||
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
|
||||
@@ -126,7 +140,7 @@ func interpretCommand(command string, store musicObjectStore) (musicObjectStore,
|
||||
fmt.Println()
|
||||
}
|
||||
|
||||
return append(store, currentMusicObjects), nil
|
||||
return append(store, currentMusicObjects), []error{}
|
||||
}
|
||||
|
||||
func Shell(commandsList ...[]string) {
|
||||
@@ -161,10 +175,13 @@ func Shell(commandsList ...[]string) {
|
||||
fmt.Println("> " + command)
|
||||
}
|
||||
|
||||
store, err = interpretCommand(strings.TrimSpace(command), store)
|
||||
if err != nil {
|
||||
var errList []error
|
||||
store, errList = interpretCommand(strings.TrimSpace(command), store)
|
||||
if len(errList) > 0 {
|
||||
fmt.Println()
|
||||
fmt.Println(color.Yellow + err.Error() + color.Reset)
|
||||
for _, err := range errList {
|
||||
fmt.Println(color.Yellow + err.Error() + color.Reset)
|
||||
}
|
||||
fmt.Println()
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user