diff --git a/src/main.sh b/src/main.sh index f879357..884e938 100755 --- a/src/main.sh +++ b/src/main.sh @@ -91,9 +91,6 @@ MODE_INSERT="show" # Load list-generating methods . "sh/lists.sh" -# State management -. "sh/state.sh" - # FZF handlers . "sh/fzf.sh" @@ -330,10 +327,6 @@ case "${1:-}" in fzf_handle_change "$2" exit 0 ;; -"--fzf-key") - fzf_handle_key "${2:-}" "${3:-}" "${4:-}" - exit 0 - ;; "--decorate") [ ! "${2:-}" ] && err "You did not specify a directory." && exit 1 [ ! -d "$2" ] && err "Path $2 does not point to a directory." && exit 1 @@ -420,14 +413,6 @@ PIDFILE="$tmpdir/pid" trap 'rm -rf "$tmpdir"' EXIT INT export LOCKFILE RESULTS PIDFILE -statedir=$(mktemp -d) -STATEFILE="$statedir/state" -ARGSFILE="$statedir/state-args" -STATEFILE_LAST="$statedir/state2" -ARGSFILE_LAST="$statedir/state-args2" -touch "$STATEFILE" "$ARGSFILE" "$STATEFILE_LAST" "$ARGSFILE_LAST" -export STATEFILE ARGSFILE STATEFILE_LAST ARGSFILE_LAST - # Views and modes case "${1:-}" in @@ -450,7 +435,6 @@ case "${1:-}" in MBID="$2" ;; "--search-artist") - state_init "$VIEW_SEARCH_ARTIST" "$MODE_INSERT" "${2:-}" VIEW="$VIEW_SEARCH_ARTIST" MODE="$MODE_INSERT" MBID="" diff --git a/src/sh/fzf.sh b/src/sh/fzf.sh index 465230a..78446b0 100644 --- a/src/sh/fzf.sh +++ b/src/sh/fzf.sh @@ -168,350 +168,3 @@ fzf_handle_change() { # Process ends now: Display and quit rm -f "$LOCKFILE" "$PIDFILE" } - -# Handle FZF keypress -# @argument $1: MusicBrainz ID of parent object -# @argument $2: MusicBrainz ID of selected object -# @argument $3: Path to decoration file (optional) -fzf_handle_key() { - parentmbid="${1:-}" - mbid="${2:-}" - path="${3:-}" - view=$(state_get_view) - mode=$(state_get_mode) - args=$(state_get_args) - - # If we are in the insert mode, and the key pressed is an "input" key, then - # put it and quit. - if [ "$mode" = "$MODE_INSERT" ]; then - case ",$KEYS_INPUT_SINGLE," in - *",$FZF_KEY,"*) - printf "put(%s)" "$FZF_KEY" - return 0 - ;; - esac - case ",$KEYS_INPUT_SPECIAL," in - *",$FZF_KEY,"*) - case "$FZF_KEY" in - "space") printf "put( )" ;; - "backspace") printf "backward-delete-char" ;; - "delete") printf "delete-char" ;; - "left") printf "backward-char" ;; - "right") printf "forward-char" ;; - esac - return 0 - ;; - esac - - # Keys in insert mode only - case ",$KEYS_I_NORMAL," in - *",$FZF_KEY,"*) - case "$view" in - "$VIEW_PLAYLIST") ;; - *) - state_update_keep_args "$view" "$MODE_NORMAL" - __set_prompt "$view" "$MODE_NORMAL" - ;; - esac - ;; - esac - fi - - # Keys exclusive to playlist view - if [ "$view" = "$VIEW_PLAYLIST" ]; then - case ",$KEYS_PLAYLIST_RELOAD," in - *",$FZF_KEY,"*) - debug "hit playlist reload key" - debug "going to call $(printf "reload:%s" "$0 --fzf-reload")" - printf "reload:%s" "$0 --fzf-reload" - ;; - esac - fi - - # Handle key press - case ",$KEYS_HALFPAGE_DOWN," in - *",$FZF_KEY,"*) printf "half-page-down" ;; - esac - case ",$KEYS_HALFPAGE_UP," in - *",$FZF_KEY,"*) printf "half-page-up" ;; - esac - case ",$KEYS_OPEN," in - *",$FZF_KEY,"*) - [ "$path" ] || return 0 - open "$(dirname "$path")" - return 0 - ;; - esac - case ",$KEYS_BROWSE," in - *",$FZF_KEY,"*) - [ "$mbid" ] || return 0 - case "$view" in - "$VIEW_SEARCH_ARTIST" | "$VIEW_LIST_ARTISTS" | "$VIEW_SELECT_ARTIST") urltype="artist" ;; - "$VIEW_ARTIST" | "$VIEW_SEARCH_ALBUM" | "$VIEW_LIST_ALBUMS") urltype="release-group" ;; - "$VIEW_RELEASEGROUP") urltype="release" ;; - "$VIEW_RELEASE" | "$VIEW_PLAYLIST") urltype="track" ;; - esac - [ "${urltype:-}" ] && printf "execute-silent(xdg-open \"https://musicbrainz.org/%s/%s\" &)" "$urltype" "$mbid" - ;; - esac - case ",$KEYS_OUT," in - *",$FZF_KEY,"*) - case "$view" in - "$VIEW_ARTIST") - VIEW_NEXT="$VIEW_LIST_ARTISTS" - ;; - "$VIEW_RELEASEGROUP") - VIEW_NEXT="$VIEW_SELECT_ARTIST" - VIEW_NEXT_ARGS="$(mb_releasegroup "$args" | $JQ -r --compact-output '."artist-credit"')" - ACCEPT=1 - ;; - "$VIEW_RELEASE") - VIEW_NEXT="$VIEW_RELEASEGROUP" - VIEW_NEXT_ARGS="$(mb_release "$args" | $JQ -r --compact-output '."release-group".id')" - ;; - "$VIEW_PLAYLIST") - VIEW_NEXT="$VIEW_RELEASE" - VIEW_NEXT_ARGS="$parentmbid" - ACCEPT=1 - ;; - esac - ;; - esac - case ",$KEYS_IN," in - *",$FZF_KEY,"*) - [ "$mbid" ] || return 0 - VIEW_NEXT_ARGS="$mbid" - case "$view" in - "$VIEW_LIST_ARTISTS" | "$VIEW_SEARCH_ARTIST") - VIEW_NEXT="$VIEW_ARTIST" - ;; - "$VIEW_ARTIST" | "$VIEW_SEARCH_ALBUM" | "$VIEW_LIST_ALBUMS") - VIEW_NEXT="$VIEW_RELEASEGROUP" - ;; - "$VIEW_RELEASEGROUP") - VIEW_NEXT="$VIEW_RELEASE" - ;; - esac - ;; - esac - case ",$KEYS_SELECT_ARTIST," in - *",$FZF_KEY,"*) - [ "$mbid" ] || return 0 - case "$view" in - "$VIEW_ARTIST" | "$VIEW_SEARCH_ARTIST" | "$VIEW_LIST_ARTISTS") - VIEW_NEXT_ARGS="$(mb_releasegroup "$mbid" | $JQ -r --compact-output '."artist-credit"')" - ACCEPT=1 - ;; - "$VIEW_RELEASEGROUP" | "$VIEW_SEARCH_ALBUM" | "$VIEW_LIST_ALBUMS") - VIEW_NEXT_ARGS="$(mb_release "$mbid" | $JQ -r --compact-output '."artist-credit"')" - ACCEPT=1 - ;; - "$VIEW_RELEASE") - VIEW_NEXT_ARGS="$(mb_release "$args" | $JQ -r --compact-output '."artist-credit"')" - ACCEPT=1 - ;; - "$VIEW_PLAYLIST") - debug "NOT IMPLEMENTED" - ;; - esac - [ "$VIEW_NEXT_ARGS" ] && VIEW_NEXT="$VIEW_SELECT_ARTIST" - ;; - esac - case ",$KEYS_FILTER_LOCAL," in - *",$FZF_KEY,"*) - case "$view" in - "$VIEW_SEARCH_ARTIST" | "$VIEW_SEARCH_ALBUM" | "$VIEW_PLAYLIST") ;; - *) QUERY="'$QUERY_LOCAL' " ;; - esac - ;; - esac - # VIEW_RELEASEGROUP="rg" - # VIEW_RELEASE="release" - # VIEW_LIST_ARTISTS="list-artists" - # VIEW_SELECT_ARTIST="select-artist" - # VIEW_PLAYLIST="playlist" - case ",$KEYS_FILTER_1," in *",$FZF_KEY,"*) case "$view" in "$VIEW_ARTIST" | "$VIEW_LIST_ALBUMS") QUERY="!'$QUERY_HAS_SECONDARY' " ;; esac ;; esac - case ",$KEYS_FILTER_2," in *",$FZF_KEY,"*) case "$view" in "$VIEW_ARTIST" | "$VIEW_LIST_ALBUMS") QUERY="!'$QUERY_HAS_SECONDARY' '$QUERY_ALBUM' " ;; esac ;; esac - case ",$KEYS_FILTER_3," in *",$FZF_KEY,"*) case "$view" in "$VIEW_ARTIST" | "$VIEW_LIST_ALBUMS") QUERY="!'$QUERY_HAS_SECONDARY' '$QUERY_EP' " ;; esac ;; esac - case ",$KEYS_FILTER_4," in *",$FZF_KEY,"*) case "$view" in "$VIEW_ARTIST" | "$VIEW_LIST_ALBUMS") QUERY="!'$QUERY_HAS_SECONDARY' '$QUERY_SINGLE' " ;; esac ;; esac - case ",$KEYS_SWITCH_ARTIST_ALBUM," in - *",$FZF_KEY,"*) - case "$view" in - "$VIEW_SEARCH_ARTIST") VIEW_NEXT="$VIEW_SEARCH_ALBUM" ;; - "$VIEW_SEARCH_ALBUM") VIEW_NEXT="$VIEW_SEARCH_ARTIST" ;; - "$VIEW_LIST_ARTISTS") VIEW_NEXT="$VIEW_LIST_ALBUMS" ;; - "$VIEW_LIST_ALBUMS") VIEW_NEXT="$VIEW_LIST_ARTISTS" ;; - esac - ;; - esac - case ",$KEYS_SWITCH_LOCAL_REMOTE," in - *",$FZF_KEY,"*) - case "$view" in - "$VIEW_SEARCH_ARTIST") VIEW_NEXT="$VIEW_LIST_ARTISTS" ;; - "$VIEW_SEARCH_ALBUM") VIEW_NEXT="$VIEW_LIST_ALBUMS" ;; - "$VIEW_LIST_ARTISTS") - VIEW_NEXT="$VIEW_SEARCH_ARTIST" - MODE_NEXT="$MODE_INSERT" - ;; - "$VIEW_LIST_ALBUMS") - VIEW_NEXT="$VIEW_SEARCH_ALBUM" - MODE_NEXT="$MODE_INSERT" - ;; - esac - ;; - esac - case ",$KEYS_SHOW_PLAYLIST," in - *",$FZF_KEY,"*) - VIEW_NEXT="$VIEW_PLAYLIST" - ACCEPT=1 - ;; - esac - case ",$KEYS_PLAY," in - *",$FZF_KEY,"*) - [ "$path" ] || return 0 - case "$view" in - "$VIEW_ARTIST" | "$VIEW_SEARCH_ARTIST" | "$VIEW_SEARCH_ALBUM" | "$VIEW_LIST_ARTISTS" | "$VIEW_LIST_ALBUMS") - debug "not implemented" - ;; - "$VIEW_RELEASEGROUP") - generate_playlist "$mbid" "$path" | mpv_play_list >/dev/null - ;; - "$VIEW_RELEASE") - generate_playlist "$parentmbid" "$path" "$mbid" | mpv_play_list >/dev/null - ;; - "$VIEW_PLAYLIST") - generate_playlist "$parentmbid" "$path" "$mbid" | mpv_play_list >/dev/null - VIEW_NEXT="$VIEW_PLAYLIST" - ACCEPT=1 - ;; - esac - ;; - esac - case ",$KEYS_QUEUE," in - *",$FZF_KEY,"*) - [ "$path" ] || return 0 - case "$view" in - "$VIEW_ARTIST" | "$VIEW_SEARCH_ARTIST" | "$VIEW_SEARCH_ALBUM" | "$VIEW_LIST_ARTISTS" | "$VIEW_LIST_ALBUMS") - debug "not implemented" - ;; - "$VIEW_RELEASEGROUP") - generate_playlist "$mbid" "$path" | mpv_queue_list >/dev/null - ;; - "$VIEW_RELEASE") - generate_playlist "$parentmbid" "$path" "$mbid" | mpv_queue_list >/dev/null - ;; - "$VIEW_PLAYLIST") - generate_playlist "$parentmbid" "$path" "$mbid" | mpv_queue_list >/dev/null - VIEW_NEXT="$VIEW_PLAYLIST" - ACCEPT=1 - ;; - esac - ;; - esac - - # Keys in normal mode only - if [ "$mode" = "$MODE_NORMAL" ]; then - case ",$KEYS_N_DOWN," in - *",$FZF_KEY,"*) printf "down" ;; - esac - case ",$KEYS_N_UP," in - *",$FZF_KEY,"*) printf "up" ;; - esac - case ",$KEYS_N_OUT," in - *",$FZF_KEY,"*) - case "$view" in - "$VIEW_ARTIST") - VIEW_NEXT="$VIEW_LIST_ARTISTS" - ;; - "$VIEW_RELEASEGROUP") - VIEW_NEXT="$VIEW_SELECT_ARTIST" - VIEW_NEXT_ARGS="$(mb_releasegroup "$args" | $JQ -r --compact-output '."artist-credit"')" - ACCEPT=1 - ;; - "$VIEW_RELEASE") - VIEW_NEXT="$VIEW_RELEASEGROUP" - VIEW_NEXT_ARGS="$(mb_release "$args" | $JQ -r --compact-output '."release-group".id')" - ;; - "$VIEW_PLAYLIST") - VIEW_NEXT="$VIEW_RELEASE" - VIEW_NEXT_ARGS="$parentmbid" - ACCEPT=1 - ;; - esac - ;; - esac - case ",$KEYS_N_IN," in - *",$FZF_KEY,"*) - [ "$mbid" ] || return 0 - VIEW_NEXT_ARGS="$mbid" - case "$view" in - "$VIEW_LIST_ARTISTS" | "$VIEW_SEARCH_ARTIST") - VIEW_NEXT="$VIEW_ARTIST" - ;; - "$VIEW_ARTIST" | "$VIEW_SEARCH_ALBUM" | "$VIEW_LIST_ALBUMS") - VIEW_NEXT="$VIEW_RELEASEGROUP" - ;; - "$VIEW_RELEASEGROUP") - VIEW_NEXT="$VIEW_RELEASE" - ;; - esac - ;; - esac - case ",$KEYS_N_TOP," in - *",$FZF_KEY,"*) printf "first" ;; - esac - case ",$KEYS_N_BOT," in - *",$FZF_KEY,"*) printf "last" ;; - esac - case ",$KEYS_N_QUIT," in - *",$FZF_KEY,"*) - case "$view" in - "$VIEW_SELECT_ARTIST" | "$VIEW_PLAYLIST") printf "accept" ;; - *) printf "print(Q)+abort" ;; - esac - ;; - esac - case ",$KEYS_N_INSERT," in - *",$FZF_KEY,"*) - case "$view" in - "$VIEW_PLAYLIST") ;; - *) - state_update_keep_args "$view" "$MODE_INSERT" - __set_prompt "$view" "$MODE_INSERT" - ;; - esac - ;; - esac - case ",$KEYS_N_TOGGLE_PLAYBACK," in - *",$FZF_KEY,"*) mpv_toggle_pause >/dev/null ;; - esac - - case ",$KEYS_N_PLAY_NEXT," in - *",$FZF_KEY,"*) - mpv_next >/dev/null - [ "$view" = "$VIEW_PLAYLIST" ] && VIEW_NEXT="$VIEW_PLAYLIST" && ACCEPT=1 - ;; - esac - case ",$KEYS_N_PLAY_PREV," in - *",$FZF_KEY,"*) - mpv_prev >/dev/null - [ "$view" = "$VIEW_PLAYLIST" ] && VIEW_NEXT="$VIEW_PLAYLIST" && ACCEPT=1 - ;; - esac - case ",$KEYS_N_SEEK_FORWARD," in - *",$FZF_KEY,"*) mpv_seek_forward >/dev/null ;; - esac - case ",$KEYS_N_SEEK_BACKWARD," in - *",$FZF_KEY,"*) mpv_seek_backward >/dev/null ;; - esac - fi - - # Post processing - [ "${QUERY:-}" ] && printf "+change-query(%s)" "$QUERY" - if [ "${VIEW_NEXT:-}" ]; then - [ "$VIEW_NEXT" = "$VIEW_PLAYLIST" ] && MODE_NEXT="$MODE_NORMAL" - state_update "$VIEW_NEXT" "${MODE_NEXT:-"$mode"}" "${VIEW_NEXT_ARGS:-}" - [ "$MODE_NEXT" = "$MODE_INSERT" ] && printf "+enable-search" || printf "+disable-search" - [ "${ACCEPT:-}" ] && printf "+accept" || printf "+reload:%s" "$0 --fzf-reload" - fi -} diff --git a/src/sh/state.sh b/src/sh/state.sh deleted file mode 100644 index af7b743..0000000 --- a/src/sh/state.sh +++ /dev/null @@ -1,49 +0,0 @@ -# Update state -# @argument $1: view -# @argument $2: mode -# @argument $3: arguments -state_update() { - mv "$STATEFILE" "$STATEFILE_LAST" - mv "$ARGSFILE" "$ARGSFILE_LAST" - printf "%s#%s" "${1:-}" "${2:-}" >"$STATEFILE" - printf "%s" "${3:-}" >"$ARGSFILE" -} - -# Initialize state -# @argument $1: view -# @argument $2: mode -# @argument $3: arguments -state_init() { - state_update "$1" "$2" "$3" - state_update "$1" "$2" "$3" -} - -# Update state and keep arguments -# @argument $1: view -# @argument $2: mode -state_update_keep_args() { - mv "$STATEFILE" "$STATEFILE_LAST" - cp "$ARGSFILE" "$ARGSFILE_LAST" - printf "%s#%s" "${1:-}" "${2:-}" >"$STATEFILE" -} - -# Go back to previous state -state_revert() { - cp "$STATEFILE_LAST" "$STATEFILE" - cp "$ARGSFILE_LAST" "$ARGSFILE" -} - -# Get view -state_get_view() { - cut -d "#" -f 1 "$STATEFILE" -} - -# Get mode -state_get_mode() { - cut -d "#" -f 2 "$STATEFILE" -} - -# Get args -state_get_args() { - cat "$ARGSFILE" -}