load local data
This commit is contained in:
20
src/main.sh
20
src/main.sh
@@ -46,6 +46,26 @@ if [ "${MUSICDIR:-}" ]; then
|
||||
fi
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ "${1:-}" = "--load-local" ]; then
|
||||
load_local
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ "${1:-}" = "--list-releases" ]; then
|
||||
list_releases
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ "${1:-}" = "--list-releasegroups" ]; then
|
||||
list_releasegroups
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ "${1:-}" = "--list-artists" ]; then
|
||||
list_artists
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "${1:-}" = "--internal-preview-artist" ]; then
|
||||
|
@@ -138,3 +138,24 @@ cache_delete_artist() {
|
||||
# Get release groups
|
||||
echo "NOT IMPLEMENTED" >/dev/stderr
|
||||
}
|
||||
|
||||
# Check if main items are in cache
|
||||
# argument $1: type
|
||||
# argument $2: MusicBrainz ID
|
||||
in_cache() {
|
||||
case "$1" in
|
||||
"$TYPE_ARTIST")
|
||||
fn="$artist_filename"
|
||||
;;
|
||||
"$TYPE_RELEASEGROUP")
|
||||
fn="$releasegroup_filename"
|
||||
;;
|
||||
"$TYPE_RELEASE")
|
||||
fn="$release_filename"
|
||||
;;
|
||||
*)
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
[ "$(__get_json "$1" "$2" "$fn")" ] && return 0 || return 1
|
||||
}
|
||||
|
@@ -1,3 +1,7 @@
|
||||
err() {
|
||||
echo "ERROR: ${1:-}"
|
||||
}
|
||||
|
||||
info() {
|
||||
echo "Info: ${1:-}"
|
||||
}
|
||||
|
@@ -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"
|
||||
}
|
||||
|
Reference in New Issue
Block a user