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, 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, line_release)
+ line_year = year ? format_year : ""
+ sub("<>", 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<>$COLOR_RESET}"
FORMAT_GROUP="${FORMAT_GROUP:-๐ฅ $COLOR_ARTIST<>$COLOR_RESET}"
FORMAT_DISAMBIGUATION="${FORMAT_DISAMBIGUATION:-$COLOR_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<>$COLOR_RESET"}"
-FORMAT_SINGLE="${FORMAT_SINGLE:-"๐ฝ ${COLOR_SINGLE}single$COLOR_RESET $COLOR_RELEASE_TITLE<>$COLOR_RESET"}"
-FORMAT_EP="${FORMAT_EP:-"๐ฝ ${COLOR_EP} EP $COLOR_RESET $COLOR_RELEASE_TITLE<>$COLOR_RESET"}"
+FORMAT_RELEASE="${FORMAT_RELEASE:-"${COLOR_RELEASE_TITLE}<>$COLOR_RESET"}"
FORMAT_YEAR="${FORMAT_YEAR:-"${COLOR_RELEASE_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