diff --git a/fuzique b/fuzique index 93570b9..d4530f4 100755 --- a/fuzique +++ b/fuzique @@ -37,6 +37,31 @@ if [ "${1:-}" = "--mpv-toggle-pause" ]; then exit 0 fi +if [ "${1:-}" = "--browse" ]; then + rel=${3#"$ROOT/"} + d=$(echo "$rel" | awk -F'/' '{ print NF }') + if [ "$2" = "l" ]; then + if [ "$d" -eq 1 ]; then + grep -F "$3/" "$release_file_browse" + elif [ "$d" -eq 2 ]; then + grep -F "$3/" "$tracks_file_browse" + else + p=$(echo "$rel" | cut -d '/' -f 1,2) + grep -F "$ROOT/$p/" "$tracks_file_browse" + fi + elif [ "$2" = "h" ]; then + if [ "$d" -eq 3 ]; then + p=$(echo "$rel" | cut -d '/' -f 1) + grep -F "$ROOT/$p/" "$release_file_browse" + elif [ "$d" -eq 2 ]; then + cat "$artists_file_search" + else + cat "$artists_file_search" + fi + fi + exit 0 +fi + if [ "${1:-}" = "--prompt" ]; then shift file="$1" @@ -44,15 +69,15 @@ if [ "${1:-}" = "--prompt" ]; then mode="$1" case "$mode" in "$MODE_SEARCH") - printf "search> " + printf "$SEARCH_PROMPT" ;; "$MODE_BROWSE") rel=${file#"$ROOT/"} artist=$(echo "$rel" | cut -d "/" -f 1) release=$(echo "$rel" | cut -d "/" -f 2) d=$(echo "$rel" | awk -F'/' '{ print NF }') - [ "$d" -eq 2 ] && printf " $AFMT βŒͺ " "$artist" - [ "$d" -eq 3 ] && printf " $AFMT 》 $RFMT βŒͺ " "$artist" "$release" + [ "$d" -eq 2 ] && printf "$BROWSE_PROMPT_ARTIST" "$artist" + [ "$d" -eq 3 ] && printf "$BROWSE_PROMPT_RELEASE" "$artist" "$release" ;; "$MODE_PLAYLIST") printf "" @@ -103,7 +128,7 @@ tags_from_file() { if [ "${1:-}" = "--show-playlist" ]; then count=$(mpv_text '${playlist/count}') if [ "$count" -eq 0 ]; then - printf "(empty playlist)\t\t%s\n" "$MODE_PLAYLIST" + printf "$EMPTY_PLAYLIST_STRING\t\t%s\n" "$MODE_PLAYLIST" exit 0 fi pos=$(mpv_text '${playlist-pos}') @@ -202,10 +227,14 @@ ARTIST_COLOR=${ARTIST_COLOR:-'\033[38;5;202m'} RELEASE_COLOR=${RELEASE_COLOR:-'\033[38;5;208m'} TRACK_COLOR=${TRACK_COLOR:-'\033[38;5;215m'} OFF="\033[m" -AFMT="${AFTM:-"🎀 ${ARTIST_COLOR}%s${OFF}"}" +AFMT="${AFMT:-"🎀 ${ARTIST_COLOR}%s${OFF}"}" RFMT="${RFMT:-"πŸ’½ ${RELEASE_COLOR}%s${OFF}"}" TFMT="${TFMT:-"🎡 ${TRACK_COLOR}%s${OFF}"}" PLAYLIST_POINTER="${PLAYLIST_POINTER:-πŸ‘‰}" +EMPTY_PLAYLIST_STRING="${EMPTY_PLAYLIST_STRING:-"\033[38;5;251m(empty playlist)${OFF}"}" +SEARCH_PROMPT=${SEARCH_PROMPT:-"πŸ”Ž searchβŒͺ"} +BROWSE_PROMPT_ARTIST="${BROWSE_PROMPT_ARTIST:-"$AFMT βŒͺ"}" +BROWSE_PROMPT_RELEASE="${BROWSE_PROMPT_RELEASE:-"$AFMT 》 $RFMT βŒͺ"}" # Modes MODE_BROWSE="B" @@ -215,9 +244,6 @@ MODE_PLAYLIST="P" # Make socket MPV_SOCKET="$(mktemp --suffix=.sock)" -# Export -export ROOT MPV_SOCKET AFMT RFMT TFMT PLAYLIST_POINTER MODE_SEARCH MODE_BROWSE MODE_PLAYLIST - # Load if [ "${1:-}" = "--reset-cache" ] || [ ! -f "$CACHE_FILE" ]; then rm -f "$CACHE_FILE" @@ -230,19 +256,27 @@ if [ "${1:-}" = "--reset-cache" ] || [ ! -f "$CACHE_FILE" ]; then fi # Parse -artists_file_browse=$(mktemp) artists_file_search=$(mktemp) release_file_browse=$(mktemp) release_file_search=$(mktemp) tracks_file_browse=$(mktemp) tracks_file_search=$(mktemp) + +# Export +export ROOT MPV_SOCKET \ + AFMT RFMT TFMT \ + PLAYLIST_POINTER EMPTY_PLAYLIST_STRING \ + SEARCH_PROMPT BROWSE_PROMPT_ARTIST BROWSE_PROMPT_RELEASE \ + MODE_SEARCH MODE_BROWSE MODE_PLAYLIST \ + release_file_browse tracks_file_browse \ + tracks_file_search artists_file_search release_file_search + awk \ -F'/' \ -v afmt="$AFMT" \ -v rfmt="$RFMT" \ -v tfmt="$TFMT" \ -v depth="$DEPTH" \ - -v artists_file_browse="$artists_file_browse" \ -v release_file_browse="$release_file_browse" \ -v tracks_file_browse="$tracks_file_browse" \ -v artists_file_search="$artists_file_search" \ @@ -259,7 +293,6 @@ awk \ NF >= depth + 1 { ar = sprintf(afmt, $iartist) } NF >= depth + 2 { rl = sprintf(rfmt, $irelease) } NF >= depth + 3 { tr = $itrack; gsub(/\..*$/, "", tr); tr = sprintf(tfmt, tr) } -NF == depth + 1 { print ar, $0, mode_browse >> artists_file_browse } NF == depth + 2 { print rl, $0, mode_browse >> release_file_browse } NF == depth + 3 { print tr, $0, mode_browse >> tracks_file_browse } NF == depth + 1 { print ar, $0, mode_search >> artists_file_search } @@ -272,12 +305,13 @@ $MPV --no-config --no-terminal --input-ipc-server="$MPV_SOCKET" --idle --no-osc $FZF \ --reverse \ --ansi \ - --no-sort \ --delimiter="\t" \ --with-nth="{1}" \ --cycle \ --bind="ctrl-d:half-page-down,ctrl-u:half-page-up" \ - --preview-window="down" \ + --bind="down:preview-down,up:preview-up" \ + --bind="ctrl-w:toggle-preview-wrap" \ + --preview-window="right,30%" \ --preview="$0 --preview {2}" \ --bind="alt-1:reload:column -t -s '|' -E 0 \"$artists_file_search\"" \ --bind="alt-2:reload:column -t -s '|' -E 0 \"$release_file_search\"" \ @@ -324,24 +358,12 @@ $FZF \ fi printf \"+transform-prompt:$0 --prompt {2} {3}\" " \ - --bind="ctrl-l:transform: - printf \"clear-query+pos(1)\" - d=\$(echo {2} | awk -F'/' '{ print NF }') - [ \"\$d\" -eq \"$((DEPTH + 1))\" ] && echo \"+reload:grep -F {2}/ \\\"$release_file_browse\\\" | column -t -s '|' || true\" - [ \"\$d\" -eq \"$((DEPTH + 2))\" ] && echo \"+reload:grep -F {2}/ \\\"$tracks_file_browse\\\" | column -t -s '|' || true\" - " \ - --bind="ctrl-h:transform: - printf \"clear-query+pos(1)\" - d=\$(echo {2} | awk -F'/' '{ print NF }') - p=\$(echo {2} | rev | cut -d '/' -f 3- | rev) - [ \"\$d\" -eq \"$((DEPTH + 3))\" ] && echo \"+reload:grep -F \\\"\$p/\\\" \\\"$release_file_browse\\\" | column -t -s '|' || true\" - [ \"\$d\" -eq \"$((DEPTH + 2))\" ] && echo \"+reload:grep -F \\\"\$p/\\\" \\\"$artists_file_browse\\\" | column -t -s '|' || true\" - " \ + --bind="ctrl-l:reload($0 --browse l {2})+clear-query+pos(1)" \ + --bind="ctrl-h:reload($0 --browse h {2})+clear-query+pos(1)" \ <"$artists_file_search" || true printf '{ "command": ["quit"] }\n' | socat - "$MPV_SOCKET" rm -f "$MPV_SOCKET" \ - "$artists_file_browse" \ "$artists_file_search" \ "$release_file_browse" \ "$release_file_search" \