state sep

This commit is contained in:
2025-08-29 15:49:21 +02:00
parent 8164b7de39
commit fc02d93158
3 changed files with 174 additions and 150 deletions

View File

@@ -44,6 +44,9 @@ set -eu
# Load list-generating methods
. "sh/lists.sh"
# State management
. "sh/state.sh"
# FZF handlers
. "sh/fzf.sh"
@@ -133,10 +136,16 @@ tmpdir=$(mktemp -d)
LOCKFILE="$tmpdir/lock"
RESULTS="$tmpdir/results"
PIDFILE="$tmpdir/pid"
STATEFILE="$tmpdir/state"
ARGSFILE="$tmpdir/state-args"
trap 'rm -rf "$tmpdir"' EXIT INT
export LOCKFILE RESULTS PIDFILE STATEFILE ARGSFILE
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
if [ "${1:-}" = "--ni-search-artist" ]; then
$0 --internal-search "artist" "$2"
@@ -167,35 +176,20 @@ export VIEW_ARTIST VIEW_RELEASEGROUP VIEW_RELEASE VIEW_SEARCH_ARTIST \
case "${1:-}" in
"--artist")
[ ! "${2:-}" ] && err "MusicBrainz Artist ID not specified (see --help)" && exit 1
printf "%s#%s" "$VIEW_ARTIST" "$MODE_NORMAL" >"$STATEFILE"
printf "%s" "$2" >"$ARGSFILE"
state_init "$VIEW_ARTIST" "$MODE_NORMAL" "$2"
;;
"--releasegroup")
[ ! "${2:-}" ] && err "MusicBrainz Release-Group ID not specified (see --help)" && exit 1
printf "%s#%s" "$VIEW_RELEASEGROUP" "$MODE_NORMAL" >"$STATEFILE"
printf "%s" "$2" >"$ARGSFILE"
state_init "$VIEW_RELEASEGROUP" "$MODE_NORMAL" "$2"
;;
"--release")
[ ! "${2:-}" ] && err "MusicBrainz Release ID not specified (see --help)" && exit 1
printf "%s#%s" "$VIEW_RELEASE" "$MODE_NORMAL" >"$STATEFILE"
printf "%s" "$2" >"$ARGSFILE"
;;
"--search-artist")
printf "%s#%s" "$VIEW_SEARCH_ARTIST" "$MODE_INSERT" >"$STATEFILE"
printf "%s" "${2:-}" >"$ARGSFILE"
;;
"--search-album")
printf "%s#%s" "$VIEW_SEARCH_ALBUM" "$MODE_INSERT" >"$STATEFILE"
printf "%s" "${2:-}" >"$ARGSFILE"
;;
"--artists" | "")
printf "%s#%s" "$VIEW_LIST_ARTISTS" "$MODE_NORMAL" >"$STATEFILE"
printf "%s" "" >"$ARGSFILE"
;;
"--albums")
printf "%s#%s" "$VIEW_LIST_ALBUMS" "$MODE_NORMAL" >"$STATEFILE"
printf "%s" "" >"$ARGSFILE"
state_init "$VIEW_RELEASE" "$MODE_NORMAL" "$2"
;;
"--search-artist") state_init "$VIEW_SEARCH_ARTIST" "$MODE_INSERT" "${2:-}" ;;
"--search-album") state_init "$VIEW_SEARCH_ALBUM" "$MODE_INSERT" "${2:-}" ;;
"--artists" | "") state_init "$VIEW_LIST_ARTISTS" "$MODE_NORMAL" "" ;;
"--albums") state_init "$VIEW_LIST_ALBUMS" "$MODE_NORMAL" "" ;;
*)
err "Unknown option $1 (see --help)"
exit 1
@@ -207,9 +201,9 @@ mpv_start
# $KEYS_PLAY main loop
while true; do
view=$(cut -d "#" -f 1 "$STATEFILE")
mode=$(cut -d "#" -f 2 "$STATEFILE")
args=$(cat "$ARGSFILE")
view=$(state_get_view)
mode=$(state_get_mode)
args=$(state_get_args)
case "$view" in
"$VIEW_SELECT_ARTIST")
sel=$(
@@ -219,7 +213,7 @@ while true; do
--bind="$KEYS_HALFPAGE_DOWN,$KEYS_HALFPAGE_UP,\
$KEYS_BROWSE,\
$KEYS_FILTER_LOCAL:transform:$0 --fzf-key {2} {3} {4}" \
-1 \
-0 -1 \
--border="bold" \
--border-label="Select artist" \
--delimiter="\t" \
@@ -227,10 +221,9 @@ $KEYS_FILTER_LOCAL:transform:$0 --fzf-key {2} {3} {4}" \
--margin="5%,20%" \
--bind="$KEYS_FILTER_LOCAL:change-query($FORMAT_LOCAL )" \
--accept-nth="{3}" \
--with-nth="{1}"
--with-nth="{1}" || true
)
printf "%s#%s" "$VIEW_ARTIST" "$mode" >"$STATEFILE"
printf "%s" "$sel" >"$ARGSFILE"
[ "$sel" ] && state_update "$VIEW_ARTIST" "$mode" "$sel" || state_revert
;;
"$VIEW_PLAYLIST")
list_playlist |