rg support

This commit is contained in:
2025-07-29 22:07:54 +02:00
parent 8bbc57ffb2
commit 3e3622b5be
4 changed files with 121 additions and 71 deletions

View File

@@ -1,57 +1,43 @@
BEGIN { BEGIN { OFS="\t" }
OFS="\t"
year[0] = 0; del year[0]
title[0] = 0; del title[0]
type[0] = 0; del type[0]
id[0] = 0; del id[0]
score[0] = 0; del score[0]
}
function get_score(rgdt, rgti, dt, ti, qy, res) {
res = 0
if (rgdt == dt)
res = res + 5
if (rgti == ti)
res = res + 5
if (qy == "normal" || qy == "unknown")
res = res + 1
if (qy == "high")
res = res + 2
return res
}
{ {
gsub("&", "\\\\&") gsub("&", "\\\\&")
rgmi = $1 # Release Group ID id = $1
rgty = $2 # Release Group Type status = $2
rgdt = substr($3, 1, 4) + 0 # Release Group Year year = substr($3, 1, 4) + 0
rgti = $4 # Release Group Title year = year == 0 ? "" : year
mi = $5 # MusicBrainz Release ID covercount = $4
qy = $6 # Release Quality label = $5
dt = substr($7, 1, 4) + 0 # Release Year trackcnt = $6
ti = $8 # Release Title media = $7
s = get_score(rgdt, rgti, dt, ti, qy) country = $8
if (score[rgmi] < s) { title = $9
score[rgmi] = s artist = $10
year[rgmi] = dt switch (status) {
title[rgmi] = ti case "Official": line_status=release_official; break
type[rgmi] = rgty case "Promotion": line_status=release_promotion; break
id[rgmi] = mi case "Bootleg": line_status=release_bootleg; break
} case "Pseudo-release": line_status=release_pseudo; break
case "Withdrawn": line_status=release_withdrawn; break
case "Expunged": line_status=release_expunged; break
case "Cancelled": line_status=release_cancelled; break
default: line_status=""
} }
line = release_format
if (artist != rg_artist && title != rg_title)
line = line "\t" release_format_title_artist
else if (artist != rg_artist && title == rg_title)
line = line "\t" release_format_artist
else if (artist != rg_artist && title == rg_title)
line = line "\t" release_format_title
END { sub("<<status>>", line_status, line)
for (rgmi in id) { sub("<<year>>", year, line)
if (type[rgmi] == "Single") sub("<<tracks>>", trackcnt, line)
line = format_single sub("<<media>>", media, line)
else if (type[rgmi] == "Album") sub("<<label>>", label, line)
line = format_album sub("<<title>>", title, line)
else if (type[rgmi] == "EP") sub("<<artist>>", artist, line)
line = format_ep sortk = year ? year : 0
else print sortk, line, id
line = format_album
sub("<<year>>", dt, line)
sub("<<title>>", ti, line)
print mi, line
}
} }

View File

@@ -76,11 +76,6 @@ if [ "${1:-}" = "--internal-search" ]; then
exit 0 exit 0
fi fi
if [ "${1:-}" = "--internal-list-releases" ]; then
print "NOT IMPLEMENTED"
exit 0
fi
if [ "${1:-}" = "--internal-list-releasegroups-fresh" ]; then if [ "${1:-}" = "--internal-list-releasegroups-fresh" ]; then
artistid="$2" artistid="$2"
cache_delete_artist "$artistid" cache_delete_artist "$artistid"
@@ -133,6 +128,47 @@ if [ "${1:-}" = "--internal-list-releasegroups" ]; then
exit 0 exit 0
fi fi
if [ "${1:-}" = "--internal-list-releases" ]; then
title="$(mb_releasegroup "$2" |
$JQ -r '.title')"
artist="$(mb_releasegroup "$2" |
$JQ -r '."artist-credit" | map(([.name, .joinphrase]|join(""))) | join("")')"
mb_releasegroup_releases "$2" |
$JQ -r '."releases"[] | [
.id,
.status,
.date,
."cover-art-archive".count,
(."label-info" | map(.label.name) | unique | join(", ")),
(.media | map(."track-count") | add),
(.media | map(.format) | unique | join(", ")),
.country,
.title,
(."artist-credit" | map(([.name, .joinphrase]|join(""))) | join(""))
] | join("\t")' |
awk \
-F "\t" \
-v release_official="$RELEASE_OFFICIAL" \
-v release_promotion="$RELEASE_PROMOTION" \
-v release_bootleg="$RELEASE_BOOTLEG" \
-v release_pseudo="$RELEASE_PSEUDO" \
-v release_withdrawn="$RELEASE_WITHDRAWN" \
-v release_expunged="$RELEASE_EXPUNGED" \
-v release_cancelled="$RELEASE_CANCELLED" \
-v release_format="$RELEASE_FORMAT" \
-v release_format_title_artist="$RELEASE_TITLE_ARTIST" \
-v release_format_title="$RELEASE_TITLE" \
-v release_format_artist="$RELEASE_ARTIST" \
-v rg_artist="$artist" \
-v rg_title="$title" \
"$AWK_RELEASES" |
sort -n -r |
cut -d "$(printf '\t')" -f 2- |
column -t -s "$(printf '\t')" |
sed 's| \+\([0-9a-f-]\+\)$|\t\1|'
exit 0
fi
if [ "${1:-}" = "--help" ]; then if [ "${1:-}" = "--help" ]; then
cat <<EOF cat <<EOF
Usage: $0 [ --help | --show-artist <mbid> ] Usage: $0 [ --help | --show-artist <mbid> ]
@@ -180,17 +216,29 @@ while true; do
--bind="ctrl-d:half-page-down,ctrl-u:half-page-up" \ --bind="ctrl-d:half-page-down,ctrl-u:half-page-up" \
--bind="ctrl-r:reload:$0 --internal-list-releasegroups-fresh \"$2\"" --bind="ctrl-r:reload:$0 --internal-list-releasegroups-fresh \"$2\""
) )
[ "$sel" ] && set -- "--show-release" "$sel" [ "$sel" ] && set -- "--show-releasegroup" "$sel"
;; ;;
"--show-release-group") "--show-releasegroup")
title="$(mb_releasegroup "$2" | title="$(mb_releasegroup "$2" |
$JQ -r '.title')" $JQ -r '.title')"
artist="$(mb_releasegroup "$2" | artist="$(mb_releasegroup "$2" |
$JQ -r '."artist-credit" | map(([.name, .joinphrase]|join(""))) | join("")')" $JQ -r '."artist-credit" | map(([.name, .joinphrase]|join(""))) | join("")')"
echo "$title" sel=$(
echo "$artist" $0 --internal-list-releases "$2" |
$FZF \
--ansi \
--reverse \
--cycle \
--no-sort \
--query="$RELEASE_OFFICIAL " \
--delimiter="\t" \
--prompt="$(printf "$FULL_PROMPT" "$artist" "$title")" \
--accept-nth="{2}" \
--with-nth="{1}" \
--bind="ctrl-d:half-page-down,ctrl-u:half-page-up"
)
exit 0 exit 0
set -- "" [ "$sel" ] && set -- "--show-release" "$sel"
;; ;;
*) *)
sel=$( sel=$(

View File

@@ -43,7 +43,7 @@ api_mb_browse_releasegroup_releases() {
$CURL \ $CURL \
--get \ --get \
--data fmt=json \ --data fmt=json \
--data inc=artist-credits \ --data inc="artist-credits+labels+media" \
--data limit="$MB_BROWSE_STEPS" \ --data limit="$MB_BROWSE_STEPS" \
--data offset="${2:-0}" \ --data offset="${2:-0}" \
--data release-group="$1" \ --data release-group="$1" \

View File

@@ -1,15 +1,22 @@
# Colors
FAINT="\033[2m" FAINT="\033[2m"
COLOR_ARTIST="\033[38;5;209m" COLOR_ARTIST="\033[38;5;209m"
COLOR_DISAMBIGUATION="$FAINT\033[38;5;172m" COLOR_DISAMBIGUATION="$FAINT\033[38;5;172m"
COLOR_DESCRIPTION="${COLOR_DESCRIPTION:-"\033[38;5;254m"}" COLOR_DESCRIPTION="${COLOR_DESCRIPTION:-"\033[38;5;254m"}"
COLOR_LIFESPAN="${COLOR_LIFESPAN:-"\033[38;5;251m"}" COLOR_LIFESPAN="${COLOR_LIFESPAN:-"\033[38;5;251m"}"
COLOR_RESET="\033[m" COLOR_RESET="\033[m"
COLOR_NOTE="\033[38;5;242m"
COLOR_TYPE_SECONDARY="$COLOR_NOTE"
COLOR_RELEASE_TITLE="\033[38;5;229m"
COLOR_RELEASE_YEAR="\033[38;5;179m"
COLOR_RELEASE_STATUS="$COLOR_RELEASE_YEAR"
# Artist view
FORMAT_PERSON="${FORMAT_PERSON:-🧑‍🎤 $COLOR_ARTIST<<name>>$COLOR_RESET}" FORMAT_PERSON="${FORMAT_PERSON:-🧑‍🎤 $COLOR_ARTIST<<name>>$COLOR_RESET}"
FORMAT_GROUP="${FORMAT_GROUP:-🧑‍🤝‍🧑 $COLOR_ARTIST<<name>>$COLOR_RESET}" FORMAT_GROUP="${FORMAT_GROUP:-🧑‍🤝‍🧑 $COLOR_ARTIST<<name>>$COLOR_RESET}"
FORMAT_DISAMBIGUATION="${FORMAT_DISAMBIGUATION:-$COLOR_DISAMBIGUATION(<<disambiguation>>)$COLOR_RESET}" FORMAT_DISAMBIGUATION="${FORMAT_DISAMBIGUATION:-$COLOR_DISAMBIGUATION(<<disambiguation>>)$COLOR_RESET}"
COLOR_TYPE_SECONDARY="\033[38;5;242m"
COLOR_RELEASE_TITLE="\033[38;5;229m" # Release group view
COLOR_RELEASE_YEAR="\033[38;5;179m"
FORMAT_RELEASE="${FORMAT_RELEASE:-"${COLOR_RELEASE_TITLE}<<title>>$COLOR_RESET"}" FORMAT_RELEASE="${FORMAT_RELEASE:-"${COLOR_RELEASE_TITLE}<<title>>$COLOR_RESET"}"
FORMAT_RELEASE_W_ARTIST="${FORMAT_RELEASE_W_ARTIST:-"${COLOR_RELEASE_TITLE}<<title>>$COLOR_RESET${COLOR_ARTIST}<<artist>>$COLOR_RESET"}" FORMAT_RELEASE_W_ARTIST="${FORMAT_RELEASE_W_ARTIST:-"${COLOR_RELEASE_TITLE}<<title>>$COLOR_RESET${COLOR_ARTIST}<<artist>>$COLOR_RESET"}"
FORMAT_YEAR="${FORMAT_YEAR:-"${COLOR_RELEASE_YEAR}(<<year>>)${COLOR_RESET}"}" FORMAT_YEAR="${FORMAT_YEAR:-"${COLOR_RELEASE_YEAR}(<<year>>)${COLOR_RESET}"}"
@@ -33,14 +40,10 @@ FORMAT_TYPE_SECONDARY_MIXTAPE="${FORMAT_TYPE_SECONDARY_MIXTAPE:-"📼 mixtape"}"
FORMAT_TYPE_SECONDARY_DEMO="${FORMAT_TYPE_SECONDARY_DEMO:-"🧪 demo"}" FORMAT_TYPE_SECONDARY_DEMO="${FORMAT_TYPE_SECONDARY_DEMO:-"🧪 demo"}"
FORMAT_TYPE_SECONDARY_FIELDREC="${FORMAT_TYPE_SECONDARY_FIELDREC:-"🌿 field recording"}" FORMAT_TYPE_SECONDARY_FIELDREC="${FORMAT_TYPE_SECONDARY_FIELDREC:-"🌿 field recording"}"
# Prompts
SEARCH_PROMPT=${SEARCH_PROMPT:-"🔎 〉"} SEARCH_PROMPT=${SEARCH_PROMPT:-"🔎 〉"}
ARTIST_PROMPT="${ARTIST_PROMPT:-"🎤 ${COLOR_ARTIST}%s$COLOR_RESET"}" ARTIST_PROMPT="${ARTIST_PROMPT:-"🎤 ${COLOR_ARTIST}%s$COLOR_RESET"}"
#BROWSE_PROMPT_ROOT="${BROWSE_PROMPT_ROOT:-"$SEARCH_PROMPT"}" FULL_PROMPT="${FULL_PROMPT:-"🎤 ${COLOR_ARTIST}%s$COLOR_RESET » ${COLOR_RELEASE_TITLE}%s$COLOR_RESET"}"
#BROWSE_PROMPT_ARTIST="${BROWSE_PROMPT_ARTIST:-"$AFMT 〉"}"
#BROWSE_PROMPT_RELEASE="${BROWSE_PROMPT_RELEASE:-"$AFMT 》 $RFMT 〉"}"
#AFMT="${AFMT:-"🎤 ${ARTIST_COLOR}%s${OFF}"}"
#RFMT="${RFMT:-"💽 ${RELEASE_COLOR}%s${OFF}"}"
#TFMT="${TFMT:-"🎵 ${TRACK_COLOR}%s${OFF}"}"
# Artist Preview # Artist Preview
FORMAT_DATE="${FORMAT_DATE:-"%s"}" FORMAT_DATE="${FORMAT_DATE:-"%s"}"
@@ -48,3 +51,16 @@ FORMAT_PLACE="${FORMAT_PLACE:-"%s"}"
FORMAT_DATEPLACE="${FORMAT_DATEPLACE:-"%s, %s"}" FORMAT_DATEPLACE="${FORMAT_DATEPLACE:-"%s, %s"}"
FORMAT_LIFESPAN_BORN="${FORMAT_LIFESPAN_BORN:-"🍼 Born: %s"}" FORMAT_LIFESPAN_BORN="${FORMAT_LIFESPAN_BORN:-"🍼 Born: %s"}"
FORMAT_LIFESPAN_DIED="${FORMAT_LIFESPAN_DIED:-"🕯️ Died: %s"}" FORMAT_LIFESPAN_DIED="${FORMAT_LIFESPAN_DIED:-"🕯️ Died: %s"}"
# Release view
RELEASE_OFFICIAL="${RELEASE_OFFICIAL:-"🟢 official"}"
RELEASE_PROMOTION="${RELEASE_PROMOTION:-"📣 promo"}"
RELEASE_BOOTLEG="${RELEASE_BOOTLEG:-"💣 bootleg"}"
RELEASE_PSEUDO="${RELEASE_PSEUDO:-"🌀 pseudo"}"
RELEASE_WITHDRAWN="${RELEASE_WITHDRAWN:-"🔙 withdrawn"}"
RELEASE_EXPUNGED="${RELEASE_EXPUNGED:-"🧹 expunged"}"
RELEASE_CANCELLED="${RELEASE_CANCELLED:-"❌ cancelled"}"
RELEASE_FORMAT="${COLOR_TYPE_SECONDARY}<<status>>$COLOR_RESET\t${COLOR_RELEASE_YEAR}<<year>>$COLOR_RESET\t${COLOR_NOTE}<<tracks>> tx / <<media>>$COLOR_RESET\t${COLOR_ARTIST}<<label>>$COLOR_RESET"
RELEASE_TITLE_ARTIST="${FAINT}${COLOR_RELEASE_TITLE}<<title>>$COLOR_RESET${FAINT}${COLOR_ARTIST}<<artist>>$COLOR_RESET"
RELEASE_TITLE="${FAINT}${COLOR_RELEASE_TITLE}<<title>>$COLOR_RESET"
RELEASE_ARTIST="${FAINT}by ${COLOR_ARTIST}<<artist>>$COLOR_RESET"