From deaeb23a9287fd3dba9d9fe43565133f5e76a7b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=84min=20Baumeler?= Date: Sat, 23 Aug 2025 12:58:22 +0200 Subject: [PATCH] fix: loading local data --- src/main.sh | 2 +- src/sh/helper.sh | 7 +++++-- src/sh/local.sh | 45 ++++++++++++++++++++++++++++++++++----------- 3 files changed, 40 insertions(+), 14 deletions(-) diff --git a/src/main.sh b/src/main.sh index 2502b76..376e134 100755 --- a/src/main.sh +++ b/src/main.sh @@ -48,7 +48,7 @@ if [ "${MUSICDIR:-}" ]; then fi if [ "${1:-}" = "--load-local" ]; then - load_local + load_local || err "Failed to load local data" exit 0 fi diff --git a/src/sh/helper.sh b/src/sh/helper.sh index a5ac490..49b9456 100644 --- a/src/sh/helper.sh +++ b/src/sh/helper.sh @@ -1,7 +1,10 @@ +ERR="\033[38;5;196m" +INFO="\033[38;5;75m" +OFF="\033[m" err() { - echo "ERROR: ${1:-}" + echo "${ERR}ERROR:${OFF} ${1:-}" } info() { - echo "Info: ${1:-}" + echo "${INFO}Info:${OFF} ${1:-}" } diff --git a/src/sh/local.sh b/src/sh/local.sh index 1bf9997..c632c35 100644 --- a/src/sh/local.sh +++ b/src/sh/local.sh @@ -53,21 +53,38 @@ __batch_load_missing() { done <"$2" if [ -s "$tmpf" ]; then lines=$(wc -l "$tmpf" | cut -d ' ' -f 1) - [ "$lines" -gt 0 ] && info "Caching $lines items..." - while IFS= read -r mbid; do + if [ "$lines" -gt 0 ]; then case "$1" in "$TYPE_ARTIST") - mb_artist "$mbid" >/dev/null + tt="artists" ;; "$TYPE_RELEASEGROUP") - mb_releasegroup "$mbid" >/dev/null + tt="release groups" ;; "$TYPE_RELEASE") - mb_release "$mbid" >/dev/null + tt="releases" ;; esac - sleep 1 - done <"$tmpf" + info "Fetching $lines missing $tt" + cnt=0 + while IFS= read -r mbid; do + case "$1" in + "$TYPE_ARTIST") + mb_artist "$mbid" >/dev/null + ;; + "$TYPE_RELEASEGROUP") + mb_releasegroup "$mbid" >/dev/null + ;; + "$TYPE_RELEASE") + mb_release "$mbid" >/dev/null + ;; + esac + cnt=$((cnt + 1)) + printf "\033[K\r%d/%d (%s)" "$cnt" "$lines" "$mbid" + sleep 1 + done <"$tmpf" + printf "\n" + fi fi rm -f "$tmpf" } @@ -78,23 +95,29 @@ LOCALDATA_RELEASEGROUPS="$LOCALDATADIR/releasegroups" LOCALDATA_RELEASES="$LOCALDATADIR/releases" # Load local music -# input $1: directory for temporary files load_local() { [ -d "$LOCALDATADIR" ] || mkdir -p "$LOCALDATADIR" - find "$MUSICDIR" -type f -name "$DECORATION_FILENAME" -exec cat {} \+ | $JQ -r '.releaseid' >"$LOCALDATA_RELEASES" - __batch_load_missing "$TYPE_RELEASE" "$LOCALDATA_RELEASES" + tmpreleases=$(mktemp) + [ -f "$tmpreleases" ] || exit 1 + find "$MUSICDIR" -type f -name "$DECORATION_FILENAME" -print0 | + xargs -0 -I {} \ + $JQ -r '.releaseid+"\t"+input_filename' {} | + tee "$LOCALDATA_RELEASES" | + cut -d "$(printf '\t')" -f 1 >"$tmpreleases" + __batch_load_missing "$TYPE_RELEASE" "$tmpreleases" # Get release groups and album artists while IFS= read -r rid; do mb=$(mb_release "$rid") echo "$mb" | $JQ -r '."release-group".id' >>"$LOCALDATA_RELEASEGROUPS" echo "$mb" | $JQ -r '."release-group"."artist-credit" | map(.artist.id) | join("\n")' >>"$LOCALDATA_ARTISTS" - done <"$LOCALDATA_RELEASES" + done <"$tmpreleases" tf=$(mktemp) sort "$LOCALDATA_RELEASEGROUPS" | uniq >"$tf" && mv "$tf" "$LOCALDATA_RELEASEGROUPS" sort "$LOCALDATA_ARTISTS" | uniq >"$tf" && mv "$tf" "$LOCALDATA_ARTISTS" # Populate cache with missing data __batch_load_missing "$TYPE_RELEASEGROUP" "$LOCALDATA_RELEASEGROUPS" __batch_load_missing "$TYPE_ARTIST" "$LOCALDATA_ARTISTS" + rm -f "$tmpreleases" } # List all releases