Kill kill kill kill kill

This commit is contained in:
emily 2024-11-26 22:01:19 +01:00
parent 69b82a3497
commit e66c16c976
Signed by: emily
GPG key ID: F6F4C66207FCF995

View file

@ -1,38 +1,59 @@
#!/usr/bin/with-contenv bash #!/usr/bin/with-contenv bash
scriptVersion="2.48"
set -euo pipefail
while [[ $# -gt 0 ]]; do
case $1 in
--state-dir)
STATE_DIR="$2"
shift
shift
;;
--runtime-dir)
RUNTIME_DIR="$2"
shift
shift
;;
*)
echo "Unknown option $1"
exit 1
;;
esac
done
scriptName="Audio" scriptName="Audio"
### Import Settings ### Import Settings
source /config/extended.conf # shellcheck source=./extended.conf
source "${STATE_DIR}/lidarr-dl.conf"
#### Import Functions #### Import Functions
source /config/extended/functions source ../universal/functions.bash
AddTag () { AddTag () {
log "adding arr-extended tag" log "adding arr-extended tag"
lidarrProcessIt=$(curl -s "$arrUrl/api/v1/tag" --header "X-Api-Key:"${arrApiKey} -H "Content-Type: application/json" --data-raw '{"label":"arr-extended"}') lidarrProcessIt=$(curl -s "$arrUrl/api/v1/tag" --header "X-Api-Key:" "${arrApiKey}" -H "Content-Type: application/json" --data-raw '{"label":"arr-extended"}')
} }
AddDownloadClient () { AddDownloadClient () {
downloadClientsData=$(curl -s "$arrUrl/api/v1/downloadclient" --header "X-Api-Key:"${arrApiKey} -H "Content-Type: application/json") downloadClientsData=$(curl -s "$arrUrl/api/v1/downloadclient" --header "X-Api-Key:" "${arrApiKey}" -H "Content-Type: application/json")
downloadClientCheck="$(echo $downloadClientsData | grep "Arr-Extended")" downloadClientCheck="$(echo "$downloadClientsData" | grep "Arr-Extended")"
if [ -z "$downloadClientCheck" ]; then if [ -z "$downloadClientCheck" ]; then
AddTag AddTag
if [ ! -d "$importPath" ]; then if [ ! -d "$importPath" ]; then
mkdir -p "$importPath" mkdir -p "$importPath"
chmod 777 -R "$importPath"
fi fi
log "Adding download Client" log "Adding download Client"
lidarrProcessIt=$(curl -s "$arrUrl/api/v1/downloadclient" --header "X-Api-Key:"${arrApiKey} -H "Content-Type: application/json" --data-raw "{\"enable\":true,\"protocol\":\"usenet\",\"priority\":10,\"removeCompletedDownloads\":true,\"removeFailedDownloads\":true,\"name\":\"Arr-Extended\",\"fields\":[{\"name\":\"nzbFolder\",\"value\":\"$importPath\"},{\"name\":\"watchFolder\",\"value\":\"$importPath\"}],\"implementationName\":\"Usenet Blackhole\",\"implementation\":\"UsenetBlackhole\",\"configContract\":\"UsenetBlackholeSettings\",\"infoLink\":\"https://wiki.servarr.com/lidarr/supported#usenetblackhole\",\"tags\":[]}") lidarrProcessIt=$(curl -s "$arrUrl/api/v1/downloadclient" --header "X-Api-Key:" "${arrApiKey}" -H "Content-Type: application/json" --data-raw "{\"enable\":true,\"protocol\":\"usenet\",\"priority\":10,\"removeCompletedDownloads\":true,\"removeFailedDownloads\":true,\"name\":\"Arr-Extended\",\"fields\":[{\"name\":\"nzbFolder\",\"value\":\"$importPath\"},{\"name\":\"watchFolder\",\"value\":\"$importPath\"}],\"implementationName\":\"Usenet Blackhole\",\"implementation\":\"UsenetBlackhole\",\"configContract\":\"UsenetBlackholeSettings\",\"infoLink\":\"https://wiki.servarr.com/lidarr/supported#usenetblackhole\",\"tags\":[]}")
fi fi
} }
verifyConfig () { verifyConfig () {
### Import Settings ### Import Settings
source /config/extended.conf # shellcheck source=./extended.conf
source "${STATE_DIR}/lidarr-dl.conf"
if [ "$enableAudio" != "true" ]; then if [ "$enableAudio" != "true" ]; then
log "Script is not enabled, enable by setting enableAudio to \"true\" by modifying the \"/config/extended.conf\" config file..." log "Script is not enabled, enable by setting enableAudio to \"true\" by modifying the \"/config/extended.conf\" config file..."
log "Sleeping (infinity)" exit 0
sleep infinity
fi fi
if [ -z "$audioScriptInterval" ]; then if [ -z "$audioScriptInterval" ]; then
@ -80,32 +101,13 @@ Configuration () {
sleepTimer=0.5 sleepTimer=0.5
tidaldlFail=0 tidaldlFail=0
deemixFail=0 deemixFail=0
log "-----------------------------------------------------------------------------"
log " |~) _ ._ _| _ ._ _ |\ |o._ o _ |~|_|_|"
log " |~\(_|| |(_|(_)| | || \||| |_|(_||~| | |<"
log " Presents: $scriptName ($scriptVersion)"
log " May the beats be with you!"
log "-----------------------------------------------------------------------------"
log "Donate: https://github.com/sponsors/RandomNinjaAtk"
log "Project: https://github.com/RandomNinjaAtk/arr-scripts"
log "Support: https://github.com/RandomNinjaAtk/arr-scripts/discussions"
log "-----------------------------------------------------------------------------"
sleep 5 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
if [ ! -d "${STATE_DIR}/xdg" ]; then
mkdir -p "${STATE_DIR}/xdg"
if [ ! -d /config/xdg ]; then
mkdir -p /config/xdg
fi fi
if [ -z $topLimit ]; then if [ -z "$topLimit" ]; then
topLimit=10 topLimit=10
fi fi
@ -175,10 +177,10 @@ Configuration () {
if [ $enableBeetsTagging = true ]; then if [ $enableBeetsTagging = true ]; then
log "Beets Tagging Enabled" log "Beets Tagging Enabled"
log "Beets Matching Threshold ${beetsMatchPercentage}%" log "Beets Matching Threshold ${beetsMatchPercentage}%"
beetsMatchPercentage=$(expr 100 - $beetsMatchPercentage ) beetsMatchPercentage=$((100 - beetsMatchPercentage ))
if cat /config/extended/beets-config.yaml | grep "strong_rec_thresh: 0.04" | read; then if grep "strong_rec_thresh: 0.04" "${STATE_DIR}/extended/beets-config.yaml" | read -r; then
log "Configuring Beets Matching Threshold" log "Configuring Beets Matching Threshold"
sed -i "s/strong_rec_thresh: 0.04/strong_rec_thresh: 0.${beetsMatchPercentage}/g" /config/extended/beets-config.yaml sed -i "s/strong_rec_thresh: 0.04/strong_rec_thresh: 0.${beetsMatchPercentage}/g" "${STATE_DIR}/extended/beets-config.yaml"
fi fi
else else
log "Beets Tagging Disabled" log "Beets Tagging Disabled"
@ -195,11 +197,7 @@ Configuration () {
} }
DownloadClientFreyr () { DownloadClientFreyr () {
timeout $downloadClientTimeOut freyr --no-bar --no-net-check -d $audioPath/incomplete deezer:album:$1 2>&1 | tee -a "/config/logs/$logFileName" timeout $downloadClientTimeOut freyr --no-bar --no-net-check -d "$audioPath/incomplete" "deezer:album:$1" 2>&1
# Resolve issue 94
if [ -d /root/.cache/FreyrCLI ]; then
rm -rf /root/.cache/FreyrCLI/*
fi
} }
DownloadFormat () { DownloadFormat () {
@ -222,9 +220,7 @@ DownloadFormat () {
log "ERROR :: Change audioBitrate to a low, high, or lossless..." log "ERROR :: Change audioBitrate to a low, high, or lossless..."
log "ERROR :: Exiting..." log "ERROR :: Exiting..."
NotifyWebhook "FatalError" "Invalid audioFormat and audioBitrate options set" NotifyWebhook "FatalError" "Invalid audioFormat and audioBitrate options set"
log "Script sleeping for $audioScriptInterval..." exit 1
sleep $audioScriptInterval
exit
fi fi
else else
bitrateError="false" bitrateError="false"
@ -246,9 +242,7 @@ DownloadFormat () {
log "ERROR :: Change audioBitrate to a desired bitrate number, example: 192..." log "ERROR :: Change audioBitrate to a desired bitrate number, example: 192..."
log "ERROR :: Exiting..." log "ERROR :: Exiting..."
NotifyWebhook "FatalError" "audioBitrate options set" NotifyWebhook "FatalError" "audioBitrate options set"
log "Script sleeping for $audioScriptInterval..." exit 1
sleep $audioScriptInterval
exit
fi fi
case "$audioFormat" in case "$audioFormat" in
@ -281,45 +275,32 @@ DownloadFolderCleaner () {
if [ -d "$audioPath/complete" ]; then if [ -d "$audioPath/complete" ]; then
log "Removing prevously completed downloads that failed to import..." log "Removing prevously completed downloads that failed to import..."
# check for completed downloads older than 1 day # check for completed downloads older than 1 day
if find "$audioPath"/complete -mindepth 1 -type d -mtime +1 | read; then if find "$audioPath/complete" -mindepth 1 -type d -mtime +1 | read -r; then
# delete completed downloads older than 1 day, these most likely failed to import due to Lidarr failing to match # delete completed downloads older than 1 day, these most likely failed to import due to Lidarr failing to match
find "$audioPath"/complete -mindepth 1 -type d -mtime +1 -exec rm -rf "{}" \; &>/dev/null find "$audioPath/complete" -mindepth 1 -type d -mtime +1 -exec rm -rf "{}" \; &>/dev/null
fi
fi
}
NotFoundFolderCleaner () {
# check for completed download folder
if [ -d /config/extended/logs/notfound ]; then
# check for notfound entries older than X days
if find /config/extended/logs/notfound -mindepth 1 -type f -mtime +$retryNotFound | read; then
log "Removing prevously notfound lidarr album ids older than $retryNotFound days to give them a retry..."
# delete ntofound entries older than X days
find /config/extended/logs/notfound -mindepth 1 -type f -mtime +$retryNotFound -delete
fi fi
fi fi
} }
TidalClientSetup () { TidalClientSetup () {
log "TIDAL :: Verifying tidal-dl configuration" log "TIDAL :: Verifying tidal-dl configuration"
touch /config/xdg/.tidal-dl.log touch "${STATE_DIR}/xdg/.tidal-dl.log"
if [ -f /config/xdg/.tidal-dl.json ]; then if [ -f "${STATE_DIR}/xdg/.tidal-dl.json" ]; then
rm /config/xdg/.tidal-dl.json rm "${STATE_DIR}/xdg/.tidal-dl.json"
fi fi
if [ ! -f /config/xdg/.tidal-dl.json ]; then if [ ! -f "${STATE_DIR}/xdg/.tidal-dl.json" ]; then
log "TIDAL :: No default config found, importing default config \"tidal.json\"" log "TIDAL :: No default config found, importing default config \"tidal.json\""
if [ -f /config/extended/tidal-dl.json ]; then if [ -f "${STATE_DIR}/extended/tidal-dl.json" ]; then
cp /config/extended/tidal-dl.json /config/xdg/.tidal-dl.json cp "${STATE_DIR}/extended/tidal-dl.json" "${STATE_DIR}/xdg/.tidal-dl.json"
chmod 777 -R /config/xdg/
fi fi
fi fi
TidaldlStatusCheck TidaldlStatusCheck
tidal-dl -o "$audioPath"/incomplete 2>&1 | tee -a "/config/logs/$logFileName" tidal-dl -o "$audioPath/incomplete" 2>&1
DownloadFormat DownloadFormat
if [ ! -f /config/xdg/.tidal-dl.token.json ]; then if [ ! -f "${STATE_DIR}/xdg/.tidal-dl.token.json" ]; then
TidaldlStatusCheck TidaldlStatusCheck
#log "TIDAL :: ERROR :: Downgrade tidal-dl for workaround..." #log "TIDAL :: ERROR :: Downgrade tidal-dl for workaround..."
#pip3 install tidal-dl==2022.3.4.2 --no-cache-dir &>/dev/null #pip3 install tidal-dl==2022.3.4.2 --no-cache-dir &>/dev/null
@ -329,21 +310,19 @@ TidalClientSetup () {
tidal-dl tidal-dl
fi fi
if [ ! -d /config/extended/cache/tidal ]; then if [ ! -d "${STATE_DIR}/extended/cache/tidal" ]; then
mkdir -p /config/extended/cache/tidal mkdir -p "${STATE_DIR}/extended/cache/tidal"
chmod 777 /config/extended/cache/tidal
fi fi
if [ -d /config/extended/cache/tidal ]; then if [ -d "${STATE_DIR}/extended/cache/tidal" ]; then
log "TIDAL :: Purging album list cache..." log "TIDAL :: Purging album list cache..."
rm /config/extended/cache/tidal/*-albums.json &>/dev/null rm "${STATE_DIR}/extended/cache/tidal/*-albums.json" &>/dev/null
fi fi
if [ ! -d "$audioPath/incomplete" ]; then if [ ! -d "$audioPath/incomplete" ]; then
mkdir -p "$audioPath"/incomplete mkdir -p "$audioPath"/incomplete
chmod 777 "$audioPath"/incomplete
else else
rm -rf "$audioPath"/incomplete/* rm -rf "$audioPath/incomplete/*"
fi fi
TidaldlStatusCheck TidaldlStatusCheck
@ -353,16 +332,15 @@ TidalClientSetup () {
} }
TidaldlStatusCheck () { TidaldlStatusCheck () {
until false until false; do
do running=no
running=no if pgrep -f "tidal-dl" | read -r; then
if ps aux | grep "tidal-dl" | grep -v "grep" | read; then running=yes
running=yes log "STATUS :: TIDAL-DL :: BUSY :: Pausing/waiting for all active tidal-dl tasks to end..."
log "STATUS :: TIDAL-DL :: BUSY :: Pausing/waiting for all active tidal-dl tasks to end..." sleep 2
sleep 2 continue
continue fi
fi break
break
done done
} }
@ -370,37 +348,42 @@ TidalClientTest () {
log "TIDAL :: tidal-dl client setup verification..." log "TIDAL :: tidal-dl client setup verification..."
i=0 i=0
while [ $i -lt 3 ]; do while [ $i -lt 3 ]; do
i=$(( $i + 1 )) i=$(( i + 1 ))
TidaldlStatusCheck TidaldlStatusCheck
tidal-dl -q Normal -o "$audioPath"/incomplete -l "$tidalClientTestDownloadId" 2>&1 | tee -a "/config/logs/$logFileName" tidal-dl -q Normal -o "$audioPath/incomplete" -l "$tidalClientTestDownloadId" 2>&1
downloadCount=$(find "$audioPath"/incomplete -type f -regex ".*/.*\.\(flac\|opus\|m4a\|mp3\)" | wc -l) downloadCount=$(find "$audioPath/incomplete" -type f -regex ".*/.*\.\(flac\|opus\|m4a\|mp3\)" | wc -l)
if [ $downloadCount -le 0 ]; then if [ "$downloadCount" -le 0 ]; then
continue continue
else else
break break
fi fi
done done
tidalClientTest="unknown" tidalClientTest="unknown"
if [ $downloadCount -le 0 ]; then if [ "$downloadCount" -le 0 ]; then
if [ -f /config/xdg/.tidal-dl.token.json ]; then if [ -f "${STATE_DIR}/xdg/.tidal-dl.token.json" ]; then
rm /config/xdg/.tidal-dl.token.json rm "${STATE_DIR}/xdg/.tidal-dl.token.json"
fi fi
log "TIDAL :: ERROR :: Download failed" log "TIDAL :: ERROR :: Download failed"
log "TIDAL :: ERROR :: You will need to re-authenticate on next script run..." log "TIDAL :: ERROR :: You will need to re-authenticate on next script run..."
log "TIDAL :: ERROR :: Exiting..." log "TIDAL :: ERROR :: Exiting..."
rm -rf "$audioPath"/incomplete/* rm -rf "$audioPath/incomplete/*"
NotifyWebhook "Error" "TIDAL not authenticated but configured" NotifyWebhook "Error" "TIDAL not authenticated but configured"
tidalClientTest="failed" tidalClientTest="failed"
log "Script sleeping for $audioScriptInterval..." log "Script sleeping for $audioScriptInterval..."
sleep $audioScriptInterval sleep $audioScriptInterval
exit exit
else else
rm -rf "$audioPath"/incomplete/* rm -rf "$audioPath/incomplete/*"
log "TIDAL :: Successfully Verified" log "TIDAL :: Successfully Verified"
tidalClientTest="success" tidalClientTest="success"
fi fi
} }
logDl () {
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: \
$lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: $1"
}
DownloadProcess () { DownloadProcess () {
# Required Input Data # Required Input Data
@ -412,107 +395,71 @@ DownloadProcess () {
# Create Required Directories # Create Required Directories
if [ ! -d "$audioPath/incomplete" ]; then if [ ! -d "$audioPath/incomplete" ]; then
mkdir -p "$audioPath"/incomplete mkdir -p "$audioPath/incomplete"
chmod 777 "$audioPath"/incomplete
else else
rm -rf "$audioPath"/incomplete/* rm -rf "$audioPath/incomplete/*"
fi fi
if [ ! -d "$audioPath/complete" ]; then if [ ! -d "$audioPath/complete" ]; then
mkdir -p "$audioPath"/complete mkdir -p "$audioPath/complete"
chmod 777 "$audioPath"/complete
else else
rm -rf "$audioPath"/complete/* rm -rf "$audioPath/complete/*"
fi fi
if [ ! -d "/config/extended/logs" ]; then logPaths=( "deezer" "tidal" "failed/deezer" "failed/tidal" )
mkdir -p /config/extended/logs for p in "${!logPaths[@]}"; do
chmod 777 /config/extended/logs if [ ! -d "${STATE_DIR}/extended/logs/downloaded/${logPaths[$p]}" ]; then
fi mkdir -p "${STATE_DIR}/extended/logs/downloaded/${logPaths[$p]}"
fi
if [ ! -d "/config/extended/logs/downloaded" ]; then done
mkdir -p /config/extended/logs/downloaded
chmod 777 /config/extended/logs/downloaded
fi
if [ ! -d "/config/extended/logs/downloaded/deezer" ]; then
mkdir -p /config/extended/logs/downloaded/deezer
chmod 777 /config/extended/logs/downloaded/deezer
fi
if [ ! -d "/config/extended/logs/downloaded/tidal" ]; then
mkdir -p /config/extended/logs/downloaded/tidal
chmod 777 /config/extended/logs/downloaded/tidal
fi
if [ ! -d /config/extended/logs/downloaded/failed/deezer ]; then
mkdir -p /config/extended/logs/downloaded/failed/deezer
chmod 777 /config/extended/logs/downloaded/failed/deezer
fi
if [ ! -d /config/extended/logs/downloaded/failed/tidal ]; then
mkdir -p /config/extended/logs/downloaded/failed/tidal
chmod 777 /config/extended/logs/downloaded/failed/tidal
fi
if [ ! -d "$importPath" ]; then if [ ! -d "$importPath" ]; then
mkdir -p "$importPath" mkdir -p "$importPath"
chmod 777 "$importPath"
fi fi
AddDownloadClient AddDownloadClient
downloadedAlbumTitleClean="$(echo "$4" | sed -e "s%[^[:alpha:][:digit:]._' ]% %g" -e "s/ */ /g" | sed 's/^[.]*//' | sed 's/[.]*$//g' | sed 's/^ *//g' | sed 's/ *$//g')" downloadedAlbumTitleClean="$(echo "$4" | sed -e "s%[^[:alpha:][:digit:]._' ]% %g" -e "s/ */ /g" | sed 's/^[.]*//' | sed 's/[.]*$//g' | sed 's/^ *//g' | sed 's/ *$//g')"
if find "$audioPath"/complete -type d -iname "$lidarrArtistNameSanitized-$downloadedAlbumTitleClean ($3)-*-$1-$2" | read; then if find "$audioPath/complete" -type d -iname "$lidarrArtistNameSanitized-$downloadedAlbumTitleClean ($3)-*-$1-$2" | read -r; then
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: ERROR :: Previously Downloaded..." logDl "ERROR :: Previously Downloaded..."
return return
fi fi
# check for log file # check for log file
if [ "$2" == "DEEZER" ]; then
if [ -f /config/extended/logs/downloaded/deezer/$1 ]; then for i in "DEEZER" "TIDAL"; do
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: ERROR :: Previously Downloaded ($1)..." if [ "$2" == $i ]; then
return if [ -f "${STATE_DIR}/extended/logs/downloaded/${i,,}/$1" ]; then
fi logDl "ERROR :: Previously Downloaded ($1)..."
if [ -f /config/extended/logs/downloaded/failed/deezer/$1 ]; then return
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: ERROR :: Previously Attempted Download ($1)..." fi
return if [ -f "${STATE_DIR}/extended/logs/downloaded/failed/${i,,}/$1" ]; then
fi logDl "ERROR :: Previously Attempted Download ($1)..."
fi return
fi
fi
done
# check for log file
if [ "$2" == "TIDAL" ]; then
if [ -f /config/extended/logs/downloaded/tidal/$1 ]; then
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: ERROR :: Previously Downloaded ($1)..."
return
fi
if [ -f /config/extended/logs/downloaded/failed/tidal/$1 ]; then
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: ERROR :: Previously Attempted Download ($1)..."
return
fi
fi
downloadTry=0 downloadTry=0
until false until false
do do
downloadTry=$(( $downloadTry + 1 )) downloadTry=$(( downloadTry + 1 ))
if [ -f /temp-download ]; then if [ -f /tmp/temp-download ]; then
rm /temp-download rm /tmp/temp-download
sleep 0.1 sleep 0.1
fi fi
touch /temp-download touch /tmp/temp-download
sleep 0.1 sleep 0.1
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Download Attempt number $downloadTry" logDl "Download Attempt number $downloadTry"
if [ "$2" == "DEEZER" ]; then if [ "$2" == "DEEZER" ]; then
if [ -z $arlToken ]; then if [ -z "$arlToken" ]; then
DownloadClientFreyr $1 DownloadClientFreyr "$1"
else else
deemix -b $deemixQuality -p "$audioPath"/incomplete "https://www.deezer.com/album/$1" 2>&1 | tee -a "/config/logs/$logFileName" deemix -b $deemixQuality -p "$audioPath"/incomplete "https://www.deezer.com/album/$1" 2>&1
fi fi
if [ -d "/tmp/deemix-imgs" ]; then if [ -d "/tmp/deemix-imgs" ]; then
@ -521,49 +468,43 @@ DownloadProcess () {
# Verify Client Works... # Verify Client Works...
clientTestDlCount=$(find "$audioPath"/incomplete/ -type f -regex ".*/.*\.\(flac\|opus\|m4a\|mp3\)" | wc -l) clientTestDlCount=$(find "$audioPath"/incomplete/ -type f -regex ".*/.*\.\(flac\|opus\|m4a\|mp3\)" | wc -l)
if [ $clientTestDlCount -le 0 ]; then if [ "$clientTestDlCount" -le 0 ]; then
# Add +1 to failed attempts # Add +1 to failed attempts
deemixFail=$(( $deemixFail + 1)) deemixFail=$(( deemixFail + 1))
else else
# Reset for successful download # Reset for successful download
deemixFail=0 deemixFail=0
fi fi
# If download failes X times, exit with error... # If download failes X times, exit with error...
if [ $deemixFail -eq $failedDownloadAttemptThreshold ]; then if [ $deemixFail -eq $failedDownloadAttemptThreshold ] && [ -z "$arlToken" ]; then
if [ -z $arlToken ]; then rm -rf "$audioPath"/incomplete/*
rm -rf "$audioPath"/incomplete/* logDl "All $failedDownloadAttemptThreshold Download Attempts failed, skipping..."
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: All $failedDownloadAttemptThreshold Download Attempts failed, skipping..." else
else DeezerClientTest
DeezerClientTest if [ "$deezerClientTest" == "success" ]; then
if [ "$deezerClientTest" == "success" ]; then logDl "All $failedDownloadAttemptThreshold Download Attempts failed, skipping..."
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: All $failedDownloadAttemptThreshold Download Attempts failed, skipping..." deemixFail=0
deemixFail=0
fi
fi fi
fi fi
fi fi
if [ "$2" == "DEEZER" ]; then if [ "$2" == "DEEZER" ] && [ $deemixFail -eq $failedDownloadAttemptThreshold ] && [ -z "$arlToken" ]; then
if [ $deemixFail -eq $failedDownloadAttemptThreshold ]; then DownloadClientFreyr "$1"
if [ -z $arlToken ]; then else
DownloadClientFreyr $1 deemix -b $deemixQuality -p "$audioPath"/incomplete "https://www.deezer.com/album/$1" 2>&1
else fi
deemix -b $deemixQuality -p "$audioPath"/incomplete "https://www.deezer.com/album/$1" 2>&1 | tee -a "/config/logs/$logFileName"
fi
fi
fi
if [ "$2" == "TIDAL" ]; then if [ "$2" == "TIDAL" ]; then
TidaldlStatusCheck TidaldlStatusCheck
tidal-dl -q $tidalQuality -o "$audioPath/incomplete" -l "$1" 2>&1 | tee -a "/config/logs/$logFileName" tidal-dl -q $tidalQuality -o "$audioPath/incomplete" -l "$1" 2>&1
# Verify Client Works... # Verify Client Works...
clientTestDlCount=$(find "$audioPath"/incomplete/ -type f -regex ".*/.*\.\(flac\|opus\|m4a\|mp3\)" | wc -l) clientTestDlCount=$(find "$audioPath"/incomplete/ -type f -regex ".*/.*\.\(flac\|opus\|m4a\|mp3\)" | wc -l)
if [ $clientTestDlCount -le 0 ]; then if [ "$clientTestDlCount" -le 0 ]; then
# Add +1 to failed attempts # Add +1 to failed attempts
tidaldlFail=$(( $tidaldlFail + 1)) tidaldlFail=$(( tidaldlFail + 1))
else else
# Reset for successful download # Reset for successful download
tidaldlFail=0 tidaldlFail=0
@ -571,29 +512,29 @@ DownloadProcess () {
# If download failes X times, exit with error... # If download failes X times, exit with error...
if [ $tidaldlFail -eq $failedDownloadAttemptThreshold ]; then if [ $tidaldlFail -eq $failedDownloadAttemptThreshold ]; then
TidalClientTest TidalClientTest
if [ "$tidalClientTest" == "success" ]; then if [ "$tidalClientTest" == "success" ]; then
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: All $failedDownloadAttemptThreshold Download Attempts failed, skipping..." logDl "All $failedDownloadAttemptThreshold Download Attempts failed, skipping..."
fi fi
fi fi
fi fi
find "$audioPath/incomplete" -type f -iname "*.flac" -newer "/temp-download" -print0 | while IFS= read -r -d '' file; do find "$audioPath/incomplete" -type f -iname "*.flac" -newer "/tmp/temp-download" -print0 | while IFS= read -r -d '' file; do
audioFlacVerification "$file" audioFlacVerification "$file"
if [ "$verifiedFlacFile" == "0" ]; then if [ "$verifiedFlacFile" == "0" ]; then
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Flac Verification :: $file :: Verified" logDl "Flac Verification :: $file :: Verified"
else else
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Flac Verification :: $file :: ERROR :: Failed Verification" logDl "Flac Verification :: $file :: ERROR :: Failed Verification"
rm "$file" rm "$file"
fi fi
done done
downloadCount=$(find "$audioPath"/incomplete/ -type f -regex ".*/.*\.\(flac\|m4a\|mp3\)" | wc -l) downloadCount=$(find "$audioPath"/incomplete/ -type f -regex ".*/.*\.\(flac\|m4a\|mp3\)" | wc -l)
if [ "$downloadCount" -ne "$5" ]; then if [ "$downloadCount" -ne "$5" ]; then
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: ERROR :: download failed, missing tracks..." logDl "ERROR :: download failed, missing tracks..."
completedVerification="false" completedVerification="false"
else else
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Success" logDl "Success"
completedVerification="true" completedVerification="true"
fi fi
@ -605,13 +546,13 @@ DownloadProcess () {
fi fi
break break
else else
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Retry Download in 1 second fix errors..." logDl "Retry Download in 1 second fix errors..."
sleep 1 sleep 1
fi fi
done done
# Consolidate files to a single folder # Consolidate files to a single folder
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Consolidating files to single folder" logDl "Consolidating files to single folder"
find "$audioPath/incomplete" -type f -exec mv "{}" "$audioPath"/incomplete/ \; 2>/dev/null find "$audioPath/incomplete" -type f -exec mv "{}" "$audioPath"/incomplete/ \; 2>/dev/null
find $audioPath/incomplete/ -type d -mindepth 1 -maxdepth 1 -exec rm -rf {} \; 2>/dev/null find $audioPath/incomplete/ -type d -mindepth 1 -maxdepth 1 -exec rm -rf {} \; 2>/dev/null
@ -623,34 +564,28 @@ DownloadProcess () {
downloadCount=$(find "$audioPath"/incomplete/ -type f -regex ".*/.*\.\(flac\|m4a\|mp3\)" | wc -l) downloadCount=$(find "$audioPath"/incomplete/ -type f -regex ".*/.*\.\(flac\|m4a\|mp3\)" | wc -l)
if [ "$downloadCount" -ne "$5" ]; then if [ "$downloadCount" -ne "$5" ]; then
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: ERROR :: All download Attempts failed..." logDl "ERROR :: All download Attempts failed..."
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Logging $1 as failed download..." logDl "Logging $1 as failed download..."
if [ "$2" == "DEEZER" ]; then for awa in "DEEZER" "TIDAL"; do
touch /config/extended/logs/downloaded/failed/deezer/$1 [ "$2" == $awa ] \
fi && touch "${STATE_DIR}/extended/logs/downloaded/failed/${awa,,}/$1"
if [ "$2" == "TIDAL" ]; then done
touch /config/extended/logs/downloaded/failed/tidal/$1
fi
return return
fi fi
# Log Completed Download # Log Completed Download
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Logging $1 as successfully downloaded..." logDl "Logging $1 as successfully downloaded..."
if [ "$2" == "DEEZER" ]; then for awa in "DEEZER" "TIDAL"; do
touch /config/extended/logs/downloaded/deezer/$1 [ "$2" == $awa ] \
fi && touch "${STATE_DIR}/extended/logs/downloaded/${awa,,}/$1"
if [ "$2" == "TIDAL" ]; then done
touch /config/extended/logs/downloaded/tidal/$1
fi
# Tag with beets # Tag with beets
if [ "$enableBeetsTagging" == "true" ]; then if [ "$enableBeetsTagging" == "true" ]; then
if [ -f /config/extended/beets-error ]; then [ -f "${STATE_DIR}/extended/beets-error" ] && rm "${STATE_DIR}/extended/beets-error"
rm /config/extended/beets-error logDl "Processing files with beets..."
fi
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Processing files with beets..."
ProcessWithBeets "$audioPath/incomplete" ProcessWithBeets "$audioPath/incomplete"
fi fi
@ -658,33 +593,30 @@ DownloadProcess () {
find "$audioPath/incomplete" -type f -iname "*.flac" -print0 | while IFS= read -r -d '' file; do find "$audioPath/incomplete" -type f -iname "*.flac" -print0 | while IFS= read -r -d '' file; do
lrcFile="${file%.*}.lrc" lrcFile="${file%.*}.lrc"
if [ -f "$lrcFile" ]; then if [ -f "$lrcFile" ]; then
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Embedding lyrics (lrc) into $file" logDl "Embedding lyrics (lrc) into $file"
metaflac --remove-tag=Lyrics "$file" metaflac --remove-tag=Lyrics "$file"
metaflac --set-tag-from-file="Lyrics=$lrcFile" "$file" metaflac --set-tag-from-file="Lyrics=$lrcFile" "$file"
fi fi
done done
if [ "$audioFormat" != "native" ]; then if [ "$audioFormat" != "native" ]; then
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Converting Flac Audio to ${audioFormat^^} ($audioBitrateText)" logDl "Converting Flac Audio to ${audioFormat^^} ($audioBitrateText)"
if [ "$audioFormat" == "opus" ]; then
options="-c:a libopus -b:a ${audioBitrate}k -application audio -vbr off"
extension="opus"
fi
if [ "$audioFormat" == "mp3" ]; then [ "$audioFormat" == "opus" ] \
options="-c:a libmp3lame -b:a ${audioBitrate}k" && options="-c:a libopus -b:a ${audioBitrate}k -application audio -vbr off" \
extension="mp3" && extension=$audioFormat
fi
if [ "$audioFormat" == "aac" ]; then [ "$audioFormat" == "mp3" ] \
options="-c:a aac -b:a ${audioBitrate}k -movflags faststart" && options="-c:a libmp3lame -b:a ${audioBitrate}k" \
extension="m4a" && extension=$audioFormat
fi
if [ "$audioFormat" == "alac" ]; then [ "$audioFormat" == "aac" ] \
options="-c:a alac -movflags faststart" && options="-c:a aac -b:a ${audioBitrate}k -movflags faststart" \
extension="m4a" && extension="m4a"
fi
[ "$audioFormat" == "alac" ] \
&& options="-c:a alac -movflags faststart" \
&& extension="m4a"
find "$audioPath/incomplete" -type f -iname "*.flac" -print0 | while IFS= read -r -d '' audio; do find "$audioPath/incomplete" -type f -iname "*.flac" -print0 | while IFS= read -r -d '' audio; do
file="${audio}" file="${audio}"
@ -693,20 +625,20 @@ DownloadProcess () {
filenamenoext="${filename%.*}" filenamenoext="${filename%.*}"
if [ "$audioFormat" == "opus" ]; then if [ "$audioFormat" == "opus" ]; then
if opusenc --bitrate ${audioBitrate} --vbr --music "$file" "$foldername/${filenamenoext}.$extension"; then if opusenc --bitrate ${audioBitrate} --vbr --music "$file" "$foldername/${filenamenoext}.$extension"; then
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: $filename :: Conversion to $audioFormat ($audioBitrateText) successful" logDl "$filename :: Conversion to $audioFormat ($audioBitrateText) successful"
rm "$file" rm "$file"
else else
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: $filename :: ERROR :: Conversion Failed" logDl "$filename :: ERROR :: Conversion Failed"
rm "$foldername/${filenamenoext}.$extension" rm "$foldername/${filenamenoext}.$extension"
fi fi
continue continue
fi fi
if ffmpeg -loglevel warning -hide_banner -nostats -i "$file" -n -vn $options "$foldername/${filenamenoext}.$extension" < /dev/null; then if ffmpeg -loglevel warning -hide_banner -nostats -i "$file" -n -vn "$options" "$foldername/${filenamenoext}.$extension" < /dev/null; then
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: $filename :: Conversion to $audioFormat ($audioBitrateText) successful" logDl "$filename :: Conversion to $audioFormat ($audioBitrateText) successful"
rm "$file" rm "$file"
else else
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: $filename :: ERROR :: Conversion Failed" logDl "$filename :: ERROR :: Conversion Failed"
rm "$foldername/${filenamenoext}.$extension" rm "$foldername/${filenamenoext}.$extension"
fi fi
done done
@ -716,10 +648,10 @@ DownloadProcess () {
if [ "$enableReplaygainTags" == "true" ]; then if [ "$enableReplaygainTags" == "true" ]; then
AddReplaygainTags "$audioPath/incomplete" AddReplaygainTags "$audioPath/incomplete"
else else
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Replaygain Tagging Disabled (set enableReplaygainTags=true to enable...)" logDl "Replaygain Tagging Disabled (set enableReplaygainTags=true to enable...)"
fi fi
albumquality="$(find "$audioPath"/incomplete/ -type f -regex ".*/.*\.\(flac\|opus\|m4a\|mp3\)" | head -n 1 | egrep -i -E -o "\.{1}\w*$" | sed 's/\.//g')" albumquality="$(find "$audioPath"/incomplete/ -type f -regex ".*/.*\.\(flac\|opus\|m4a\|mp3\)" | head -n 1 | grep -i -E -o "\.{1}\w*$" | sed 's/\.//g')"
downloadedAlbumFolder="${lidarrArtistNameSanitized}-${downloadedAlbumTitleClean:0:100} (${3})" downloadedAlbumFolder="${lidarrArtistNameSanitized}-${downloadedAlbumTitleClean:0:100} (${3})"
find "$audioPath/incomplete" -type f -regex ".*/.*\.\(flac\|opus\|m4a\|mp3\)" -print0 | while IFS= read -r -d '' audio; do find "$audioPath/incomplete" -type f -regex ".*/.*\.\(flac\|opus\|m4a\|mp3\)" -print0 | while IFS= read -r -d '' audio; do
@ -754,172 +686,146 @@ DownloadProcess () {
ProcessWithBeets () { ProcessWithBeets () {
# Input # Input
# $1 Download Folder to process # $1 Download Folder to process
if [ -f /config/extended/beets-library.blb ]; then for awa in "extended/beets-library.blb" "extended/beets.log" "beets-match"; do
rm /config/extended/beets-library.blb [ -f "${STATE_DIR}/${awa}" ] \
sleep 0.5 && rm "${STATE_DIR}/${awa}" \
fi && sleep 0.5
if [ -f /config/extended/beets.log ]; then done
rm /config/extended/beets.log
sleep 0.5
fi
if [ -f "/config/beets-match" ]; then
rm "/config/beets-match"
sleep 0.5
fi
touch "/config/beets-match" touch "/config/beets-match"
sleep 0.5 sleep 0.5
beet -c /config/extended/beets-config.yaml -l /config/extended/beets-library.blb -d "$1" import -qC "$1" beet -c "${STATE_DIR}/extended/beets-config.yaml" \
if [ $(find "$1" -type f -regex ".*/.*\.\(flac\|opus\|m4a\|mp3\)" -newer "/config/beets-match" | wc -l) -gt 0 ]; then -l "${STATE_DIR}/extended/beets-library.blb" -d "$1" import -qC "$1"
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: SUCCESS: Matched with beets!"
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: fixing track tags" if [ "$(find "$1" -type f -regex ".*/.*\.\(flac\|opus\|m4a\|mp3\)" -newer "${STATE_DIR}/beets-match" | wc -l)" -gt 0 ]; then
logDl "SUCCESS: Matched with beets!"
logDl "fixing track tags"
find "$audioPath/incomplete" -type f -iname "*.flac" -print0 | while IFS= read -r -d '' file; do find "$audioPath/incomplete" -type f -iname "*.flac" -print0 | while IFS= read -r -d '' file; do
getArtistCredit="$(ffprobe -loglevel 0 -print_format json -show_format -show_streams "$file" | jq -r ".format.tags.ARTIST_CREDIT" | sed "s/null//g" | sed "/^$/d")" getArtistCredit="$(ffprobe -loglevel 0 -print_format json -show_format -show_streams "$file" | jq -r ".format.tags.ARTIST_CREDIT" | sed "s/null//g" | sed "/^$/d")"
# album artist # album artist
metaflac --remove-tag=ALBUMARTIST "$file" metaflac \
metaflac --remove-tag=ALBUMARTIST_CREDIT "$file" --remove-tag=ALBUMARTIST --remove-tag=ALBUMARTIST_CREDIT --remove-tag=ALBUM_ARTIST \
metaflac --remove-tag=ALBUM_ARTIST "$file" --remove-tag="ALBUM ARTIST" --remove-tag=ARTIST --remove-tag=ARTIST_CREDIT \
metaflac --remove-tag="ALBUM ARTIST" "$file" --remove-tag=ARTISTSORT --remove-tag=COMPOSERSORT --remove-tag=ALBUMARTISTSORT \
# artist --remove-tag=MUSICBRAINZ_ARTISTID --remove-tag=MUSICBRAINZ_ALBUMARTISTID \
metaflac --remove-tag=ARTIST "$file" "$file"
metaflac --remove-tag=ARTIST_CREDIT "$file"
if [ ! -z "$getArtistCredit" ]; then metaflac \
metaflac --set-tag=ARTIST="$getArtistCredit" "$file" --set-tag=ALBUMARTIST="$lidarrArtistName" \
--set-tag=MUSICBRAINZ_ARTISTID="$lidarrArtistForeignArtistId" \
--set-tag=MUSICBRAINZ_ALBUMARTISTID="$lidarrArtistForeignArtistId" \
"$file"
if [ -n "$getArtistCredit" ]; then
metaflac --set-tag=ARTIST="$getArtistCredit" "$file"
else else
metaflac --set-tag=ARTIST="$lidarrArtistName" "$file" metaflac --set-tag=ARTIST="$lidarrArtistName" "$file"
fi fi
# sorts
metaflac --remove-tag=ARTISTSORT "$file" log "FIXED : $file"
metaflac --remove-tag=COMPOSERSORT "$file"
metaflac --remove-tag=ALBUMARTISTSORT "$file"
# lidarr
metaflac --set-tag=ALBUMARTIST="$lidarrArtistName" "$file"
# mbrainz
metaflac --remove-tag=MUSICBRAINZ_ARTISTID "$file"
metaflac --remove-tag=MUSICBRAINZ_ALBUMARTISTID "$file"
metaflac --set-tag=MUSICBRAINZ_ARTISTID="$lidarrArtistForeignArtistId" "$file"
metaflac --set-tag=MUSICBRAINZ_ALBUMARTISTID="$lidarrArtistForeignArtistId" "$file"
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: FIXED : $file"
done done
else else
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: ERROR :: Unable to match using beets to a musicbrainz release..." log "ERROR :: Unable to match using beets to a musicbrainz release..."
return return
fi fi
if [ -f "/config/beets-match" ]; then [ -f "${STATE_DIR}/beets-match" ] \
rm "/config/beets-match" && rm "${STATE_DIR}/beets-match" \
sleep 0.1 && sleep 0.1
fi
# Get file metadata # Get file metadata
GetFile=$(find "$audioPath/incomplete" -type f -regex ".*/.*\.\(flac\|opus\|m4a\|mp3\)" | head -n1) GetFile=$(find "$audioPath/incomplete" -type f -regex ".*/.*\.\(flac\|opus\|m4a\|mp3\)" | head -n1)
extension="${GetFile##*.}" extension="${GetFile##*.}"
ffprobeGet=$(ffprobe -hide_banner -loglevel fatal -show_error -show_format -show_streams \
-show_programs -show_chapters -show_private_data -print_format json \
"$GetFile"
)
if [ "$extension" == "opus" ]; then if [ "$extension" == "opus" ]; then
matchedTags=$(ffprobe -hide_banner -loglevel fatal -show_error -show_format -show_streams -show_programs -show_chapters -show_private_data -print_format json "$GetFile" | jq -r ".streams[].tags") matchedTags=$(${ffprobeGet} | jq -r ".streams[].tags")
else else
matchedTags=$(ffprobe -hide_banner -loglevel fatal -show_error -show_format -show_streams -show_programs -show_chapters -show_private_data -print_format json "$GetFile" | jq -r ".format.tags") matchedTags=$(${ffprobeGet} | jq -r ".format.tags")
fi fi
# Get Musicbrainz Release Group ID and Album Artist ID from tagged file # Get Musicbrainz Release Group ID and Album Artist ID from tagged file
if [ "$extension" == "flac" ] || [ "$extension" == "opus" ]; then if [ "$extension" == "flac" ] || [ "$extension" == "opus" ]; then
matchedTagsAlbumReleaseGroupId="$(echo $matchedTags | jq -r ".MUSICBRAINZ_RELEASEGROUPID")" matchedTagsAlbumReleaseGroupId="$(echo "$matchedTags" | jq -r ".MUSICBRAINZ_RELEASEGROUPID")"
matchedTagsAlbumArtistId="$(echo $matchedTags | jq -r ".MUSICBRAINZ_ALBUMARTISTID")" matchedTagsAlbumArtistId="$(echo "$matchedTags" | jq -r ".MUSICBRAINZ_ALBUMARTISTID")"
elif [ "$extension" == "mp3" ] || [ "$extension" == "m4a" ]; then elif [ "$extension" == "mp3" ] || [ "$extension" == "m4a" ]; then
matchedTagsAlbumReleaseGroupId="$(echo $matchedTags | jq -r '."MusicBrainz Release Group Id"')" matchedTagsAlbumReleaseGroupId="$(echo "$matchedTags" | jq -r '."MusicBrainz Release Group Id"')"
matchedLidarrAlbumArtistId="$(echo $matchedTags | jq -r '."MusicBrainz Ablum Artist Id"')" matchedLidarrAlbumArtistId="$(echo "$matchedTags" | jq -r '."MusicBrainz Ablum Artist Id"')"
fi fi
if [ ! -d "/config/extended/logs/downloaded/musicbrainz_matched" ]; then [ ! -d "${STATE_DIR}/extended/logs/downloaded/musicbrainz_matched" ] \
mkdir -p "/config/extended/logs/downloaded/musicbrainz_matched" && mkdir -p "${STATE_DIR}/extended/logs/downloaded/musicbrainz_matched"
chmod 777 "/config/extended/logs/downloaded/musicbrainz_matched"
fi
if [ ! -f "/config/extended/logs/downloaded/musicbrainz_matched/$matchedTagsAlbumReleaseGroupId" ]; then [ ! -f "${STATE_DIR}/extended/logs/downloaded/musicbrainz_matched/$matchedTagsAlbumReleaseGroupId" ] \
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Marking MusicBrainz Release Group ($matchedTagsAlbumReleaseGroupId) as successfully downloaded..." && log "Marking MusicBrainz Release Group ($matchedTagsAlbumReleaseGroupId) as successfully downloaded..." \
touch "/config/extended/logs/downloaded/musicbrainz_matched/$matchedTagsAlbumReleaseGroupId" && touch "/config/extended/logs/downloaded/musicbrainz_matched/$matchedTagsAlbumReleaseGroupId"
fi
} }
DownloadQualityCheck () { DownloadQualityCheck () {
if [ "$requireQuality" == "true" ]; then [ "$requireQuality" != "true" ] \
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Checking for unwanted files" && logDl "Skipping download quality check... (enable by setting: requireQuality=true)" \
&& return
if [ "$audioFormat" != "native" ]; then logDl "Checking for unwanted files"
if find "$1" -type f -regex ".*/.*\.\(opus\|m4a\|mp3\)"| read; then
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Unwanted files found!" local deezer
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Performing cleanup..." local tidal
rm "$1"/* local other
else local notNative
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: No unwanted files found!" notNative=$([ "$audioFormat" != "native" ] \
fi && find "$1" -type f -regex ".*/.*\.\(opus\|m4a\|mp3\)" | read -r
fi )
if [ "$audioFormat" == "native" ]; then other=$([ "$audioBitrate" == "master" ] || [ "$audioBitrate" == "lossless" ] \
if [ "$audioBitrate" == "master" ]; then && find "$1" -type f -regex ".*/.*\.\(opus\|m4a\|mp3\)" | read -r
if find "$1" -type f -regex ".*/.*\.\(opus\|m4a\|mp3\)"| read; then )
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Unwanted files found!" deezer=$([ "$2" == "DEEZER" ] \
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Performing cleanup..." && find "$1" -type f -regex ".*/.*\.\(opus\|m4a\|flac\)" | read -r
rm "$1"/* )
else tidal=$([ "$2" == "TIDAL" ] \
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: No unwanted files found!" && find "$1" -type f -regex ".*/.*\.\(opus\|flac\|mp3\)" | read -r
fi )
elif [ "$audioBitrate" == "lossless" ]; then
if find "$1" -type f -regex ".*/.*\.\(opus\|m4a\|mp3\)"| read; then if $notNative || $deezer || $tidal || $other; then
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Unwanted files found!" logDl "Unwanted files found!"
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Performing cleanup..." logDl "Performing cleanup..."
rm "$1"/* rm "$1"/*
else
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: No unwanted files found!"
fi
elif [ "$2" == "DEEZER" ]; then
if find "$1" -type f -regex ".*/.*\.\(opus\|m4a\|flac\)"| read; then
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Unwanted files found!"
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Performing cleanup..."
rm "$1"/*
else
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: No unwanted files found!"
fi
elif [ "$2" == "TIDAL" ]; then
if find "$1" -type f -regex ".*/.*\.\(opus\|flac\|mp3\)"| read; then
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Unwanted files found!"
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Performing cleanup..."
rm "$1"/*
else
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: No unwanted files found!"
fi
fi
fi
else else
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Skipping download quality check... (enable by setting: requireQuality=true)" logDl "No unwanted files found!"
fi fi
} }
AddReplaygainTags () { AddReplaygainTags () {
# Input Data # Input Data
# $1 Folder path to scan and add tags # $1 Folder path to scan and add tags
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Adding Replaygain Tags using r128gain" logDl "Adding Replaygain Tags using r128gain"
r128gain -r -c 1 -a "$1" &>/dev/null r128gain -r -c 1 -a "$1" &>/dev/null
} }
NotifyLidarrForImport () { NotifyLidarrForImport () {
LidarrProcessIt=$(curl -s "$arrUrl/api/v1/command" --header "X-Api-Key:"${arrApiKey} -H "Content-Type: application/json" --data "{\"name\":\"DownloadedAlbumsScan\", \"path\":\"$1\"}") curl -s "$arrUrl/api/v1/command" --header "X-Api-Key:" "${arrApiKey}" -H "Content-Type: application/json" --data "{\"name\":\"DownloadedAlbumsScan\", \"path\":\"$1\"}"
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: LIDARR IMPORT NOTIFICATION SENT! :: $1" logDl "LIDARR IMPORT NOTIFICATION SENT! :: $1"
} }
DeemixClientSetup () { DeemixClientSetup () {
log "DEEZER :: Verifying deemix configuration" log "DEEZER :: Verifying deemix configuration"
if [ ! -z "$arlToken" ]; then if [ -n "$arlToken" ]; then
arlToken="$(echo $arlToken | sed -e "s%[^[:alpha:][:digit:]]%%g" -e "s/ */ /g" | sed 's/^[.]*//' | sed 's/[.]*$//g' | sed 's/^ *//g' | sed 's/ *$//g')" arlToken="$(echo "$arlToken" | sed -e "s%[^[:alpha:][:digit:]]%%g" -e "s/ */ /g" | sed 's/^[.]*//' | sed 's/[.]*$//g' | sed 's/^ *//g' | sed 's/ *$//g')"
# Create directories # Create directories
mkdir -p /config/xdg/deemix mkdir -p "${STATE_DIR}/xdg/deemix"
if [ -f "/config/xdg/deemix/.arl" ]; then if [ -f "${STATE_DIR}/xdg/deemix/.arl" ]; then
rm "/config/xdg/deemix/.arl" rm "${STATE_DIR}/xdg/deemix/.arl"
fi fi
if [ ! -f "/config/xdg/deemix/.arl" ]; then if [ ! -f "${STATE_DIR}/xdg/deemix/.arl" ]; then
echo -n "$arlToken" > "/config/xdg/deemix/.arl" echo -n "$arlToken" > "/${STATE_DIR}/xdg/deemix/.arl"
fi fi
log "DEEZER :: ARL Token: Configured" log "DEEZER :: ARL Token: Configured"
else else
@ -1783,9 +1689,6 @@ AudioProcess () {
Configuration Configuration
# Perform NotFound Folder Cleanup process
NotFoundFolderCleaner
LidarrRootFolderCheck LidarrRootFolderCheck
DownloadFormat DownloadFormat
@ -1821,14 +1724,13 @@ AudioProcess () {
log "Starting Script...." log "Starting Script...."
for (( ; ; )); do for (( ; ; )); do
let i++ (( i++ )) || true
logfileSetup verifyConfig
verifyConfig
getArrAppInfo getArrAppInfo
verifyApiAccess verifyApiAccess
AudioProcess AudioProcess
log "Script sleeping for $audioScriptInterval..." log "Script sleeping for $audioScriptInterval..."
sleep $audioScriptInterval sleep "$audioScriptInterval"
done done
exit exit