💾 Archived View for ait.place › dot › bin › mpdmenu.txt captured on 2022-07-16 at 13:49:46.
-=-=-=-=-=-=-
#!/bin/bash all_name='[ALL]' mode=library d_artist() { mpc list artist | sort -f | dmenu -p artist "${dmenu_args[@]}" } d_album() { local artist="$1" local albums mapfile -t albums < <(mpc list album artist "$artist") if (( ${#albums[@]} > 1 )) ; then { printf '%s\n' "$all_name" printf '%s\n' "${albums[@]}" | sort -f } | dmenu -p album "${dmenu_args[@]}" else # We only have one album, so just use that. printf '%s\n' "${albums[0]}" fi } d_playlist() { local format="%position% %title%" local extra_format="(%artist% - %album%)" local track local num_extras # If all tracks are from the same artist and album, no need to display that num_extras=$(mpc playlist -f "$extra_format" | sort | uniq | wc -l) (( num_extras == 1 )) || format+=" $extra_format" track=$(mpc playlist -f "$format" | dmenu -p track "${dmenu_args[@]}") printf '%s' "${track%% *}" } i=2 for arg do if [[ $arg == :: ]]; then dmenu_args=( "${@:$i}" ) break fi case "$arg" in -l) mode=library ;; -p) mode=playlist ;; esac let i++ done case "$mode" in library) artist=$(d_artist) [[ $artist ]] || exit 1 album=$(d_album "$artist") [[ $album ]] || exit 2 mpc clear if [[ $album == "$all_name" ]]; then mpc find artist "$artist" | sort | mpc add else mpc find artist "$artist" album "$album" | sort | mpc add fi mpc play >/dev/null ;; playlist) mpc play "$(d_playlist)" >/dev/null ;; esac