fix: loading local data

This commit is contained in:
2025-08-23 12:58:22 +02:00
parent 723fa58763
commit deaeb23a92
3 changed files with 40 additions and 14 deletions

View File

@@ -48,7 +48,7 @@ if [ "${MUSICDIR:-}" ]; then
fi fi
if [ "${1:-}" = "--load-local" ]; then if [ "${1:-}" = "--load-local" ]; then
load_local load_local || err "Failed to load local data"
exit 0 exit 0
fi fi

View File

@@ -1,7 +1,10 @@
ERR="\033[38;5;196m"
INFO="\033[38;5;75m"
OFF="\033[m"
err() { err() {
echo "ERROR: ${1:-}" echo "${ERR}ERROR:${OFF} ${1:-}"
} }
info() { info() {
echo "Info: ${1:-}" echo "${INFO}Info:${OFF} ${1:-}"
} }

View File

@@ -53,21 +53,38 @@ __batch_load_missing() {
done <"$2" done <"$2"
if [ -s "$tmpf" ]; then if [ -s "$tmpf" ]; then
lines=$(wc -l "$tmpf" | cut -d ' ' -f 1) lines=$(wc -l "$tmpf" | cut -d ' ' -f 1)
[ "$lines" -gt 0 ] && info "Caching $lines items..." if [ "$lines" -gt 0 ]; then
while IFS= read -r mbid; do
case "$1" in case "$1" in
"$TYPE_ARTIST") "$TYPE_ARTIST")
mb_artist "$mbid" >/dev/null tt="artists"
;; ;;
"$TYPE_RELEASEGROUP") "$TYPE_RELEASEGROUP")
mb_releasegroup "$mbid" >/dev/null tt="release groups"
;; ;;
"$TYPE_RELEASE") "$TYPE_RELEASE")
mb_release "$mbid" >/dev/null tt="releases"
;; ;;
esac esac
sleep 1 info "Fetching $lines missing $tt"
done <"$tmpf" 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 fi
rm -f "$tmpf" rm -f "$tmpf"
} }
@@ -78,23 +95,29 @@ LOCALDATA_RELEASEGROUPS="$LOCALDATADIR/releasegroups"
LOCALDATA_RELEASES="$LOCALDATADIR/releases" LOCALDATA_RELEASES="$LOCALDATADIR/releases"
# Load local music # Load local music
# input $1: directory for temporary files
load_local() { load_local() {
[ -d "$LOCALDATADIR" ] || mkdir -p "$LOCALDATADIR" [ -d "$LOCALDATADIR" ] || mkdir -p "$LOCALDATADIR"
find "$MUSICDIR" -type f -name "$DECORATION_FILENAME" -exec cat {} \+ | $JQ -r '.releaseid' >"$LOCALDATA_RELEASES" tmpreleases=$(mktemp)
__batch_load_missing "$TYPE_RELEASE" "$LOCALDATA_RELEASES" [ -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 # Get release groups and album artists
while IFS= read -r rid; do while IFS= read -r rid; do
mb=$(mb_release "$rid") mb=$(mb_release "$rid")
echo "$mb" | $JQ -r '."release-group".id' >>"$LOCALDATA_RELEASEGROUPS" echo "$mb" | $JQ -r '."release-group".id' >>"$LOCALDATA_RELEASEGROUPS"
echo "$mb" | $JQ -r '."release-group"."artist-credit" | map(.artist.id) | join("\n")' >>"$LOCALDATA_ARTISTS" echo "$mb" | $JQ -r '."release-group"."artist-credit" | map(.artist.id) | join("\n")' >>"$LOCALDATA_ARTISTS"
done <"$LOCALDATA_RELEASES" done <"$tmpreleases"
tf=$(mktemp) tf=$(mktemp)
sort "$LOCALDATA_RELEASEGROUPS" | uniq >"$tf" && mv "$tf" "$LOCALDATA_RELEASEGROUPS" sort "$LOCALDATA_RELEASEGROUPS" | uniq >"$tf" && mv "$tf" "$LOCALDATA_RELEASEGROUPS"
sort "$LOCALDATA_ARTISTS" | uniq >"$tf" && mv "$tf" "$LOCALDATA_ARTISTS" sort "$LOCALDATA_ARTISTS" | uniq >"$tf" && mv "$tf" "$LOCALDATA_ARTISTS"
# Populate cache with missing data # Populate cache with missing data
__batch_load_missing "$TYPE_RELEASEGROUP" "$LOCALDATA_RELEASEGROUPS" __batch_load_missing "$TYPE_RELEASEGROUP" "$LOCALDATA_RELEASEGROUPS"
__batch_load_missing "$TYPE_ARTIST" "$LOCALDATA_ARTISTS" __batch_load_missing "$TYPE_ARTIST" "$LOCALDATA_ARTISTS"
rm -f "$tmpreleases"
} }
# List all releases # List all releases