From c5c0e96942a960459ebf06bacc05c2eaa816d359 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=84min=20Baumeler?= Date: Thu, 31 Jul 2025 21:48:04 +0200 Subject: [PATCH] tab: switch between artist and album search --- src/main.sh | 105 ++++++++++++++++++++++++++++++++++++++++++-------- src/sh/api.sh | 11 +++++- 2 files changed, 100 insertions(+), 16 deletions(-) diff --git a/src/main.sh b/src/main.sh index d664bb3..f74f00e 100755 --- a/src/main.sh +++ b/src/main.sh @@ -50,13 +50,14 @@ if [ "${1:-}" = "--internal-search" ]; then rm -f "$PIDFILE" kill -9 "$pid" >/dev/null 2>&1 || true fi - [ ! "${2}" ] && exit 0 + [ ! "${3}" ] && exit 0 # Save current pid echo "$$" >"$PIDFILE" touch "$LOCKFILE" sleep 1 - api_mb_search_artists "$2" | - $JQ -r '.artists[] | [ + if [ "$2" = "artist" ]; then + api_mb_search_artist "$3" | + $JQ -r '.artists[] | [ .id, .type, .name, @@ -64,14 +65,55 @@ if [ "${1:-}" = "--internal-search" ]; then .["life-span"].begin, .["life-span"].end ] | join("\t")' | - awk \ - -F "\t" \ - -v format_person="$AV_PERSON" \ - -v format_group="$AV_GROUP" \ - -v format_disambiguation="$AV_DISAMBIGUATION" \ - "$AWK_ARTISTS" | - tee "$RESULTS" || - true + awk \ + -F "\t" \ + -v format_person="$AV_PERSON" \ + -v format_group="$AV_GROUP" \ + -v format_disambiguation="$AV_DISAMBIGUATION" \ + "$AWK_ARTISTS" | + tee "$RESULTS" || + true + else + api_mb_search_releasegroup "$3" | + $JQ -r '."release-groups"[] | [ + .id, + ."primary-type", + (."secondary-types"|join(";")), + ."first-release-date", + .title, + (."artist-credit" | map(([.name, .joinphrase]|join(""))) | join("")) + ] | join("\t")' | + awk \ + -F "\t" \ + -v format_release="$RGV_RELEASE" \ + -v format_release_w_artist="$RGV_RELEASE_W_ARTIST" \ + -v format_year="$RGV_YEAR" \ + -v format_album="$FORMAT_TYPE_ALBUM" \ + -v format_single="$FORMAT_TYPE_SINGLE" \ + -v format_ep="$FORMAT_TYPE_EP" \ + -v format_broadcast="$FORMAT_TYPE_BROADCAST" \ + -v format_other="$FORMAT_TYPE_OTHER" \ + -v format_has_secondary="$FORMAT_TYPE_HAS_SECONDARY" \ + -v format_secondary="$FORMAT_TYPE_SECONDARY" \ + -v format_compilation="$FORMAT_TYPE_SECONDARY_COMPILATION" \ + -v format_soundtrack="$FORMAT_TYPE_SECONDARY_SOUNDTRACK" \ + -v format_spokenword="$FORMAT_TYPE_SECONDARY_SPOKENWORD" \ + -v format_interview="$FORMAT_TYPE_SECONDARY_INTERVIEW" \ + -v format_audiobook="$FORMAT_TYPE_SECONDARY_AUDIOBOOK" \ + -v format_audiodrama="$FORMAT_TYPE_SECONDARY_AUDIODRAMA" \ + -v format_live="$FORMAT_TYPE_SECONDARY_LIVE" \ + -v format_remix="$FORMAT_TYPE_SECONDARY_REMIX" \ + -v format_djmix="$FORMAT_TYPE_SECONDARY_DJMIX" \ + -v format_mixtape="$FORMAT_TYPE_SECONDARY_MIXTAPE" \ + -v format_demo="$FORMAT_TYPE_SECONDARY_DEMO" \ + -v format_fieldrec="$FORMAT_TYPE_SECONDARY_FIELDREC" \ + "$AWK_RELEASEGROUPS" | + cut -d "$(printf '\t')" -f 2- | + column -t -s "$(printf '\t')" | + sed 's| \+\([0-9a-f-]\+\)$|\t\1|' | + tee "$RESULTS" || + true + fi rm -f "$LOCKFILE" "$PIDFILE" exit 0 fi @@ -212,7 +254,7 @@ trap 'rm -rf "$tmpdir"' EXIT INT export LOCKFILE RESULTS PIDFILE if [ "${1:-}" = "--search" ]; then - $0 --internal-search "$2" + $0 --internal-search "$2" "$3" exit 0 fi @@ -244,7 +286,6 @@ while true; do lns=$(echo "$sel" | wc -l) key=$(echo "$sel" | head -1 | tail -1) mid=$(echo "$sel" | head -2 | tail -1) - echo "lns=$lns;key=$key;mid=$mid" >>/tmp/foo [ "$lns" -eq 2 ] && [ ! "$key" ] && [ "$mid" ] && set -- "--show-releasegroup" "$mid" [ "$lns" -eq 2 ] && [ "$key" = "ctrl-h" ] && set -- "" [ "$lns" -eq 2 ] && [ "$key" = "ctrl-a" ] && set -- "--select-artist" "$(mb_releasegroup "$mid" | $JQ -r '."artist-credit"')" @@ -330,6 +371,36 @@ while true; do ) [ "$sel" ] && set -- "--show-artist" "$sel" ;; + --search-releasegroup) + sel=$( + printf "" | + $FZF \ + --ansi \ + --reverse \ + --no-sort \ + --disabled \ + --cycle \ + --delimiter="\t" \ + --prompt="$SEARCH_PROMPT" \ + --info="inline-right" \ + --info-command="echo \"Search album\"" \ + --accept-nth="{2}" \ + --with-nth="{1}" \ + --expect="ctrl-c,ctrl-q,tab" \ + --bind="load:transform:[ \"\$FZF_TOTAL_COUNT\" -gt 0 ] && echo \"rebind:ctrl-l\" || echo \"unbind:ctrl-l\"" \ + --bind="ctrl-l:accept" \ + --bind="ctrl-d:half-page-down,ctrl-u:half-page-up" \ + --bind="alt-b:execute-silent:xdg-open 'https://musicbrainz.org/release-group/{r2}' &" \ + --bind="change:execute-silent($0 --internal-search releasegroup \$FZF_QUERY &)+reload($0 --internal-reload)" || true + ) + lns=$(echo "$sel" | wc -l) + key=$(echo "$sel" | head -1 | tail -1) + mid=$(echo "$sel" | head -2 | tail -1) + [ "$key" = "ctrl-c" ] && exit 0 + [ "$key" = "ctrl-q" ] && exit 0 + [ "$key" = "tab" ] && set -- "--search-artist" + [ "$lns" -eq 2 ] && [ ! "$key" ] && [ "$mid" ] && set -- "--show-releasegroup" "$mid" + ;; *) sel=$( printf "" | @@ -347,17 +418,21 @@ while true; do --with-nth="{1}" \ --preview-window="right,25%,border-left,wrap,<30(hidden)" \ --preview="$0 --internal-preview-artist {2}" \ + --expect="ctrl-c,ctrl-q,tab" \ --bind="load:transform:[ \"\$FZF_TOTAL_COUNT\" -gt 0 ] && echo \"rebind:ctrl-l\" || echo \"unbind:ctrl-l\"" \ --bind="ctrl-l:accept" \ --bind="ctrl-d:half-page-down,ctrl-u:half-page-up" \ --bind="down:preview-half-page-down,up:preview-half-page-up" \ --bind="alt-b:execute-silent:xdg-open 'https://musicbrainz.org/artist/{r2}' &" \ - --bind="change:execute-silent($0 --internal-search \$FZF_QUERY &)+reload($0 --internal-reload)" + --bind="change:execute-silent($0 --internal-search artist \$FZF_QUERY &)+reload($0 --internal-reload)" || true ) lns=$(echo "$sel" | wc -l) key=$(echo "$sel" | head -1 | tail -1) mid=$(echo "$sel" | head -2 | tail -1) - [ "$mid" ] && set -- "--show-artist" "$mid" + [ "$key" = "ctrl-c" ] && exit 0 + [ "$key" = "ctrl-q" ] && exit 0 + [ "$key" = "tab" ] && set -- "--search-releasegroup" + [ "$lns" -eq 2 ] && [ ! "$key" ] && [ "$mid" ] && set -- "--show-artist" "$mid" ;; esac done diff --git a/src/sh/api.sh b/src/sh/api.sh index 6483062..bf3004c 100644 --- a/src/sh/api.sh +++ b/src/sh/api.sh @@ -52,7 +52,7 @@ api_mb_browse_releasegroup_releases() { } # Argument: Search string -api_mb_search_artists() { +api_mb_search_artist() { $CURL \ --get \ --data fmt=json \ @@ -61,6 +61,15 @@ api_mb_search_artists() { "https://musicbrainz.org/ws/2/artist" } +api_mb_search_releasegroup() { + $CURL \ + --get \ + --data fmt=json \ + --data-urlencode query="$1" \ + -A "$APP_NAME/$APP_VERSION ($APP_WEBSITE)" \ + "https://musicbrainz.org/ws/2/release-group" +} + api_discogs_artist() { $CURL \ --get \