load local data

This commit is contained in:
2025-08-04 16:59:51 +02:00
parent 7f94ab9646
commit bde3e5a48b
4 changed files with 116 additions and 0 deletions

View File

@@ -40,3 +40,74 @@ decorate() {
return 1
fi
}
# Load missing cache entries (batch mode)
# argument $1: type
# argument $2: File with one ID per line
__batch_load_missing() {
tmpf=$(mktemp)
while IFS= read -r mbid; do
if ! in_cache "$1" "$mbid"; then
echo "$mbid" >>"$tmpf"
fi
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
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
sleep 1
done <"$tmpf"
fi
rm -f "$tmpf"
}
LOCALDATADIR="$HOME/.cache/$APP_NAME/local"
LOCALDATA_ARTISTS="$LOCALDATADIR/artists"
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"
# 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"
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"
}
# List all releases
list_releases() {
cat "$LOCALDATA_RELEASES"
}
# List all release groups
list_releasegroups() {
cat "$LOCALDATA_RELEASEGROUPS"
}
# List all album artists
list_artists() {
cat "$LOCALDATA_ARTISTS"
}