diff --git a/src/awk/releasegroups.awk b/src/awk/releasegroups.awk index 58a4b8e..3b90dfc 100644 --- a/src/awk/releasegroups.awk +++ b/src/awk/releasegroups.awk @@ -1,23 +1,47 @@ BEGIN { OFS="\t" } { + line_type="" + line_sectype="" + line_release=format_release + line_year="" gsub("&", "\\\\&") id = $1 type = $2 - year = substr($3, 1, 4) + 0 - title = $4 - if (type == "Single") - line = format_single - else if (type == "Album") - line = format_album - else if (type == "EP") - line = format_ep - else - line = format_album - if (year) - line = line " " format_year - sub("<>", title, line) - sub("<<year>>", year, line) + sectype = $3 + year = substr($4, 1, 4) + 0 + title = $5 + switch (type) { + case "Single": line_type=format_single; break + case "Album": line_type=format_album; break + case "EP": line_type=format_ep; break + case "Broadcast": line_type=format_broadcast; break + case "Other": line_type=format_other; break + default: line_type="unknown type" + } + split(sectype, a, ";") + for (i in a) { + 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 - print sort, id, line + print line_type, line_sectype, line_release, line_year, sort, id } diff --git a/src/main.sh b/src/main.sh index 3e7cc1f..cc4448d 100755 --- a/src/main.sh +++ b/src/main.sh @@ -68,17 +68,36 @@ if [ "${1:-}" = "--internal-browse-artist" ]; then $JQ -r '."release-groups"[] | [ .id, ."primary-type", + (."secondary-types"|join(";")), ."first-release-date", .title ] | join("\t")' | awk \ -F "\t" \ - -v format_album="$FORMAT_ALBUM" \ - -v format_single="$FORMAT_SINGLE" \ - -v format_ep="$FORMAT_EP" \ + -v format_release="$FORMAT_RELEASE" \ -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" | - 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 fi @@ -117,7 +136,7 @@ while true; do --reverse \ --delimiter="\t" \ --accept-nth="{2}" \ - --with-nth="{3}" + --with-nth="{1}" ) [ "$sel" ] && set -- "--show-release" "$sel" ;; diff --git a/src/sh/api.sh b/src/sh/api.sh index 39f09c0..c8baa55 100644 --- a/src/sh/api.sh +++ b/src/sh/api.sh @@ -2,9 +2,9 @@ mb_browse_releases() { $CURL \ --get \ - --data-urlencode fmt=json \ + --data fmt=json \ + --data inc=release-groups \ --data-urlencode artist="$1" \ - --data-urlencode inc=release-groups \ -A "$APP_NAME/$APP_VERSION ($APP_WEBSITE)" \ "https://musicbrainz.org/ws/2/release" } @@ -13,7 +13,9 @@ mb_browse_releases() { mb_browse_release_groups() { $CURL \ --get \ - --data-urlencode fmt=json \ + --data fmt=json \ + --data limit=100 \ + --data offset="${2:-0}" \ --data-urlencode artist="$1" \ -A "$APP_NAME/$APP_VERSION ($APP_WEBSITE)" \ "https://musicbrainz.org/ws/2/release-group" @@ -23,7 +25,7 @@ mb_browse_release_groups() { mb_search_artists() { $CURL \ --get \ - --data-urlencode fmt=json \ + --data fmt=json \ --data-urlencode query="$1" \ -A "$APP_NAME/$APP_VERSION ($APP_WEBSITE)" \ "https://musicbrainz.org/ws/2/artist" @@ -33,8 +35,8 @@ mb_search_artists() { mb_get_artist() { $CURL \ --get \ - --data-urlencode fmt=json \ - --data-urlencode inc="url-rels" \ + --data fmt=json \ + --data inc="url-rels" \ -A "$APP_NAME/$APP_VERSION ($APP_WEBSITE)" \ "https://musicbrainz.org/ws/2/artist/$1" } diff --git a/src/sh/theme.sh b/src/sh/theme.sh index 43a894d..d60ea39 100644 --- a/src/sh/theme.sh +++ b/src/sh/theme.sh @@ -4,14 +4,33 @@ COLOR_RESET="\033[m" FORMAT_PERSON="${FORMAT_PERSON:-๐Ÿ‘ค $COLOR_ARTIST<<name>>$COLOR_RESET}" FORMAT_GROUP="${FORMAT_GROUP:-๐Ÿ‘ฅ $COLOR_ARTIST<<name>>$COLOR_RESET}" FORMAT_DISAMBIGUATION="${FORMAT_DISAMBIGUATION:-$COLOR_DISAMBIGUATION(<<disambiguation>>)$COLOR_RESET}" -COLOR_ALBUM="\033[38;5;208m" -COLOR_SINGLE="\033[38;5;210m" -COLOR_EP="\033[38;5;209m" +COLOR_TYPE="\033[38;5;208m" +COLOR_TYPE_SECONDARY="\033[38;5;210m" COLOR_RELEASE_TITLE="\033[38;5;229m" COLOR_RELEASE_YEAR="\033[38;5;179m" -FORMAT_ALBUM="${FORMAT_ALBUM:-"๐Ÿ’ฝ ${COLOR_ALBUM} LP $COLOR_RESET $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_RELEASE="${FORMAT_RELEASE:-"${COLOR_RELEASE_TITLE}<<title>>$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 \ - 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