248 lines
6.8 KiB
Bash
Executable File
248 lines
6.8 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
#when set to exit, mpd_control will exit if you press escape
|
|
#when set to break, mpd_control will go the upper level if possible
|
|
ESC_ACTION="break"
|
|
# source configuration file for rofi if exists
|
|
|
|
ROFI="rofi -dmenu -p 'Search : '"
|
|
|
|
addaftercurrent(){
|
|
|
|
#playlist is empty, just add the song
|
|
if [ "$(mpc -p 6600 playlist | wc -l)" == "0" ]; then
|
|
mpc -p 6600 add "$1"
|
|
|
|
#there is no current song so mpd is stopped
|
|
#it seems to be impossible to determine the current songs' position when
|
|
#mpd is stopped, so just add to the end
|
|
elif [ -z "$(mpc -p 6600 current)" ]; then
|
|
mpc -p 6600 play
|
|
CUR_POS=$(mpc -p 6600 | tail -2 | head -1 | awk '{print $2}' | sed 's/#//' | awk -F/ '{print $1}')
|
|
END_POS=$(mpc -p 6600 playlist | wc -l)
|
|
mpc -p 6600 add "$1"
|
|
mpc -p 6600 move $(($END_POS+1)) $(($CUR_POS+1))
|
|
mpc -p 6600 stop
|
|
|
|
#at least 1 song is in the playlist, determine the position of the
|
|
#currently played song and add $1 after it
|
|
else
|
|
|
|
CUR_POS=$(mpc -p 6600 | tail -2 | head -1 | awk '{print $2}' | sed 's/#//' | awk -F/ '{print $1}')
|
|
END_POS=$(mpc -p 6600 playlist | wc -l)
|
|
mpc -p 6600 add "$1"
|
|
mpc -p 6600 move $(($END_POS+1)) $(($CUR_POS+1))
|
|
fi
|
|
}
|
|
addaftercurrentandplay(){
|
|
|
|
#playlist is empty, just add the song
|
|
if [ "$(mpc -p 6600 playlist | wc -l)" == "0" ]; then
|
|
mpc -p 6600 add "$1"
|
|
mpc -p 6600 play
|
|
|
|
#there is no current song so mpd is stopped
|
|
#it seems to be impossible to determine the current songs' position when
|
|
#mpd is stopped, so just add to the end
|
|
elif [ -z "$(mpc -p 6600 current)" ]; then
|
|
mpc -p 6600play
|
|
CUR_POS=$(mpc -p 6600 | tail -2 | head -1 | awk '{print $2}' | sed 's/#//' | awk -F/ '{print $1}')
|
|
END_POS=$(mpc -p 6600 playlist | wc -l)
|
|
mpc -p 6600 add "$1"
|
|
mpc -p 6600 move $(($END_POS+1)) $(($CUR_POS+1))
|
|
mpc -p 6600 play $(($CUR_POS+1))
|
|
|
|
#at least 1 song is in the playlist, determine the position of the
|
|
#currently played song and add $1 after it
|
|
else
|
|
|
|
CUR_POS=$(mpc -p 6600 | tail -2 | head -1 | awk '{print $2}' | sed 's/#//' | awk -F/ '{print $1}')
|
|
END_POS=$(mpc -p 6600 playlist | wc -l)
|
|
mpc -p 6600 add "$1"
|
|
mpc -p 6600 move $(($END_POS+1)) $(($CUR_POS+1))
|
|
mpc -p 6600 play $(($CUR_POS+1))
|
|
fi
|
|
}
|
|
|
|
case $1 in
|
|
|
|
-a|--artist)
|
|
|
|
while true; do
|
|
|
|
ARTIST="$(mpc -p 6600 list artist | sort -f | $ROFI)";
|
|
if [ "$ARTIST" = "" ]; then $ESC_ACTION; fi
|
|
|
|
while true; do
|
|
|
|
ALBUMS=$(mpc -p 6600 list album artist "$ARTIST" | sort -f);
|
|
ALBUM=$(echo -e "replace all\nadd all\n--------------------------\n$ALBUMS" | $ROFI);
|
|
if [ "$ALBUM" = "" ]; then $ESC_ACTION;
|
|
|
|
elif [ "$ALBUM" = "replace all" ]; then
|
|
CUR_SONG=$(mpc -p 6600 current)
|
|
mpc -p 6600 clear
|
|
mpc -p 6600 find artist "$ARTIST" | mpc -p 6600 add
|
|
if [ -n "$CUR_SONG" ]; then mpc -p 6600 play; fi
|
|
$ESC_ACTION
|
|
elif [ "$ALBUM" = "add all" ]; then
|
|
mpc -p 6600 find artist "$ARTIST" | mpc -p 6600 add
|
|
$ESC_ACTION
|
|
fi
|
|
|
|
while true; do
|
|
|
|
TITLES=$(mpc -p 6600 list title artist "$ARTIST" album "$ALBUM")
|
|
TITLE=$(echo -e "replace all\nadd all\n--------------------------\n$TITLES" | $ROFI);
|
|
if [ "$TITLE" = "" ]; then $ESC_ACTION
|
|
elif [ "$TITLE" = "replace all" ]; then
|
|
CUR_SONG=$(mpc -p 6600 current)
|
|
mpc -p 6600 clear;
|
|
mpc -p 6600 find artist "$ARTIST" album "$ALBUM" | mpc -p 6600 add
|
|
if [ -n "$CUR_SONG" ]; then mpc -p 6600 play; fi
|
|
$ESC_ACTION
|
|
elif [ "$TITLE" = "add all" ]; then
|
|
mpc -p 6600 find artist "$ARTIST" album "$ALBUM" | mpc -p 6600 add
|
|
$ESC_ACTION
|
|
|
|
fi
|
|
|
|
while true; do
|
|
DEC=$(echo -e "add after current and play\nadd after current\nreplace\nadd at the end" | $ROFI);
|
|
case $DEC in
|
|
|
|
"")
|
|
$ESC_ACTION
|
|
;;
|
|
|
|
"add after current and play")
|
|
addaftercurrentandplay "$(mpc -p 6600 find artist "$ARTIST" album "$ALBUM" title "$TITLE" | head -1 )"
|
|
;;
|
|
|
|
"add after current")
|
|
addaftercurrent "$(mpc -p 6600 find artist "$ARTIST" album "$ALBUM" title "$TITLE" | head -1 )"
|
|
;;
|
|
|
|
"replace")
|
|
CUR_SONG=$(mpc -p 6600 current)
|
|
mpc -p 6600 clear
|
|
mpc -p 6600 find artist "$ARTIST" album "$ALBUM" title "$TITLE" | head -1 | mpc -p 6600 add
|
|
if [ -n "$CUR_SONG" ]; then mpc -p 6600 play; fi
|
|
;;
|
|
|
|
"add at the end")
|
|
mpc -p 6600 find artist "$ARTIST" album "$ALBUM" title "$TITLE" | head -1 | mpc -p 6600 add
|
|
;;
|
|
|
|
esac
|
|
$ESC_ACTION
|
|
done
|
|
done
|
|
done
|
|
done
|
|
;;
|
|
|
|
-t|--track)
|
|
|
|
TITLE=$(mpc -p 6600 list title | sort -f | $ROFI)
|
|
if [ "$TITLE" = "" ]; then exit; fi
|
|
|
|
SONG=$(mpc -p 6600 find title "$TITLE" | head -1)
|
|
addaftercurrentandplay "$SONG"
|
|
;;
|
|
|
|
-p|--playlist)
|
|
PLAYLIST=$(mpc -p 6600 lsplaylists | $ROFI);
|
|
if [ "$PLAYLIST" = "" ]; then exit; fi
|
|
CUR_SONG=$(mpc -p 6600 current)
|
|
mpc -p 6600 clear
|
|
mpc -p 6600 load "$PLAYLIST";
|
|
if [ -n "$CUR_SONG" ]; then mpc -p 6600 play; fi
|
|
;;
|
|
|
|
-j|--jump)
|
|
|
|
TITLE=$(mpc -p 6600 playlist | $ROFI);
|
|
if [ "$TITLE" = "" ]; then exit; fi
|
|
POS=$(mpc -p 6600 playlist | grep -n "$TITLE" | awk -F: '{print $1}')
|
|
mpc -p 6600 play $POS;
|
|
;;
|
|
|
|
-l|--longplayer)
|
|
|
|
while true; do
|
|
|
|
ALBUM=$(mpc -p 6600 list album | sort -f | $ROFI);
|
|
if [ "$ALBUM" = "" ]; then $ESC_ACTION;
|
|
fi
|
|
|
|
while true; do
|
|
|
|
TITLES=$(mpc -p 6600 list title album "$ALBUM")
|
|
TITLE=$(echo -e "replace all\nadd all\n--------------------------\n$TITLES" | $ROFI);
|
|
if [ "$TITLE" = "" ]; then $ESC_ACTION
|
|
elif [ "$TITLE" = "replace all" ]; then
|
|
CUR_SONG=$(mpc -p 6600 current)
|
|
mpc -p 6600 clear;
|
|
mpc -p 6600 find album "$ALBUM" | mpc -p 6600 add
|
|
if [ -n "$CUR_SONG" ]; then mpc -p 6600 play; fi
|
|
$ESC_ACTION
|
|
elif [ "$TITLE" = "add all" ]; then
|
|
mpc -p 6600 find album "$ALBUM" | mpc -p 6600 add
|
|
$ESC_ACTION
|
|
|
|
fi
|
|
|
|
while true; do
|
|
DEC=$(echo -e "add after current and play\nadd after current\nreplace\nadd at the end" | $ROFI);
|
|
case $DEC in
|
|
|
|
"")
|
|
$ESC_ACTION
|
|
;;
|
|
|
|
"add after current and play")
|
|
addaftercurrentandplay "$(mpc -p 6600 find album "$ALBUM" title "$TITLE" | head -1 )"
|
|
;;
|
|
|
|
"add after current")
|
|
addaftercurrent "$(mpc -p 6600 find album "$ALBUM" title "$TITLE" | head -1 )"
|
|
;;
|
|
|
|
"replace")
|
|
CUR_SONG=$(mpc -p 6600 current)
|
|
mpc -p 6600 clear
|
|
mpc -p 6600 find album "$ALBUM" title "$TITLE" | head -1 | mpc -p 6600 add
|
|
if [ -n "$CUR_SONG" ]; then mpc -p 6600 play; fi
|
|
;;
|
|
|
|
"add at the end")
|
|
mpc -p 6600 find album "$ALBUM" title "$TITLE" | head -1 | mpc -p 6600 add
|
|
;;
|
|
|
|
esac
|
|
$ESC_ACTION
|
|
done
|
|
done
|
|
done
|
|
;;
|
|
|
|
-h|--help)
|
|
echo "-a, --artist search for artist, then album, then title"
|
|
echo "-t, --track search for a single track in the whole database"
|
|
echo "-p, --playlist search for a playlist load it"
|
|
echo "-j, --jump jump to another song in the current playlist"
|
|
echo "-l, --longplayer search for album, then title"
|
|
|
|
|
|
|
|
|
|
;;
|
|
|
|
*)
|
|
echo "Usage: rofi-mpd [OPTION]"
|
|
echo "Try 'rofi-mpd --help' for more information."
|
|
;;
|
|
|
|
esac
|