Major ERA makeover

Removed specified artistrootfolder.
Implemented mechanism to automaticly add releases for already added artists.
Some bug fixing.
pull/81/head
Makario1337 2 years ago committed by GitHub
parent 4531a57a50
commit d2afc5d6ec
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1,33 +1,24 @@
#!/usr/bin/env bash
scriptVersion="1.0.6"
scriptVersion="1.1.0"
agent="ERA ( https://github.com/Makario1337/ExtendedReleaseAdder )"
ArtistsJSON=$(jq '.artists[]' /config/artists.json)
### DEBUG ###
DEBUG=0
### DEBUG end ###
log () {
m_time=`date "+%F %T"`
echo $m_time" :: Extended Release Adder :: "$1
}
# auto-clean up log file to reduce space usage
if [ -f "/config/logs/ExtendedReleaseAdder.txt" ]; then
### Start ###
start () {
if [[ $DEBUG -ne 1 ]]; then
if [ -f "/config/logs/ExtendedReleaseAdder.txt" ]; then
find /config/logs -type f -name "ExtendedReleaseAdder.txt" -size +1024k -delete
fi
exec &>> "/config/logs/ExtendedReleaseAdder.txt"
chmod 666 "/config/logs/ExtendedReleaseAdder.txt"
if [ -z "$lidarrUrl" ] || [ -z "$lidarrApiKey" ]; then
lidarrUrlBase="$(cat /config/config.xml | xq | jq -r .Config.UrlBase)"
if [ "$lidarrUrlBase" = "null" ]; then
lidarrUrlBase=""
else
lidarrUrlBase="/$(echo "$lidarrUrlBase" | sed "s/\///g")"
fi
lidarrApiKey="$(cat /config/config.xml | xq | jq -r .Config.ApiKey)"
lidarrPort="$(cat /config/config.xml | xq | jq -r .Config.Port)"
lidarrUrl="http://127.0.0.1:${lidarrPort}${lidarrUrlBase}"
fi
exec &>> "/config/logs/ExtendedReleaseAdder.txt"
chmod 666 "/config/logs/ExtendedReleaseAdder.txt"
log "-----------------------------------------------------------------------------"
log " |\/| _ | _ ._o _ '|~/~/~/"
log " | |(_||<(_|| |(_) |_)_)/ "
@ -50,21 +41,21 @@ log "4"; sleep 1
log "3"; sleep 1
log "2"; sleep 1
log "1"; sleep 1
if [ ! -d "$lidarrAudiobookRootFolder" ]; then
log "ERROR :: Audiobooks \"$lidarrAudiobookRootFolder\" folder doesn't exist... "
log "ERROR :: Check your Docker path mappings..."
log "ERROR :: Exiting ERA..."
exit
fi
lidarrAudiobookRootFolderCheck=$(curl -s GET "$lidarrUrl/api/v1/rootFolder" -H "X-Api-Key: ${lidarrApiKey}" | grep "$lidarrAudiobookRootFolder")
if [ -z "$lidarrAudiobookRootFolderCheck" ]; then
log "ERROR :: Audiobooks \"$lidarrAudiobookRootFolder\" is not added to Lidarr as a root folder... "
log "ERROR :: Add \"$lidarrAudiobookRootFolder\" to Lidarr as a root folder"
log "ERROR :: Exiting ERA..."
exit
if [ -z "$lidarrUrl" ] || [ -z "$lidarrApiKey" ]; then
lidarrUrlBase="$(cat /config/config.xml | xq | jq -r .Config.UrlBase)"
if [ "$lidarrUrlBase" = "null" ]; then
lidarrUrlBase=""
else
lidarrUrlBase="/$(echo "$lidarrUrlBase" | sed "s/\///g")"
fi
lidarrApiKey="$(cat /config/config.xml | xq | jq -r .Config.ApiKey)"
lidarrPort="$(cat /config/config.xml | xq | jq -r .Config.Port)"
lidarrUrl="http://127.0.0.1:${lidarrPort}${lidarrUrlBase}"
fi
}
start
### Start end ###
AddReleaseToLidarr() {
lidarrAlbumSearch=$(curl -s -X GET "$lidarrUrl/api/v1/album/lookup?term="lidarr%3A%20$1"" -H "accept: */*" -H "X-Api-Key: "$lidarrApiKey"" | jq '.')
CheckIfAlreadyAdded=$(echo $lidarrAlbumSearch | tr -d ' ' | sed 's/^.*,"grabbed":*false,"id"://g' | sed 's/}]//g' )
@ -75,63 +66,71 @@ AddReleaseToLidarr() {
sed 's/"monitored": false/"monitored": true/g'|
sed 's/"qualityProfileId": 0/"qualityProfileId": 1/g' |
sed 's/"metadataProfileId": 0/"metadataProfileId": 1/g' |
sed "s%\"metadataProfileId\": 1%\"metadataProfileId\": 1,\"rootFolderPath\": \"$lidarrAudiobookRootFolder/\" %g" |
sed "s%\"metadataProfileId\": 1%\"metadataProfileId\": 1,\"rootFolderPath\": \"\" %g" |
sed 's/"metadataProfileId": 1/"metadataProfileId": 1,\"addOptions": {"monitor": "all","searchForMissingAlbums": false}/g' |
sed 's/"grabbed": false/"grabbed": false,\"addOptions": {"searchForNewAlbum": false}/g'|
jq '.' |
cut -c 2- |
head -c -2)
curl -X POST "$lidarrUrl/api/v1/album?apikey="$lidarrApiKey"" -H "accept: text/plain" -H "Content-Type: application/json" -d "$lidarrAlbumSearch"
curl -s -X POST "$lidarrUrl/api/v1/album?apikey="$lidarrApiKey"" -H "accept: text/plain" -H "Content-Type: application/json" -d "$lidarrAlbumSearch"
log "Adding :: $2 :: $3 :: Release Added..."
fi
}
SearchRelease(){
ReleaseName=$(wget -U "$agent" --timeout=0 -q -O - "https://musicbrainz.org/ws/2/release-group/$1" | grep -o "<title>.*</title>" | sed 's/<title>//g' | head -c -9 | sed 's/\&amp;/\&/g' | sed 's/???/???/g')
log "Adding :: $artist :: $ReleaseName"
AddReleaseToLidarr $1 "$artist" "$ReleaseName"
SearchAllArtistsByTag(){
offset=0
tag="audio%20drama"
log "Collecting artists by tag :: Collecting..."
while [ $offset -le 5000 ]
do
AllArtistsByTagWget=$(wget -U "$agent" --timeout=0 -q -O - "https://musicbrainz.org/ws/2/artist?query=tag:"audio%20drama"&limit=100&fmt=json&offset=$offset" | jq '.artists[].id')
AllArtistsByTag="$AllArtistsByTag $AllArtistsByTagWget"
sleep 1.5
offset=$(( $offset + 100 ))
done
log "Collecting artists by tag :: Done"
}
SearchAllReleasesForArtist() {
CheckIfCollectedArtistsAreInLidarrInstance(){
for artist in ${AllArtistsByTag[@]}; do
artist=$(echo $artist | sed 's/"//g')
ArtistInLidarr=$(curl -s -X GET "$lidarrUrl/api/v1/artist?mbId=$artist" -H "accept: */*" -H "X-Api-Key: "$lidarrApiKey"")
sleep 0.1
if [[ "$ArtistInLidarr" != "[]" ]]; then
Temp=$(echo $ArtistInLidarr | jq '.[].foreignArtistId')
ERAArtistsList="$ERAArtistsList $Temp"
fi
done
}
ArtistLookupAndCallAddReleaseToLidarr() {
for artist in ${ERAArtistsList[@]}; do
artist=$(echo $artist | sed 's/"//g')
artistname=$(wget -U "$agent" --timeout=0 -q -O - "https://musicbrainz.org/ws/2/artist/$artist" | grep -o "<name>.*</name>" | sed 's/<name>//' | sed 's/<\/name>.*//')
log "Searching :: $artistname"
offset=0
SearchAllReleasesForArtist=""
while [ $offset -le 500 ]
do
offset=$(( $offset + 100 ))
sleep 1.5
SearchAllReleasesForArtist=$(wget -U "$agent" --timeout=0 -q -O - "https://musicbrainz.org/ws/2/release-group/?artist="$1"&limit=100&offset=$offset&fmt=json&type=other&secondary_type="audio%20drama"")
SearchAllReleasesForArtistWget=$(wget -U "$agent" --timeout=0 -q -O - "https://musicbrainz.org/ws/2/release-group/?artist=$artist&limit=100&offset=$offset&fmt=json&type=other&secondary_type="audio%20drama"")
offset=$(( $offset + 100 ))
SearchAllReleasesForArtist="$SearchAllReleasesForArtist $SearchAllReleasesForArtistWget"
done
lines=$(echo $SearchAllReleasesForArtist | jq '."release-groups"[]."id"')
if [ -z "$lines" ]
then
log "ERROR :: Did not find matching release , skipping... "
log "ERROR :: Make sure the wanted items are listed under Other + Audio Drama on Musicbrainz"
if [ -z "$lines" ]; then
log "ERROR :: Did not find matching release, skipping... "
offset=$(( $offset + 1337 ))
else
for line in $lines
do
trim=$(echo $line | cut -c 2- | head -c -2)
SearchRelease $trim
ReleaseName=$(wget -U "$agent" --timeout=0 -q -O - "https://musicbrainz.org/ws/2/release-group/$trim" | grep -o "<title>.*</title>" | sed 's/<title>//g' | head -c -9)
AddReleaseToLidarr $trim "$artistname" "$ReleaseName"
sleep 1.5
done
fi
done
done
}
ArtistLookup() {
search=$(echo $1 | sed 's/\"//g')
artist=$(wget -U "$agent" --timeout=0 -q -O - "https://musicbrainz.org/ws/2/artist/$search" | grep -o "<name>.*</name>" | sed 's/<name>//' | sed 's/<\/name>.*//' | sed 's/???/???/g' | sed 's/\&amp;/\&/g')
log "Adding :: $artist"
sleep 1.5
SearchAllReleasesForArtist $search
}
if [ -z "$ArtistsJSON" ]
then
log "ERROR :: Did not find /config/artists.json or no artists in file... "
log "ERROR :: Exiting..."
else
for str in ${ArtistsJSON[@]}; do
ArtistLookup $str
done
fi
SearchAllArtistsByTag
CheckIfCollectedArtistsAreInLidarrInstance
ArtistLookupAndCallAddReleaseToLidarr
log "DONE :: Finishing..."
exit
Loading…
Cancel
Save