#!/usr/bin/env bash scriptVersion="1.1.3" agent="ERA ( https://github.com/Makario1337/ExtendedReleaseAdder )" ### DEBUG ### DEBUG=0 ### DEBUG end ### log () { m_time=`date "+%F %T"` echo $m_time" :: Extended Release Adder :: "$1 } ### Start ### start () { 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 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" log "-----------------------------------------------------------------------------" log " |\/| _ | _ ._o _ '|~/~/~/" log " | |(_||<(_|| |(_) |_)_)/ " log " AND" log " |~) _ ._ _| _ ._ _ |\ |o._ o _ |~|_|_|" log " |~\(_|| |(_|(_)| | || \||| |_|(_||~| | |<" log " Presents: Extended Release Adder ($scriptVersion)" log " Docker Version: $dockerVersion" log "-----------------------------------------------------------------------------" log " Donate to the original creator: https://github.com/sponsors/RandomNinjaAtk" log " Original Project: https://github.com/RandomNinjaAtk/docker-lidarr-extended" log " Extended Release Adder can be found under: " log " https://github.com/Makario1337/ExtendedReleaseAdder" log "-----------------------------------------------------------------------------" sleep 5 log "" log "Lift off in..."; sleep 0.5 log "5"; sleep 1 log "4"; sleep 1 log "3"; sleep 1 log "2"; sleep 1 log "1"; sleep 1 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' ) if [[ $CheckIfAlreadyAdded =~ ^[0-9]+$ ]]; then log "Adding :: $2 :: $3 :: Alreaddy Added, skipping...." else lidarrAlbumSearch=$(echo $lidarrAlbumSearch | 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\": \"\" %g" | sed 's/"metadataProfileId": 1/"metadataProfileId": 1,\"addOptions": {"monitor": "all","searchForMissingAlbums": true}/g' | sed 's/"grabbed": false/"grabbed": false,\"addOptions": {"searchForNewAlbum": true}/g'| jq '.' | cut -c 2- | head -c -2) 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 } 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" } 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 LidarrArtistID=$(echo $ArtistInLidarr | jq '.[].id') RefreshArtistList="$RefreshArtistList $LidarrArtistID" 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 ".*" | sed 's///' | sed 's/<\/name>.*//') log "Searching :: $artistname" offset=0 SearchAllReleasesForArtist="" while [ $offset -le 500 ] do sleep 1.5 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... " offset=$(( $offset + 1337 )) else for line in $lines do trim=$(echo $line | cut -c 2- | head -c -2) ReleaseName=$(wget -U "$agent" --timeout=0 -q -O - "https://musicbrainz.org/ws/2/release-group/$trim" | grep -o ".*" | sed 's///g' | head -c -9) AddReleaseToLidarr $trim "$artistname" "$ReleaseName" sleep 1.5 done fi done } RefreshArtists() { log "Refreshing all ERA artists, so new releasegroup entrys can be added" for artists in $RefreshArtistList do curl -s -X POST "$lidarrUrl/api/v1/command" -H "accept: text/plain" -H "Content-Type: application/json" -H "X-Api-Key: $lidarrApiKey" -d "{\"name\":\"RefreshArtist\",\"artistId\":$artists}" sleep 1.5 done } CleanPreviousDownloads() { for artist in ${ERAArtistsList[@]}; do log "cleaning $artist" find /config/extended/logs/notfound -type f -name '*$(echo $artist | tail -c +2 | head -c -2 )*' -delete done } SearchAllArtistsByTag CheckIfCollectedArtistsAreInLidarrInstance ArtistLookupAndCallAddReleaseToLidarr CleanPreviousDownloads RefreshArtists log "DONE :: Finishing..." exit