add music shuffle and concept for main menu
This commit is contained in:
@@ -1,4 +1,37 @@
|
||||
#!/usr/bin/foot fish
|
||||
#!/usr/bin/env bash
|
||||
|
||||
open "$(find $HOME/Music | fzf)" &
|
||||
function run_menu() {
|
||||
menu="$1"
|
||||
if [[ -z "$menu" ]]
|
||||
then
|
||||
menu="main"
|
||||
fi
|
||||
|
||||
items="$(cat "$XDG_CONFIG_HOME/menu_main/$menu")"
|
||||
|
||||
echo "$XDG_CONFIG_HOME/menu_main/$menu"
|
||||
echo "$items"
|
||||
|
||||
item="$(echo "$items" | sed -e 's|:.*$||' | walker --dmenu)"
|
||||
|
||||
action="$(echo "$items" | grep "^$item" | sed 's|^[^:]*:||' )"
|
||||
|
||||
exec_item "$action"
|
||||
}
|
||||
|
||||
function exec_item() {
|
||||
if [[ "$(echo "$action" | sed -e 's|:.*$||')" == "menu" ]]
|
||||
then
|
||||
menu_main "$(echo "$action" | sed -e 's|^[^:]*:||')"
|
||||
exit
|
||||
fi
|
||||
|
||||
if [[ "$(echo "$action" | sed -e 's|:.*$||')" == "exec" ]]
|
||||
then
|
||||
cd $XDG_CONFIG_HOME/menu_main
|
||||
$(echo "$action" | sed -e 's|^[^:]*:||')
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
run_menu "$1"
|
||||
|
||||
81
private_dot_local/bin/executable_shuffle
Normal file
81
private_dot_local/bin/executable_shuffle
Normal file
@@ -0,0 +1,81 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
PLAYLIST="$1"
|
||||
|
||||
set -e
|
||||
|
||||
SONGS="$(find $HOME/Music -type f)"
|
||||
SONG_COUNT="$(echo "$SONGS" | wc -l)"
|
||||
|
||||
function pick_song() {
|
||||
num=$(( 1 + $RANDOM % $SONG_COUNT ))
|
||||
echo "$SONGS" | sed "${num}q;d"
|
||||
}
|
||||
|
||||
function get_flags() {
|
||||
path="$1"
|
||||
meuadata="flac"
|
||||
genre="$(ffmpeg -i "${path}" 2>&1 | grep GENRE | sed -e 's/^.*: //')"
|
||||
if [[ "$(echo "${path}" | sed -e 's/^.*\.\([^\.]*\)$/\1/')" == "mp3" ]]
|
||||
then
|
||||
metadata="mp3"
|
||||
genre="$(id3v2 -l "${path}" | grep '^TCON' | sed -e 's/^.*: //')"
|
||||
fi
|
||||
echo $genre
|
||||
}
|
||||
|
||||
function in_playlist() {
|
||||
flags="$1"
|
||||
playlist="$2"
|
||||
|
||||
playlists="
|
||||
ALL:(HE|ME|LE)
|
||||
HE:HE
|
||||
MHE:(ME|HE)
|
||||
ME:ME
|
||||
LME:(LE|ME)
|
||||
LO:LO
|
||||
LOFI:LOFI
|
||||
LE_LOFI:(LE|LOFI)
|
||||
"
|
||||
query="$(echo "$playlists" | grep --ignore-case " ${playlist}:" | sed 's/^.*://')"
|
||||
|
||||
if [[ "$(echo "$flags" | grep -E --no-ignore-case "$query")" != "" ]]
|
||||
then
|
||||
echo true
|
||||
else
|
||||
echo false
|
||||
fi
|
||||
}
|
||||
|
||||
function get_like_level() {
|
||||
flags="$1"
|
||||
|
||||
level="$(echo "$flags" | sed -e 's/^.*L\([0-3]\).*$/\1/')"
|
||||
if [[ "$level" == "$(echo "$level" | tr -dc '0-3')" ]]
|
||||
then
|
||||
echo $level
|
||||
fi
|
||||
}
|
||||
|
||||
function shuffle() {
|
||||
playlist="$1"
|
||||
|
||||
song="$(pick_song)"
|
||||
flags="$(get_flags "$song")"
|
||||
in_list=$(in_playlist "$flags" "$playlist")
|
||||
like=$(get_like_level "$flags")
|
||||
like_min=$(( 1 + $RANDOM % 3 ))
|
||||
|
||||
if [[ "$in_list" == "false" || "$like" -lt "$like_min" ]]
|
||||
then
|
||||
shuffle "$playlist"
|
||||
else
|
||||
mpd_song="$(echo "$song" | sed -e 's|.*/Music/||')"
|
||||
echo "$mpd_song"
|
||||
mpc add "$mpd_song"
|
||||
fi
|
||||
}
|
||||
|
||||
echo "$(shuffle $PLAYLIST)"
|
||||
|
||||
Reference in New Issue
Block a user