improved release group display

This commit is contained in:
2025-07-22 16:14:23 +02:00
parent 47194034bf
commit fa7c37c7ab
4 changed files with 97 additions and 33 deletions

View File

@@ -1,23 +1,47 @@
BEGIN { OFS="\t" } BEGIN { OFS="\t" }
{ {
line_type=""
line_sectype=""
line_release=format_release
line_year=""
gsub("&", "\\\\&") gsub("&", "\\\\&")
id = $1 id = $1
type = $2 type = $2
year = substr($3, 1, 4) + 0 sectype = $3
title = $4 year = substr($4, 1, 4) + 0
if (type == "Single") title = $5
line = format_single switch (type) {
else if (type == "Album") case "Single": line_type=format_single; break
line = format_album case "Album": line_type=format_album; break
else if (type == "EP") case "EP": line_type=format_ep; break
line = format_ep case "Broadcast": line_type=format_broadcast; break
else case "Other": line_type=format_other; break
line = format_album default: line_type="unknown type"
if (year) }
line = line " " format_year split(sectype, a, ";")
sub("<<title>>", title, line) for (i in a) {
sub("<<year>>", year, line) t=""
switch (sectype) {
case "Compilation": t=format_compilation; break
case "Soundtrack": t=format_soundtrack; break
case "Spokenword": t=format_spokenword; break
case "Interview": t=format_interview; break
case "Audiobook": t=format_audiobook; break
case "Audio drama": t=format_audiodrama; break
case "Live": t=format_live; break
case "Remix": t=format_remix; break
case "DJ-mix": t=format_djmix; break
case "Mixtape/Street": t=format_mixtape; break
case "Demo": t=format_demo; break
case "Field recording": t=fieldrec; break
}
if (t)
line_sectype=line_sectype ? line_sectype " / " t : t
}
sub("<<title>>", title, line_release)
line_year = year ? format_year : ""
sub("<<year>>", year, line_year)
sort = year ? year : 0 sort = year ? year : 0
print sort, id, line print line_type, line_sectype, line_release, line_year, sort, id
} }

View File

@@ -68,17 +68,36 @@ if [ "${1:-}" = "--internal-browse-artist" ]; then
$JQ -r '."release-groups"[] | [ $JQ -r '."release-groups"[] | [
.id, .id,
."primary-type", ."primary-type",
(."secondary-types"|join(";")),
."first-release-date", ."first-release-date",
.title .title
] | join("\t")' | ] | join("\t")' |
awk \ awk \
-F "\t" \ -F "\t" \
-v format_album="$FORMAT_ALBUM" \ -v format_release="$FORMAT_RELEASE" \
-v format_single="$FORMAT_SINGLE" \
-v format_ep="$FORMAT_EP" \
-v format_year="$FORMAT_YEAR" \ -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_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" | "$AWK_RELEASEGROUPS" |
sort -n -r sort |
sort -t "$(printf '\t')" -k 5 -n -r |
column -t -s "$(printf '\t')" |
sed 's| \+[0-9]\+ \+\([0-9a-f-]\+\)$|\t\1|'
exit 0 exit 0
fi fi
@@ -117,7 +136,7 @@ while true; do
--reverse \ --reverse \
--delimiter="\t" \ --delimiter="\t" \
--accept-nth="{2}" \ --accept-nth="{2}" \
--with-nth="{3}" --with-nth="{1}"
) )
[ "$sel" ] && set -- "--show-release" "$sel" [ "$sel" ] && set -- "--show-release" "$sel"
;; ;;

View File

@@ -2,9 +2,9 @@
mb_browse_releases() { mb_browse_releases() {
$CURL \ $CURL \
--get \ --get \
--data-urlencode fmt=json \ --data fmt=json \
--data inc=release-groups \
--data-urlencode artist="$1" \ --data-urlencode artist="$1" \
--data-urlencode inc=release-groups \
-A "$APP_NAME/$APP_VERSION ($APP_WEBSITE)" \ -A "$APP_NAME/$APP_VERSION ($APP_WEBSITE)" \
"https://musicbrainz.org/ws/2/release" "https://musicbrainz.org/ws/2/release"
} }
@@ -13,7 +13,9 @@ mb_browse_releases() {
mb_browse_release_groups() { mb_browse_release_groups() {
$CURL \ $CURL \
--get \ --get \
--data-urlencode fmt=json \ --data fmt=json \
--data limit=100 \
--data offset="${2:-0}" \
--data-urlencode artist="$1" \ --data-urlencode artist="$1" \
-A "$APP_NAME/$APP_VERSION ($APP_WEBSITE)" \ -A "$APP_NAME/$APP_VERSION ($APP_WEBSITE)" \
"https://musicbrainz.org/ws/2/release-group" "https://musicbrainz.org/ws/2/release-group"
@@ -23,7 +25,7 @@ mb_browse_release_groups() {
mb_search_artists() { mb_search_artists() {
$CURL \ $CURL \
--get \ --get \
--data-urlencode fmt=json \ --data fmt=json \
--data-urlencode query="$1" \ --data-urlencode query="$1" \
-A "$APP_NAME/$APP_VERSION ($APP_WEBSITE)" \ -A "$APP_NAME/$APP_VERSION ($APP_WEBSITE)" \
"https://musicbrainz.org/ws/2/artist" "https://musicbrainz.org/ws/2/artist"
@@ -33,8 +35,8 @@ mb_search_artists() {
mb_get_artist() { mb_get_artist() {
$CURL \ $CURL \
--get \ --get \
--data-urlencode fmt=json \ --data fmt=json \
--data-urlencode inc="url-rels" \ --data inc="url-rels" \
-A "$APP_NAME/$APP_VERSION ($APP_WEBSITE)" \ -A "$APP_NAME/$APP_VERSION ($APP_WEBSITE)" \
"https://musicbrainz.org/ws/2/artist/$1" "https://musicbrainz.org/ws/2/artist/$1"
} }

View File

@@ -4,14 +4,33 @@ COLOR_RESET="\033[m"
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_ALBUM="\033[38;5;208m" COLOR_TYPE="\033[38;5;208m"
COLOR_SINGLE="\033[38;5;210m" COLOR_TYPE_SECONDARY="\033[38;5;210m"
COLOR_EP="\033[38;5;209m"
COLOR_RELEASE_TITLE="\033[38;5;229m" COLOR_RELEASE_TITLE="\033[38;5;229m"
COLOR_RELEASE_YEAR="\033[38;5;179m" COLOR_RELEASE_YEAR="\033[38;5;179m"
FORMAT_ALBUM="${FORMAT_ALBUM:-"💽 ${COLOR_ALBUM} LP $COLOR_RESET $COLOR_RELEASE_TITLE<<title>>$COLOR_RESET"}" FORMAT_RELEASE="${FORMAT_RELEASE:-"${COLOR_RELEASE_TITLE}<<title>>$COLOR_RESET"}"
FORMAT_SINGLE="${FORMAT_SINGLE:-"💽 ${COLOR_SINGLE}single$COLOR_RESET $COLOR_RELEASE_TITLE<<title>>$COLOR_RESET"}"
FORMAT_EP="${FORMAT_EP:-"💽 ${COLOR_EP} EP $COLOR_RESET $COLOR_RELEASE_TITLE<<title>>$COLOR_RESET"}"
FORMAT_YEAR="${FORMAT_YEAR:-"${COLOR_RELEASE_YEAR}(<<year>>)${COLOR_RESET}"}" FORMAT_YEAR="${FORMAT_YEAR:-"${COLOR_RELEASE_YEAR}(<<year>>)${COLOR_RESET}"}"
FORMAT_TYPE_ALBUM="${FORMAT_TYPE_ALBUM:-"💽 ${COLOR_TYPE}LP$COLOR_RESET"}"
FORMAT_TYPE_EP="${FORMAT_TYPE_EP:-"📀 ${COLOR_TYPE}EP$COLOR_RESET"}"
FORMAT_TYPE_SINGLE="${FORMAT_TYPE_SINGLE:-"🎶 ${COLOR_TYPE}single$COLOR_RESET"}"
FORMAT_TYPE_BROADCAST="${FORMAT_TYPE_BROADCAST:-"📻 ${COLOR_TYPE}broadcast$COLOR_RESET"}"
FORMAT_TYPE_OTHER="${FORMAT_TYPE_OTHER:-"${COLOR_TYPE}other$COLOR_RESET"}"
FORMAT_TYPE_SECONDARY_COMPILATION="${FORMAT_TYPE_SECONDARY_COMPILATION:-"🧩 ${COLOR_TYPE_SECONDARY}compilation$COLOR_RESET"}"
FORMAT_TYPE_SECONDARY_SOUNDTRACK="${FORMAT_TYPE_SECONDARY_SOUNDTRACK:-"🎬 ${COLOR_TYPE_SECONDARY}soundtrack$COLOR_RESET"}"
FORMAT_TYPE_SECONDARY_SPOKENWORD="${FORMAT_TYPE_SECONDARY_SPOKENWORD:-"📖 ${COLOR_TYPE_SECONDARY}spokenword$COLOR_RESET"}"
FORMAT_TYPE_SECONDARY_INTERVIEW="${FORMAT_TYPE_SECONDARY_INTERVIEW:-"💬 ${COLOR_TYPE_SECONDARY}interview$COLOR_RESET"}"
FORMAT_TYPE_SECONDARY_AUDIOBOOK="${FORMAT_TYPE_SECONDARY_AUDIOBOOK:-"🎧 ${COLOR_TYPE_SECONDARY}audiobook$COLOR_RESET"}"
FORMAT_TYPE_SECONDARY_AUDIODRAMA="${FORMAT_TYPE_SECONDARY_AUDIODRAMA:-"🎭 ${COLOR_TYPE_SECONDARY}audio drama$COLOR_RESET"}"
FORMAT_TYPE_SECONDARY_LIVE="${FORMAT_TYPE_SECONDARY_LIVE:-"🎤 ${COLOR_TYPE_SECONDARY}live$COLOR_RESET"}"
FORMAT_TYPE_SECONDARY_REMIX="${FORMAT_TYPE_SECONDARY_REMIX:-"🔁 ${COLOR_TYPE_SECONDARY}remix$COLOR_RESET"}"
FORMAT_TYPE_SECONDARY_DJMIX="${FORMAT_TYPE_SECONDARY_DJMIX:-"🪩 ${COLOR_TYPE_SECONDARY}DJ-mix$COLOR_RESET"}"
FORMAT_TYPE_SECONDARY_MIXTAPE="${FORMAT_TYPE_SECONDARY_MIXTAPE:-"📼 ${COLOR_TYPE_SECONDARY}mixtape$COLOR_RESET"}"
FORMAT_TYPE_SECONDARY_DEMO="${FORMAT_TYPE_SECONDARY_DEMO:-"🧪 ${COLOR_TYPE_SECONDARY}demo$COLOR_RESET"}"
FORMAT_TYPE_SECONDARY_FIELDREC="${FORMAT_TYPE_SECONDARY_FIELDREC:-"🌿 ${COLOR_TYPE_SECONDARY}field recording$COLOR_RESET"}"
export FORMAT_PERSON FORMAT_GROUP FORMAT_DISAMBIGUATION \ export FORMAT_PERSON FORMAT_GROUP FORMAT_DISAMBIGUATION \
FORMAT_ALBUM FORMAT_SINGLE FORMAT_EP FORMAT_YEAR FORMAT_RELEASE FORMAT_YEAR \
FORMAT_TYPE_ALBUM FORMAT_TYPE_SINGLE FORMAT_TYPE_EP FORMAT_TYPE_BROADCAST FORMAT_TYPE_OTHER \
FORMAT_TYPE_SECONDARY_COMPILATION FORMAT_TYPE_SECONDARY_SOUNDTRACK FORMAT_TYPE_SECONDARY_SPOKENWORD \
FORMAT_TYPE_SECONDARY_INTERVIEW FORMAT_TYPE_SECONDARY_AUDIOBOOK FORMAT_TYPE_SECONDARY_AUDIODRAMA \
FORMAT_TYPE_SECONDARY_LIVE FORMAT_TYPE_SECONDARY_REMIX FORMAT_TYPE_SECONDARY_DJMIX FORMAT_TYPE_SECONDARY_MIXTAPE \
FORMAT_TYPE_SECONDARY_DEMO FORMAT_TYPE_SECONDARY_FIELDREC