diff --git a/src/main.sh b/src/main.sh index a7c37da..dc2e230 100755 --- a/src/main.sh +++ b/src/main.sh @@ -94,6 +94,7 @@ MODE_INSERT="show" # --mbsearch # --preview # --show-keybindings +# --remove-from-cache case "${1:-}" in "--lines") # Print lines that are fed into fzf. @@ -327,6 +328,26 @@ case "${1:-}" in print_keybindings "$2" exit 0 ;; +"--remove-from-cache") + # Remove entry from cache to reload + # + # @argument $2: view + # @argument $3: MusicBrainz ID of current object + # @argument $4: MusicBrainz ID of selected object + case "$2" in + "$VIEW_ARTIST") + cache_rm_artist "$3" + cache_rm_releasegroup "$4" + ;; + "$VIEW_RELEASEGROUP") + cache_rm_releasegroup "$3" + cache_rm_release "$4" + ;; + "$VIEW_RELEASE") cache_rm_release "$3" ;; + "$VIEW_LIST_ALBUMS" | "$VIEW_SEARCH_ALBUM") cache_rm_releasegroup "$4" ;; + esac + exit 0 + ;; esac # Load configuration @@ -683,6 +704,7 @@ open \"\$(dirname {4})\"" \ --bind="$KEYS_YANK_CURRENT:execute-silent:printf {2} | $CLIP" \ --bind="$KEYS_SHOW_PLAYLIST:transform:echo \"print($VIEW_PLAYLIST)+print()+print($FZF_CURRENT_VIEW)+print({2})+accept\"" \ --bind="$KEYS_KEYBINDINGS:preview:$0 --show-keybindings $FZF_CURRENT_VIEW" \ + --bind="$KEYS_REFRESH:execute-silent($0 --remove-from-cache $FZF_CURRENT_VIEW {2} {3})+transform:$0 --action-draw $FZF_CURRENT_MODE $FZF_CURRENT_VIEW {2}" \ --bind="$KEYS_QUIT:print($VIEW_QUIT)+accept" \ --bind="$KEYS_N_QUIT:transform:$IN_NORMAL_MODE && ($IN_LIST_ARTISTS_VIEW && echo \"print($VIEW_QUIT)+accept\" || $0 --action-draw $MODE_NORMAL $VIEW_LIST_ARTISTS) || $PUT_FZF_KEY_LOGIC" \ --bind="$KEYS_SCROLL_PREVIEW_DOWN:preview-down" \ diff --git a/src/sh/cache.sh b/src/sh/cache.sh index f66cfcc..f1c9a2b 100644 --- a/src/sh/cache.sh +++ b/src/sh/cache.sh @@ -244,3 +244,54 @@ cache_get_file_batch() { cache_mbid_from_path_batch() { cat | awk -F "/" '{ print $(NF-1) }' } + +# Remove artist items from cache +# +# @argument $1: MusicBrainz arist ID +# +# This function is "safer" than other because it removes data. These safty +# checks are paranoid. +cache_rm_artist() { + [ "$CACHEDIR" ] || return 1 + [ -d "$CACHEDIR" ] || return 1 + [ -d "$CACHEDIR/$TYPE_ARTIST" ] || return 1 + d="$CACHEDIR/$TYPE_ARTIST/$(__radix "$1")/" + [ "$d" ] || return 1 + [ -d "$d" ] || return 1 + info "removing $d" + rm -rf "$d" +} + +# Remove release-group items from cache +# +# @argument $1: MusicBrainz release-group ID +# +# This function is "safer" than other because it removes data. These safty +# checks are paranoid. +cache_rm_releasegroup() { + [ "$CACHEDIR" ] || return 1 + [ -d "$CACHEDIR" ] || return 1 + [ -d "$CACHEDIR/$TYPE_RELEASEGROUP" ] || return 1 + d="$CACHEDIR/$TYPE_RELEASEGROUP/$(__radix "$1")/" + [ "$d" ] || return 1 + [ -d "$d" ] || return 1 + info "removing $d" + rm -rf "$d" +} + +# Remove release items from cache +# +# @argument $1: MusicBrainz release ID +# +# This function is "safer" than other because it removes data. These safty +# checks are paranoid. +cache_rm_release() { + [ "$CACHEDIR" ] || return 1 + [ -d "$CACHEDIR" ] || return 1 + [ -d "$CACHEDIR/$TYPE_RELEASE" ] || return 1 + d="$CACHEDIR/$TYPE_RELEASE/$(__radix "$1")/" + [ "$d" ] || return 1 + [ -d "$d" ] || return 1 + info "removing $d" + rm -rf "$d" +} diff --git a/src/sh/keys.sh b/src/sh/keys.sh index c415029..84fc568 100644 --- a/src/sh/keys.sh +++ b/src/sh/keys.sh @@ -59,6 +59,7 @@ # - KEYS_SCROLL_PREVIEW_UP: Scroll preview up # - KEYS_PREVIEW_OPEN: Open preview window # - KEYS_PREVIEW_CLOSE: Close preview window +# - KEYS_REFRESH: Refresh current entry # # Playback: # - KEYS_PLAY: Play selected release or selected track @@ -150,9 +151,10 @@ if [ ! "${KEYS_LOADED:-}" ]; then KEYS_SCROLL_PREVIEW_UP="${KEYS_SCROLL_PREVIEW_UP:-"page-up"}" KEYS_PREVIEW_OPEN="${KEYS_PREVIEW_OPEN:-"alt-up"}" KEYS_PREVIEW_CLOSE="${KEYS_PREVIEW_CLOSE:-"alt-down"}" + KEYS_REFRESH="${KEYS_REFRESH:-"ctrl-r"}" export KEYS_BROWSE KEYS_OPEN KEYS_N_YANK KEYS_YANK_CURRENT KEYS_SHOW_PLAYLIST \ KEYS_KEYBINDINGS KEYS_QUIT KEYS_N_QUIT KEYS_SCROLL_PREVIEW_DOWN \ - KEYS_SCROLL_PREVIEW_UP KEYS_PREVIEW_CLOSE KEYS_PREVIEW_OPEN + KEYS_SCROLL_PREVIEW_UP KEYS_PREVIEW_CLOSE KEYS_PREVIEW_OPEN KEYS_REFRESH # Playback: KEYS_PLAY="${KEYS_PLAY:-"enter"}" @@ -370,6 +372,7 @@ print_keybindings() { "$KEYS_OPEN" "Open selected item in file manager" \ "$KEYS_N_YANK" "Copy selected MusicBrainz ID (normal)" \ "$KEYS_YANK_CURRENT" "Copy current MusicBrainz ID" \ + "$KEYS_REFRESH" "Refresh current entry" \ "$KEYS_QUIT" "Quit applicaion" \ "$KEYS_N_QUIT" "First view or quit (normal)" ;;