Filter functionality and keys
This commit is contained in:
222
src/sh/filter.sh
Normal file
222
src/sh/filter.sh
Normal file
@@ -0,0 +1,222 @@
|
||||
# The default queries depend on the current view, and are usually derived from
|
||||
# the theme. Nevertheless, they may be overwritten with the configuration file.
|
||||
# Note that filters are not used in the views VIEW_SEARCH_ARTIST and
|
||||
# VIEW_SEARCH_ALBUM. The reason for this is that in those modes, changing the
|
||||
# query string triggers a search on the MusicBrainz website (the input is not a
|
||||
# filter, but a query).
|
||||
#
|
||||
# The keybinding KEYS_FILTER_LOCAL triggers a filter of QUERY_LOCAL in the
|
||||
# views VIEW_ARTIST, VIEW_RELEASEGROUP, and VIEW_RELEASE only. Here, it is only
|
||||
# possible to adjust QUERY_LOCAL via the configuration. For all other keys, the
|
||||
# filters are individually configurable, by specifying e.g.,
|
||||
# F_3_VIEW_LIST_ALBUMS.
|
||||
#
|
||||
#
|
||||
# Derived queries
|
||||
# To derive the queries from the theme, we must perform some steps: 1) remove
|
||||
# colors, and 2) escape white spaces. This is implemented in the method
|
||||
# `__clean_filter`.
|
||||
#
|
||||
# List of derived queries:
|
||||
# - QUERY_LOCAL: Hide items that are not locally available
|
||||
# - q_has_secondary: Release groups with secondary types
|
||||
# - q_album: Release group is of type Album
|
||||
# - q_ep: Release group is of type EP
|
||||
# - q_single: Release group is of type single
|
||||
# - q_official: Release is official
|
||||
|
||||
__clean_filter() {
|
||||
cat | sed "s/${ESC}\[[0-9;]*[mK]//g" | sed "s/ /\\\ /g"
|
||||
}
|
||||
|
||||
QUERY_LOCAL="${QUERY_LOCAL:-"$(printf "'%s'" "$FORMAT_LOCAL" | __clean_filter)"}"
|
||||
q_has_seconary="$(printf "$FORMAT_TYPE_HAS_SECONDARY" "" | __clean_filter)"
|
||||
q_album="$(printf "%s" "$FORMAT_TYPE_ALBUM" | __clean_filter)"
|
||||
q_ep=$(printf "%s" "$FORMAT_TYPE_EP" | sed "s/${ESC}\[[0-9;]*[mK]//g" | sed "s/ /\\\ /g")
|
||||
q_single=$(printf "%s" "$FORMAT_TYPE_SINGLE" | sed "s/${ESC}\[[0-9;]*[mK]//g" | sed "s/ /\\\ /g")
|
||||
if printf "$RV_FORMAT" | grep -q "<<status>>"; then
|
||||
q_official=$(printf "'%s'" "$FORMAT_STATUS_OFFICIAL" | sed "s/${ESC}\[[0-9;]*[mK]//g" | sed "s/ /\\\ /g")
|
||||
fi
|
||||
|
||||
F_1_VIEW_ARTIST="${F_1_VIEW_ARTIST:-"!'$q_has_seconary'"}"
|
||||
F_2_VIEW_ARTIST="${F_2_VIEW_ARTIST:-"'$q_album'"}"
|
||||
F_3_VIEW_ARTIST="${F_3_VIEW_ARTIST:-"'$q_ep'"}"
|
||||
F_4_VIEW_ARTIST="${F_4_VIEW_ARTIST:-"'$q_single'"}"
|
||||
F_5_VIEW_ARTIST="${F_5_VIEW_ARTIST:-}"
|
||||
F_6_VIEW_ARTIST="${F_6_VIEW_ARTIST:-}"
|
||||
F_7_VIEW_ARTIST="${F_7_VIEW_ARTIST:-}"
|
||||
F_8_VIEW_ARTIST="${F_8_VIEW_ARTIST:-}"
|
||||
F_9_VIEW_ARTIST="${F_9_VIEW_ARTIST:-}"
|
||||
F_0_VIEW_ARTIST="${F_0_VIEW_ARTIST:-}"
|
||||
|
||||
F_1_VIEW_RELEASEGROUP="${F_1_VIEW_RELEASEGROUP:-"${q_official:-}"}"
|
||||
F_2_VIEW_RELEASEGROUP="${F_2_VIEW_RELEASEGROUP:-}"
|
||||
F_3_VIEW_RELEASEGROUP="${F_3_VIEW_RELEASEGROUP:-}"
|
||||
F_4_VIEW_RELEASEGROUP="${F_4_VIEW_RELEASEGROUP:-}"
|
||||
F_5_VIEW_RELEASEGROUP="${F_5_VIEW_RELEASEGROUP:-}"
|
||||
F_6_VIEW_RELEASEGROUP="${F_6_VIEW_RELEASEGROUP:-}"
|
||||
F_7_VIEW_RELEASEGROUP="${F_7_VIEW_RELEASEGROUP:-}"
|
||||
F_8_VIEW_RELEASEGROUP="${F_8_VIEW_RELEASEGROUP:-}"
|
||||
F_9_VIEW_RELEASEGROUP="${F_9_VIEW_RELEASEGROUP:-}"
|
||||
F_0_VIEW_RELEASEGROUP="${F_0_VIEW_RELEASEGROUP:-}"
|
||||
|
||||
F_1_VIEW_RELEASE="${F_1_VIEW_RELEASE:-}"
|
||||
F_2_VIEW_RELEASE="${F_2_VIEW_RELEASE:-}"
|
||||
F_3_VIEW_RELEASE="${F_3_VIEW_RELEASE:-}"
|
||||
F_4_VIEW_RELEASE="${F_4_VIEW_RELEASE:-}"
|
||||
F_5_VIEW_RELEASE="${F_5_VIEW_RELEASE:-}"
|
||||
F_6_VIEW_RELEASE="${F_6_VIEW_RELEASE:-}"
|
||||
F_7_VIEW_RELEASE="${F_7_VIEW_RELEASE:-}"
|
||||
F_8_VIEW_RELEASE="${F_8_VIEW_RELEASE:-}"
|
||||
F_9_VIEW_RELEASE="${F_9_VIEW_RELEASE:-}"
|
||||
F_0_VIEW_RELEASE="${F_0_VIEW_RELEASE:-}"
|
||||
|
||||
F_1_LIST_ARTISTS="${F_1_LIST_ARTISTS:-}"
|
||||
F_2_LIST_ARTISTS="${F_2_LIST_ARTISTS:-}"
|
||||
F_3_LIST_ARTISTS="${F_3_LIST_ARTISTS:-}"
|
||||
F_4_LIST_ARTISTS="${F_4_LIST_ARTISTS:-}"
|
||||
F_5_LIST_ARTISTS="${F_5_LIST_ARTISTS:-}"
|
||||
F_6_LIST_ARTISTS="${F_6_LIST_ARTISTS:-}"
|
||||
F_7_LIST_ARTISTS="${F_7_LIST_ARTISTS:-}"
|
||||
F_8_LIST_ARTISTS="${F_8_LIST_ARTISTS:-}"
|
||||
F_9_LIST_ARTISTS="${F_9_LIST_ARTISTS:-}"
|
||||
F_0_LIST_ARTISTS="${F_0_LIST_ARTISTS:-}"
|
||||
|
||||
F_1_LIST_ALBUMS="${F_1_LIST_ALBUMS:-}"
|
||||
F_2_LIST_ALBUMS="${F_2_LIST_ALBUMS:-}"
|
||||
F_3_LIST_ALBUMS="${F_3_LIST_ALBUMS:-}"
|
||||
F_4_LIST_ALBUMS="${F_4_LIST_ALBUMS:-}"
|
||||
F_5_LIST_ALBUMS="${F_5_LIST_ALBUMS:-}"
|
||||
F_6_LIST_ALBUMS="${F_6_LIST_ALBUMS:-}"
|
||||
F_7_LIST_ALBUMS="${F_7_LIST_ALBUMS:-}"
|
||||
F_8_LIST_ALBUMS="${F_8_LIST_ALBUMS:-}"
|
||||
F_9_LIST_ALBUMS="${F_9_LIST_ALBUMS:-}"
|
||||
F_0_LIST_ALBUMS="${F_0_LIST_ALBUMS:-}"
|
||||
|
||||
# Determine preset query
|
||||
# @argument $1: Current view
|
||||
# @argument $2: Key pressed (optional)
|
||||
#
|
||||
# If the key is not given, then the F_1_.. query is used for the respective
|
||||
# view, i.e, its as if a key from KEYS_FILTER_1 has been pressed.
|
||||
default_query() {
|
||||
view=$1
|
||||
key="${2:-"$(echo "$KEYS_FILTER_1" | cut -d ',' -f 1)"}"
|
||||
case ",$KEYS_FILTER_LOCAL," in
|
||||
*",$key,"*)
|
||||
case "$view" in
|
||||
"$VIEW_ARTIST" | "$VIEW_RELEASEGROUP" | "$VIEW_RELEASE") echo "$QUERY_LOCAL" ;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
case ",$KEYS_FILTER_1," in
|
||||
*",$key,"*)
|
||||
case "$view" in
|
||||
"$VIEW_ARTIST") echo "$F_1_VIEW_ARTIST" ;;
|
||||
"$VIEW_RELEASEGROUP") echo "$F_1_VIEW_RELEASEGROUP" ;;
|
||||
"$VIEW_RELEASE") echo "$F_1_VIEW_RELEASE" ;;
|
||||
"$VIEW_LIST_ARTISTS") echo "$F_1_LIST_ARTISTS" ;;
|
||||
"$VIEW_LIST_ALBUMS") echo "$F_1_LIST_ALBUMS" ;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
case ",$KEYS_FILTER_2," in
|
||||
*",$key,"*)
|
||||
case "$view" in
|
||||
"$VIEW_ARTIST") echo "$F_2_VIEW_ARTIST" ;;
|
||||
"$VIEW_RELEASEGROUP") echo "$F_2_VIEW_RELEASEGROUP" ;;
|
||||
"$VIEW_RELEASE") echo "$F_2_VIEW_RELEASE" ;;
|
||||
"$VIEW_LIST_ARTISTS") echo "$F_2_LIST_ARTISTS" ;;
|
||||
"$VIEW_LIST_ALBUMS") echo "$F_2_LIST_ALBUMS" ;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
case ",$KEYS_FILTER_3," in
|
||||
*",$key,"*)
|
||||
case "$view" in
|
||||
"$VIEW_ARTIST") echo "$F_3_VIEW_ARTIST" ;;
|
||||
"$VIEW_RELEASEGROUP") echo "$F_3_VIEW_RELEASEGROUP" ;;
|
||||
"$VIEW_RELEASE") echo "$F_3_VIEW_RELEASE" ;;
|
||||
"$VIEW_LIST_ARTISTS") echo "$F_3_LIST_ARTISTS" ;;
|
||||
"$VIEW_LIST_ALBUMS") echo "$F_3_LIST_ALBUMS" ;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
case ",$KEYS_FILTER_4," in
|
||||
*",$key,"*)
|
||||
case "$view" in
|
||||
"$VIEW_ARTIST") echo "$F_4_VIEW_ARTIST" ;;
|
||||
"$VIEW_RELEASEGROUP") echo "$F_4_VIEW_RELEASEGROUP" ;;
|
||||
"$VIEW_RELEASE") echo "$F_4_VIEW_RELEASE" ;;
|
||||
"$VIEW_LIST_ARTISTS") echo "$F_4_LIST_ARTISTS" ;;
|
||||
"$VIEW_LIST_ALBUMS") echo "$F_4_LIST_ALBUMS" ;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
case ",$KEYS_FILTER_5," in
|
||||
*",$key,"*)
|
||||
case "$view" in
|
||||
"$VIEW_ARTIST") echo "$F_5_VIEW_ARTIST" ;;
|
||||
"$VIEW_RELEASEGROUP") echo "$F_5_VIEW_RELEASEGROUP" ;;
|
||||
"$VIEW_RELEASE") echo "$F_5_VIEW_RELEASE" ;;
|
||||
"$VIEW_LIST_ARTISTS") echo "$F_5_LIST_ARTISTS" ;;
|
||||
"$VIEW_LIST_ALBUMS") echo "$F_5_LIST_ALBUMS" ;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
case ",$KEYS_FILTER_6," in
|
||||
*",$key,"*)
|
||||
case "$view" in
|
||||
"$VIEW_ARTIST") echo "$F_6_VIEW_ARTIST" ;;
|
||||
"$VIEW_RELEASEGROUP") echo "$F_6_VIEW_RELEASEGROUP" ;;
|
||||
"$VIEW_RELEASE") echo "$F_6_VIEW_RELEASE" ;;
|
||||
"$VIEW_LIST_ARTISTS") echo "$F_6_LIST_ARTISTS" ;;
|
||||
"$VIEW_LIST_ALBUMS") echo "$F_6_LIST_ALBUMS" ;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
case ",$KEYS_FILTER_7," in
|
||||
*",$key,"*)
|
||||
case "$view" in
|
||||
"$VIEW_ARTIST") echo "$F_7_VIEW_ARTIST" ;;
|
||||
"$VIEW_RELEASEGROUP") echo "$F_7_VIEW_RELEASEGROUP" ;;
|
||||
"$VIEW_RELEASE") echo "$F_7_VIEW_RELEASE" ;;
|
||||
"$VIEW_LIST_ARTISTS") echo "$F_7_LIST_ARTISTS" ;;
|
||||
"$VIEW_LIST_ALBUMS") echo "$F_7_LIST_ALBUMS" ;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
case ",$KEYS_FILTER_8," in
|
||||
*",$key,"*)
|
||||
case "$view" in
|
||||
"$VIEW_ARTIST") echo "$F_8_VIEW_ARTIST" ;;
|
||||
"$VIEW_RELEASEGROUP") echo "$F_8_VIEW_RELEASEGROUP" ;;
|
||||
"$VIEW_RELEASE") echo "$F_8_VIEW_RELEASE" ;;
|
||||
"$VIEW_LIST_ARTISTS") echo "$F_8_LIST_ARTISTS" ;;
|
||||
"$VIEW_LIST_ALBUMS") echo "$F_8_LIST_ALBUMS" ;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
case ",$KEYS_FILTER_9," in
|
||||
*",$key,"*)
|
||||
case "$view" in
|
||||
"$VIEW_ARTIST") echo "$F_9_VIEW_ARTIST" ;;
|
||||
"$VIEW_RELEASEGROUP") echo "$F_9_VIEW_RELEASEGROUP" ;;
|
||||
"$VIEW_RELEASE") echo "$F_9_VIEW_RELEASE" ;;
|
||||
"$VIEW_LIST_ARTISTS") echo "$F_9_LIST_ARTISTS" ;;
|
||||
"$VIEW_LIST_ALBUMS") echo "$F_9_LIST_ALBUMS" ;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
case ",$KEYS_FILTER_0," in
|
||||
*",$key,"*)
|
||||
case "$view" in
|
||||
"$VIEW_ARTIST") echo "$F_0_VIEW_ARTIST" ;;
|
||||
"$VIEW_RELEASEGROUP") echo "$F_0_VIEW_RELEASEGROUP" ;;
|
||||
"$VIEW_RELEASE") echo "$F_0_VIEW_RELEASE" ;;
|
||||
"$VIEW_LIST_ARTISTS") echo "$F_0_LIST_ARTISTS" ;;
|
||||
"$VIEW_LIST_ALBUMS") echo "$F_0_LIST_ALBUMS" ;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
}
|
@@ -33,6 +33,17 @@
|
||||
# VIEW_LIST_ALBUMS <-> VIEW_SEARCH_ALBUM.
|
||||
#
|
||||
# Filtering:
|
||||
# - KEYS_FILTER_LOCAL: List only locally available entries
|
||||
# - KEYS_FILTER_0: Clear query
|
||||
# - KEYS_FILTER_1: Reset query to the default one for the current view (see `src/sh/filter.sh`)
|
||||
# - KEYS_FILTER_2: Preset query `2` depending on the view (see `src/sh/filter.sh`)
|
||||
# - KEYS_FILTER_3: Preset query `3` depending on the view (see `src/sh/filter.sh`)
|
||||
# - KEYS_FILTER_4: Preset query `4` depending on the view (see `src/sh/filter.sh`)
|
||||
# - KEYS_FILTER_5: Preset query `5` depending on the view (see `src/sh/filter.sh`)
|
||||
# - KEYS_FILTER_6: Preset query `6` depending on the view (see `src/sh/filter.sh`)
|
||||
# - KEYS_FILTER_7: Preset query `7` depending on the view (see `src/sh/filter.sh`)
|
||||
# - KEYS_FILTER_8: Preset query `8` depending on the view (see `src/sh/filter.sh`)
|
||||
# - KEYS_FILTER_9: Preset query `9` depending on the view (see `src/sh/filter.sh`)
|
||||
#
|
||||
# Playback:
|
||||
#
|
||||
@@ -68,6 +79,20 @@ KEYS_SEARCH_ALBUM="${KEYS_SEARCH_ALBUM:-"alt-x"}"
|
||||
KEYS_SWITCH_ARTIST_ALBUM="${KEYS_SWITCH_ARTIST_ALBUM:-"tab"}"
|
||||
KEYS_SWITCH_LOCAL_REMOTE="${KEYS_SWITCH_LOCAL_REMOTE:-"ctrl-/"}"
|
||||
|
||||
# Filtering:
|
||||
KEYS_FILTER_LOCAL="${KEYS_FILTER_LOCAL:-"alt-l"}"
|
||||
KEYS_FILTER_1="${KEYS_FILTER_1:-"alt-1"}"
|
||||
KEYS_FILTER_2="${KEYS_FILTER_2:-"alt-2"}"
|
||||
KEYS_FILTER_3="${KEYS_FILTER_3:-"alt-3"}"
|
||||
KEYS_FILTER_4="${KEYS_FILTER_4:-"alt-4"}"
|
||||
KEYS_FILTER_5="${KEYS_FILTER_5:-"alt-5"}"
|
||||
KEYS_FILTER_6="${KEYS_FILTER_6:-"alt-6"}"
|
||||
KEYS_FILTER_7="${KEYS_FILTER_7:-"alt-7"}"
|
||||
KEYS_FILTER_8="${KEYS_FILTER_8:-"alt-8"}"
|
||||
KEYS_FILTER_9="${KEYS_FILTER_9:-"alt-9"}"
|
||||
KEYS_FILTER_0="${KEYS_FILTER_9:-"alt-0"}"
|
||||
KEYS_FILTER="$KEYS_FILTER_LOCAL,$KEYS_FILTER_1,$KEYS_FILTER_2,$KEYS_FILTER_3,$KEYS_FILTER_4,$KEYS_FILTER_5,$KEYS_FILTER_6,$KEYS_FILTER_7,$KEYS_FILTER_8,$KEYS_FILTER_9,$KEYS_FILTER_0"
|
||||
|
||||
# ...
|
||||
|
||||
# Specials:
|
||||
@@ -85,11 +110,6 @@ export KEYS_INPUT_SINGLE KEYS_INPUT_SPECIAL
|
||||
KEYS_BROWSE="${KEYS_BROWSE:-"alt-b"}"
|
||||
KEYS_OPEN="${KEYS_OPEN:-"alt-o"}"
|
||||
KEYS_SELECT_ARTIST="${KEYS_SELECT_ARTIST:-"ctrl-a"}"
|
||||
KEYS_FILTER_LOCAL="${KEYS_FILTER_LOCAL:-"alt-l"}"
|
||||
KEYS_FILTER_1="${KEYS_FILTER_1:-"alt-1"}"
|
||||
KEYS_FILTER_2="${KEYS_FILTER_2:-"alt-2"}"
|
||||
KEYS_FILTER_3="${KEYS_FILTER_3:-"alt-3"}"
|
||||
KEYS_FILTER_4="${KEYS_FILTER_4:-"alt-4"}"
|
||||
KEYS_PLAY="${KEYS_PLAY:-"enter"}"
|
||||
KEYS_QUEUE="${KEYS_QUEUE:-"ctrl-alt-m"}"
|
||||
KEYS_SHOW_PLAYLIST="${KEYS_SHOW_PLAYLIST:-"ctrl-p"}"
|
||||
|
@@ -132,21 +132,3 @@ FORMAT_STATUS_CANCELLED="${FORMAT_STATUS_CANCELLED:-"❌"}"
|
||||
REC_FORMAT="${REC_FORMAT:-"${CNOTE}${FAINT}<<med>>\t${CNOTE}<<nr>>$OFF\t${CTITLE}<<title>>\t${CARTIST}<<artist>>\t${CXXX}<<duration>>$OFF"}"
|
||||
# Format of a track in the playlist
|
||||
REC_FORMAT_NO_NUMBER="${REC_FORMAT_NO_NUMBER:-"${CTITLE}<<title>>\t${CARTIST}<<artist>>\t${CXXX}<<duration>>$OFF"}"
|
||||
|
||||
# Derivatives
|
||||
# ===========
|
||||
QUERY_LOCAL=$(printf "%s" "$FORMAT_LOCAL" | sed "s/${ESC}\[[0-9;]*[mK]//g" | sed "s/ /\\\ /g")
|
||||
QUERY_HAS_SECONDARY=$(printf "$FORMAT_TYPE_HAS_SECONDARY" "" | sed "s/${ESC}\[[0-9;]*[mK]//g" | sed "s/ /\\\ /g")
|
||||
QUERY_ALBUM=$(printf "%s" "$FORMAT_TYPE_ALBUM" | sed "s/${ESC}\[[0-9;]*[mK]//g" | sed "s/ /\\\ /g")
|
||||
QUERY_EP=$(printf "%s" "$FORMAT_TYPE_EP" | sed "s/${ESC}\[[0-9;]*[mK]//g" | sed "s/ /\\\ /g")
|
||||
QUERY_SINGLE=$(printf "%s" "$FORMAT_TYPE_SINGLE" | sed "s/${ESC}\[[0-9;]*[mK]//g" | sed "s/ /\\\ /g")
|
||||
QUERY_BROADCAST=$(printf "%s" "$FORMAT_TYPE_BROADCAST" | sed "s/${ESC}\[[0-9;]*[mK]//g" | sed "s/ /\\\ /g")
|
||||
QUERY_OTHER=$(printf "%s" "$FORMAT_TYPE_OTHER" | sed "s/${ESC}\[[0-9;]*[mK]//g" | sed "s/ /\\\ /g")
|
||||
if printf "$RV_FORMAT" | grep -q "<<status>>"; then
|
||||
QUERY_RV=$(printf "%s" "$FORMAT_STATUS_OFFICIAL" | sed "s/${ESC}\[[0-9;]*[mK]//g" | sed "s/ /\\\ /g")
|
||||
else
|
||||
QUERY_RV=""
|
||||
fi
|
||||
|
||||
# Necessary exports
|
||||
export QUERY_LOCAL QUERY_HAS_SECONDARY QUERY_ALBUM QUERY_EP QUERY_SINGLE QUERY_BROADCAST QUERY_OTHER QUERY_RV
|
||||
|
Reference in New Issue
Block a user