-
Notifications
You must be signed in to change notification settings - Fork 43
add PlaylistSearch function #89
Copy link
Copy link
Open
Description
Something like
type Song struct {
Fields map[string][]string
}
func PlaylistSearch(conn net.Conn, filter string) ([]Song, error) {
cmd := fmt.Sprintf("playlistsearch \"(%s)\"\n", filter)
if _, err := conn.Write([]byte(cmd)); err != nil {
return nil, err
}
reader := bufio.NewReader(conn)
var songs []Song
var current *Song
for {
line, err := reader.ReadString('\n')
if err != nil {
return nil, err
}
line = strings.TrimSpace(line)
if line == "OK" {
break
}
if strings.HasPrefix(line, "ACK") {
return nil, fmt.Errorf("mpd error: %s", line)
}
if line == "" {
continue
}
// New object starts at file:
if strings.HasPrefix(line, "file: ") {
if current != nil {
songs = append(songs, *current)
}
current = &Song{
Fields: make(map[string][]string),
}
}
parts := strings.SplitN(line, ": ", 2)
if len(parts) == 2 {
if current == nil {
current = &Song{
Fields: make(map[string][]string),
}
}
key := parts[0]
value := parts[1]
current.Fields[key] = append(current.Fields[key], value)
}
}
if current != nil {
songs = append(songs, *current)
}
return songs, nil
}Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels