#!/bin/sh set -eu # Load helper methods . "sh/info.sh" # Load helper methods . "sh/helper.sh" # Load theme . "sh/theme.sh" # Load AWK scripts . "sh/awk.sh" # Load tools . "sh/tools.sh" # Load MusicBrainz and Discogs methods . "sh/api.sh" # Load preview methods . "sh/preview.sh" # Load cache functionality . "sh/cache.sh" # Load MusicBrainz wrappers . "sh/mb.sh" if [ "${1:-}" = "--internal-preview-artist" ]; then __preview_artist "$2" exit 0 fi if [ "${1:-}" = "--internal-reload" ]; then sleep 1 while [ -f "$LOCKFILE" ]; do sleep 1 done cat "$RESULTS" exit 0 fi if [ "${1:-}" = "--internal-search" ]; then printf "" >"$RESULTS" if [ -f "$PIDFILE" ]; then pid=$(cat "$PIDFILE") rm -f "$PIDFILE" kill -9 "$pid" >/dev/null 2>&1 || true fi [ ! "${2}" ] && exit 0 # Save current pid echo "$$" >"$PIDFILE" touch "$LOCKFILE" sleep 1 __api_mb_search_artists "$2" | $JQ -r '.artists[] | [ .id, .type, .name, .disambiguation, .["life-span"].begin, .["life-span"].end ] | join("\t")' | awk \ -F "\t" \ -v format_person="$FORMAT_PERSON" \ -v format_group="$FORMAT_GROUP" \ -v format_disambiguation="$FORMAT_DISAMBIGUATION" \ "$AWK_ARTISTS" | tee "$RESULTS" || true rm -f "$LOCKFILE" "$PIDFILE" exit 0 fi if [ "${1:-}" = "--internal-list-releases-fresh" ]; then artistid="$2" cache_delete_artist "$artistid" shift 2 set -- "--internal-list-releases" "$artistid" mb_artist "$artistid" >/dev/null fi if [ "${1:-}" = "--internal-list-releases" ]; then name=$(mb_artist "$2" | $JQ -r '.name') mb_artist_releasegroups "$2" | $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 artist="$name" \ -v format_release="$FORMAT_RELEASE" \ -v format_release_w_artist="$FORMAT_RELEASE_W_ARTIST" \ -v format_year="$FORMAT_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" | sort | sort -t "$(printf '\t')" -k 4 -n -r | column -t -s "$(printf '\t')" | sed 's| \+[0-9]\+ \+\([0-9a-f-]\+\)$|\t\1|' exit 0 fi if [ "${1:-}" = "--help" ]; then $CAT <\` ] Options: \`--help\`: Show this help and exit. \`--show-artist\` \`\`: Show releaes of the artist given by the MusicBrainz ID \`\`. EOF exit 0 fi # Set window title printf '\033]0;%s\007' "$WINDOW_TITLE" # Generate filenames for temporary files tmpdir=$(mktemp -d) LOCKFILE="$tmpdir/lock" RESULTS="$tmpdir/results" PIDFILE="$tmpdir/pid" trap 'rm -rf "$tmpdir"' EXIT INT export LOCKFILE RESULTS PIDFILE if [ "${1:-}" = "--search" ]; then $0 --internal-search "$2" exit 0 fi while true; do case "${1:-}" in "--show-artist") name=$(mb_artist "$2" | $JQ -r '.name') secsymb=$(printf "$FORMAT_TYPE_HAS_SECONDARY" "") sel=$( $0 --internal-list-releases "$2" | $FZF \ --ansi \ --reverse \ --cycle \ --query="!$secsymb " \ --delimiter="\t" \ --prompt="$(printf "$ARTIST_PROMPT" "$name")" \ --accept-nth="{2}" \ --with-nth="{1}" \ --bind="alt-1:change-query(!$secsymb ),alt-2:change-query($secsymb )" \ --bind="ctrl-d:half-page-down,ctrl-u:half-page-up" \ --bind="ctrl-r:reload:$0 --internal-list-releases-fresh \"$2\"" ) [ "$sel" ] && set -- "--show-release" "$sel" ;; *) sel=$( printf "" | $FZF \ --ansi \ --reverse \ --no-sort \ --disabled \ --cycle \ --delimiter="\t" \ --prompt="$SEARCH_PROMPT" \ --info="inline-right" \ --info-command="echo \"Search music artist\"" \ --accept-nth="{1}" \ --with-nth="{2}" \ --preview-window="wrap" \ --preview="$0 --internal-preview-artist {1}" \ --bind="ctrl-d:half-page-down,ctrl-u:half-page-up" \ --bind="change:execute-silent($0 --internal-search \$FZF_QUERY &)+reload($0 --internal-reload)" ) [ "$sel" ] && set -- "--show-artist" "$sel" ;; esac done