From 91343b4b9f1e8689795d263dfb879fee6b753f35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=84min=20Baumeler?= Date: Mon, 25 Aug 2025 22:12:34 +0200 Subject: [PATCH] renamed and improved --reload --- src/main.sh | 115 +++--------------------------------------------- src/sh/local.sh | 98 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 105 insertions(+), 108 deletions(-) diff --git a/src/main.sh b/src/main.sh index 205c65d..5df39a8 100755 --- a/src/main.sh +++ b/src/main.sh @@ -46,7 +46,9 @@ if [ "${1:-}" = "--decorate" ]; then exit 0 fi -if [ "${MUSICDIR:-}" ] && [ "${1:-}" = "--load-local" ]; then +if [ "${1:-}" = "--reload" ]; then + [ ! "${MUSICDIR:-}" ] && err "The environment variable MUSICDIR is not set." && exit 1 + [ ! -d "${MUSICDIR:-}" ] && err "The environment variable MUSICDIR does not point to a directory." && exit 1 load_local || err "Failed to load local data" exit 0 fi @@ -295,120 +297,17 @@ if [ "${1:-}" = "--internal-list-recordings" ]; then fi if [ "${1:-}" = "--internal-list-local-artists" ]; then - if ! cat "$LOCALDATA_ARTISTS_VIEW" 2>/dev/null; then - while IFS= read -r aid; do - mb_artist "$aid" | $JQ -r '[ - .id, - .type, - .name, - .disambiguation, - .["life-span"].begin, - .["life-span"].end - ] | join("\t")' - done <"$LOCALDATA_ARTISTS" | - awk \ - -F "\t" \ - -v file_local_artists="${LOCALDATA_ARTISTS:-}" \ - -v format_person="$AV_PERSON" \ - -v format_group="$AV_GROUP" \ - -v format_disambiguation="$AV_DISAMBIGUATION" \ - -v format_local="$FORMAT_LOCAL" \ - "$AWK_ARTISTS" | - sort | - column -t -s "$(printf '\t')" | - sed 's| \+\([0-9a-f-]\+\)$|\t\1|' | - tee "$LOCALDATA_ARTISTS_VIEW" - fi + cat "$LOCALDATA_ARTISTS_VIEW" 2>/dev/null exit 0 fi if [ "${1:-}" = "--internal-list-local-releasegroups" ]; then - if ! cat "$LOCALDATA_RELEASEGROUPS_VIEW" 2>/dev/null; then - while IFS= read -r rgid; do - mb_releasegroup "$rgid" | $JQ -r '[ - .id, - ."primary-type", - (."secondary-types" // []|join(";")), - ."first-release-date", - .title, - (."artist-credit" | map(([.name, .joinphrase]|join(""))) | join("")) - ] | join("\t")' - done <"$LOCALDATA_RELEASEGROUPS" | - awk \ - -F "\t" \ - -v file_local_releasegroups="${LOCALDATA_RELEASEGROUPS:-}" \ - -v format_release="$RGV_RELEASE" \ - -v format_release_w_artist="$RGV_RELEASE_W_ARTIST" \ - -v format_year="$RGV_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" \ - -v format_local="$FORMAT_LOCAL" \ - "$AWK_RELEASEGROUPS" | - sort -n -r | - cut -d "$(printf '\t')" -f 2- | - column -t -s "$(printf '\t')" | - sed 's| \+\([0-9a-f-]\+\)$|\t\1|' | - tee "$LOCALDATA_RELEASEGROUPS_VIEW" - fi + cat "$LOCALDATA_RELEASEGROUPS_VIEW" 2>/dev/null exit 0 fi if [ "${1:-}" = "--internal-list-local-releases" ]; then - if ! cat "$LOCALDATA_RELEASES_VIEW" 2>/dev/null; then - list_releases | - while IFS= read -r rid; do - mb_release "$rid" | $JQ -r '[ - .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")' - done | - awk \ - -F "\t" \ - -v file_local_releases="${LOCALDATA_RELEASES:-}" \ - -v release_official="$FORMAT_STATUS_OFFICIAL" \ - -v release_promotion="$FORMAT_STATUS_PROMO" \ - -v release_bootleg="$FORMAT_STATUS_BOOTLEG" \ - -v release_pseudo="$FORMAT_STATUS_PSEUDO" \ - -v release_withdrawn="$FORMAT_STATUS_WITHDRAWN" \ - -v release_expunged="$FORMAT_STATUS_EXPUNGED" \ - -v release_cancelled="$FORMAT_STATUS_CANCELLED" \ - -v release_format="$RV_FORMAT" \ - -v release_format_title_artist="$RV_TITLE_ARTIST" \ - -v release_format_title="$RV_TITLE" \ - -v release_format_artist="$RV_ARTIST" \ - -v format_local="$FORMAT_LOCAL" \ - "$AWK_RELEASES" | - sort -n -r | - cut -d "$(printf '\t')" -f 2- | - column -t -s "$(printf '\t')" | - sed 's| \+\([0-9a-f-]\+\):\(.*$\)$|\t\1\t\2|' | - tee "$LOCALDATA_RELEASES_VIEW" - fi + cat "$LOCALDATA_RELEASES_VIEW" 2>/dev/null exit 0 fi @@ -430,7 +329,7 @@ GENERAL OPTIONS: MANAGE LOCAL MUSIC: --decorate Decorate directory containing a tagged release - --load-local Populate database with local music + --reload Populate database with decorated local music EOF exit 0 fi diff --git a/src/sh/local.sh b/src/sh/local.sh index 3b28c94..058662d 100644 --- a/src/sh/local.sh +++ b/src/sh/local.sh @@ -125,6 +125,104 @@ load_local() { __batch_load_missing "$TYPE_RELEASEGROUP" "$LOCALDATA_RELEASEGROUPS" __batch_load_missing "$TYPE_ARTIST" "$LOCALDATA_ARTISTS" rm -f "$tmpreleases" + # Precompute views + while IFS= read -r aid; do + mb_artist "$aid" | $JQ -r '[ + .id, + .type, + .name, + .disambiguation, + .["life-span"].begin, + .["life-span"].end + ] | join("\t")' + done <"$LOCALDATA_ARTISTS" | + awk \ + -F "\t" \ + -v file_local_artists="${LOCALDATA_ARTISTS:-}" \ + -v format_person="$AV_PERSON" \ + -v format_group="$AV_GROUP" \ + -v format_disambiguation="$AV_DISAMBIGUATION" \ + -v format_local="$FORMAT_LOCAL" \ + "$AWK_ARTISTS" | + sort | + column -t -s "$(printf '\t')" | + sed 's| \+\([0-9a-f-]\+\)$|\t\1|' >"$LOCALDATA_ARTISTS_VIEW" + while IFS= read -r rgid; do + mb_releasegroup "$rgid" | $JQ -r '[ + .id, + ."primary-type", + (."secondary-types" // []|join(";")), + ."first-release-date", + .title, + (."artist-credit" | map(([.name, .joinphrase]|join(""))) | join("")) + ] | join("\t")' + done <"$LOCALDATA_RELEASEGROUPS" | + awk \ + -F "\t" \ + -v file_local_releasegroups="${LOCALDATA_RELEASEGROUPS:-}" \ + -v format_release="$RGV_RELEASE" \ + -v format_release_w_artist="$RGV_RELEASE_W_ARTIST" \ + -v format_year="$RGV_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" \ + -v format_local="$FORMAT_LOCAL" \ + "$AWK_RELEASEGROUPS" | + sort -n -r | + cut -d "$(printf '\t')" -f 2- | + column -t -s "$(printf '\t')" | + sed 's| \+\([0-9a-f-]\+\)$|\t\1|' >"$LOCALDATA_RELEASEGROUPS_VIEW" + list_releases | + while IFS= read -r rid; do + mb_release "$rid" | $JQ -r '[ + .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")' + done | + awk \ + -F "\t" \ + -v file_local_releases="${LOCALDATA_RELEASES:-}" \ + -v release_official="$FORMAT_STATUS_OFFICIAL" \ + -v release_promotion="$FORMAT_STATUS_PROMO" \ + -v release_bootleg="$FORMAT_STATUS_BOOTLEG" \ + -v release_pseudo="$FORMAT_STATUS_PSEUDO" \ + -v release_withdrawn="$FORMAT_STATUS_WITHDRAWN" \ + -v release_expunged="$FORMAT_STATUS_EXPUNGED" \ + -v release_cancelled="$FORMAT_STATUS_CANCELLED" \ + -v release_format="$RV_FORMAT" \ + -v release_format_title_artist="$RV_TITLE_ARTIST" \ + -v release_format_title="$RV_TITLE" \ + -v release_format_artist="$RV_ARTIST" \ + -v format_local="$FORMAT_LOCAL" \ + "$AWK_RELEASES" | + sort -n -r | + cut -d "$(printf '\t')" -f 2- | + column -t -s "$(printf '\t')" | + sed 's| \+\([0-9a-f-]\+\):\(.*$\)$|\t\1\t\2|' >"$LOCALDATA_RELEASES_VIEW" } # List all releases