The NIX update
This commit is contained in:
76
scripts/dm-mpd
Executable file
76
scripts/dm-mpd
Executable file
@@ -0,0 +1,76 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user