Kill kill kill kill kill
This commit is contained in:
parent
69b82a3497
commit
e66c16c976
1 changed files with 267 additions and 365 deletions
|
@ -1,38 +1,59 @@
|
|||
#!/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"
|
||||
|
||||
### Import Settings
|
||||
source /config/extended.conf
|
||||
# shellcheck source=./extended.conf
|
||||
source "${STATE_DIR}/lidarr-dl.conf"
|
||||
#### Import Functions
|
||||
source /config/extended/functions
|
||||
source ../universal/functions.bash
|
||||
|
||||
AddTag () {
|
||||
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 () {
|
||||
downloadClientsData=$(curl -s "$arrUrl/api/v1/downloadclient" --header "X-Api-Key:"${arrApiKey} -H "Content-Type: application/json")
|
||||
downloadClientCheck="$(echo $downloadClientsData | grep "Arr-Extended")"
|
||||
downloadClientsData=$(curl -s "$arrUrl/api/v1/downloadclient" --header "X-Api-Key:" "${arrApiKey}" -H "Content-Type: application/json")
|
||||
downloadClientCheck="$(echo "$downloadClientsData" | grep "Arr-Extended")"
|
||||
if [ -z "$downloadClientCheck" ]; then
|
||||
AddTag
|
||||
if [ ! -d "$importPath" ]; then
|
||||
mkdir -p "$importPath"
|
||||
chmod 777 -R "$importPath"
|
||||
fi
|
||||
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
|
||||
}
|
||||
|
||||
verifyConfig () {
|
||||
### Import Settings
|
||||
source /config/extended.conf
|
||||
# shellcheck source=./extended.conf
|
||||
source "${STATE_DIR}/lidarr-dl.conf"
|
||||
if [ "$enableAudio" != "true" ]; then
|
||||
log "Script is not enabled, enable by setting enableAudio to \"true\" by modifying the \"/config/extended.conf\" config file..."
|
||||
log "Sleeping (infinity)"
|
||||
sleep infinity
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ -z "$audioScriptInterval" ]; then
|
||||
|
@ -80,32 +101,13 @@ Configuration () {
|
|||
sleepTimer=0.5
|
||||
tidaldlFail=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
|
||||
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 /config/xdg ]; then
|
||||
mkdir -p /config/xdg
|
||||
if [ ! -d "${STATE_DIR}/xdg" ]; then
|
||||
mkdir -p "${STATE_DIR}/xdg"
|
||||
fi
|
||||
|
||||
if [ -z $topLimit ]; then
|
||||
if [ -z "$topLimit" ]; then
|
||||
topLimit=10
|
||||
fi
|
||||
|
||||
|
@ -175,10 +177,10 @@ Configuration () {
|
|||
if [ $enableBeetsTagging = true ]; then
|
||||
log "Beets Tagging Enabled"
|
||||
log "Beets Matching Threshold ${beetsMatchPercentage}%"
|
||||
beetsMatchPercentage=$(expr 100 - $beetsMatchPercentage )
|
||||
if cat /config/extended/beets-config.yaml | grep "strong_rec_thresh: 0.04" | read; then
|
||||
beetsMatchPercentage=$((100 - beetsMatchPercentage ))
|
||||
if grep "strong_rec_thresh: 0.04" "${STATE_DIR}/extended/beets-config.yaml" | read -r; then
|
||||
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
|
||||
else
|
||||
log "Beets Tagging Disabled"
|
||||
|
@ -195,11 +197,7 @@ Configuration () {
|
|||
}
|
||||
|
||||
DownloadClientFreyr () {
|
||||
timeout $downloadClientTimeOut freyr --no-bar --no-net-check -d $audioPath/incomplete deezer:album:$1 2>&1 | tee -a "/config/logs/$logFileName"
|
||||
# Resolve issue 94
|
||||
if [ -d /root/.cache/FreyrCLI ]; then
|
||||
rm -rf /root/.cache/FreyrCLI/*
|
||||
fi
|
||||
timeout $downloadClientTimeOut freyr --no-bar --no-net-check -d "$audioPath/incomplete" "deezer:album:$1" 2>&1
|
||||
}
|
||||
|
||||
DownloadFormat () {
|
||||
|
@ -222,9 +220,7 @@ DownloadFormat () {
|
|||
log "ERROR :: Change audioBitrate to a low, high, or lossless..."
|
||||
log "ERROR :: Exiting..."
|
||||
NotifyWebhook "FatalError" "Invalid audioFormat and audioBitrate options set"
|
||||
log "Script sleeping for $audioScriptInterval..."
|
||||
sleep $audioScriptInterval
|
||||
exit
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
bitrateError="false"
|
||||
|
@ -246,9 +242,7 @@ DownloadFormat () {
|
|||
log "ERROR :: Change audioBitrate to a desired bitrate number, example: 192..."
|
||||
log "ERROR :: Exiting..."
|
||||
NotifyWebhook "FatalError" "audioBitrate options set"
|
||||
log "Script sleeping for $audioScriptInterval..."
|
||||
sleep $audioScriptInterval
|
||||
exit
|
||||
exit 1
|
||||
fi
|
||||
|
||||
case "$audioFormat" in
|
||||
|
@ -281,45 +275,32 @@ DownloadFolderCleaner () {
|
|||
if [ -d "$audioPath/complete" ]; then
|
||||
log "Removing prevously completed downloads that failed to import..."
|
||||
# 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
|
||||
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
|
||||
find "$audioPath/complete" -mindepth 1 -type d -mtime +1 -exec rm -rf "{}" \; &>/dev/null
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
TidalClientSetup () {
|
||||
log "TIDAL :: Verifying tidal-dl configuration"
|
||||
touch /config/xdg/.tidal-dl.log
|
||||
if [ -f /config/xdg/.tidal-dl.json ]; then
|
||||
rm /config/xdg/.tidal-dl.json
|
||||
touch "${STATE_DIR}/xdg/.tidal-dl.log"
|
||||
if [ -f "${STATE_DIR}/xdg/.tidal-dl.json" ]; then
|
||||
rm "${STATE_DIR}/xdg/.tidal-dl.json"
|
||||
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\""
|
||||
if [ -f /config/extended/tidal-dl.json ]; then
|
||||
cp /config/extended/tidal-dl.json /config/xdg/.tidal-dl.json
|
||||
chmod 777 -R /config/xdg/
|
||||
if [ -f "${STATE_DIR}/extended/tidal-dl.json" ]; then
|
||||
cp "${STATE_DIR}/extended/tidal-dl.json" "${STATE_DIR}/xdg/.tidal-dl.json"
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
TidaldlStatusCheck
|
||||
tidal-dl -o "$audioPath"/incomplete 2>&1 | tee -a "/config/logs/$logFileName"
|
||||
tidal-dl -o "$audioPath/incomplete" 2>&1
|
||||
DownloadFormat
|
||||
|
||||
if [ ! -f /config/xdg/.tidal-dl.token.json ]; then
|
||||
if [ ! -f "${STATE_DIR}/xdg/.tidal-dl.token.json" ]; then
|
||||
TidaldlStatusCheck
|
||||
#log "TIDAL :: ERROR :: Downgrade tidal-dl for workaround..."
|
||||
#pip3 install tidal-dl==2022.3.4.2 --no-cache-dir &>/dev/null
|
||||
|
@ -329,21 +310,19 @@ TidalClientSetup () {
|
|||
tidal-dl
|
||||
fi
|
||||
|
||||
if [ ! -d /config/extended/cache/tidal ]; then
|
||||
mkdir -p /config/extended/cache/tidal
|
||||
chmod 777 /config/extended/cache/tidal
|
||||
if [ ! -d "${STATE_DIR}/extended/cache/tidal" ]; then
|
||||
mkdir -p "${STATE_DIR}/extended/cache/tidal"
|
||||
fi
|
||||
|
||||
if [ -d /config/extended/cache/tidal ]; then
|
||||
if [ -d "${STATE_DIR}/extended/cache/tidal" ]; then
|
||||
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
|
||||
|
||||
if [ ! -d "$audioPath/incomplete" ]; then
|
||||
mkdir -p "$audioPath"/incomplete
|
||||
chmod 777 "$audioPath"/incomplete
|
||||
else
|
||||
rm -rf "$audioPath"/incomplete/*
|
||||
rm -rf "$audioPath/incomplete/*"
|
||||
fi
|
||||
|
||||
TidaldlStatusCheck
|
||||
|
@ -353,16 +332,15 @@ TidalClientSetup () {
|
|||
}
|
||||
|
||||
TidaldlStatusCheck () {
|
||||
until false
|
||||
do
|
||||
running=no
|
||||
if ps aux | grep "tidal-dl" | grep -v "grep" | read; then
|
||||
running=yes
|
||||
log "STATUS :: TIDAL-DL :: BUSY :: Pausing/waiting for all active tidal-dl tasks to end..."
|
||||
sleep 2
|
||||
continue
|
||||
fi
|
||||
break
|
||||
until false; do
|
||||
running=no
|
||||
if pgrep -f "tidal-dl" | read -r; then
|
||||
running=yes
|
||||
log "STATUS :: TIDAL-DL :: BUSY :: Pausing/waiting for all active tidal-dl tasks to end..."
|
||||
sleep 2
|
||||
continue
|
||||
fi
|
||||
break
|
||||
done
|
||||
}
|
||||
|
||||
|
@ -370,37 +348,42 @@ TidalClientTest () {
|
|||
log "TIDAL :: tidal-dl client setup verification..."
|
||||
i=0
|
||||
while [ $i -lt 3 ]; do
|
||||
i=$(( $i + 1 ))
|
||||
i=$(( i + 1 ))
|
||||
TidaldlStatusCheck
|
||||
tidal-dl -q Normal -o "$audioPath"/incomplete -l "$tidalClientTestDownloadId" 2>&1 | tee -a "/config/logs/$logFileName"
|
||||
downloadCount=$(find "$audioPath"/incomplete -type f -regex ".*/.*\.\(flac\|opus\|m4a\|mp3\)" | wc -l)
|
||||
if [ $downloadCount -le 0 ]; then
|
||||
tidal-dl -q Normal -o "$audioPath/incomplete" -l "$tidalClientTestDownloadId" 2>&1
|
||||
downloadCount=$(find "$audioPath/incomplete" -type f -regex ".*/.*\.\(flac\|opus\|m4a\|mp3\)" | wc -l)
|
||||
if [ "$downloadCount" -le 0 ]; then
|
||||
continue
|
||||
else
|
||||
break
|
||||
fi
|
||||
done
|
||||
tidalClientTest="unknown"
|
||||
if [ $downloadCount -le 0 ]; then
|
||||
if [ -f /config/xdg/.tidal-dl.token.json ]; then
|
||||
rm /config/xdg/.tidal-dl.token.json
|
||||
if [ "$downloadCount" -le 0 ]; then
|
||||
if [ -f "${STATE_DIR}/xdg/.tidal-dl.token.json" ]; then
|
||||
rm "${STATE_DIR}/xdg/.tidal-dl.token.json"
|
||||
fi
|
||||
log "TIDAL :: ERROR :: Download failed"
|
||||
log "TIDAL :: ERROR :: You will need to re-authenticate on next script run..."
|
||||
log "TIDAL :: ERROR :: Exiting..."
|
||||
rm -rf "$audioPath"/incomplete/*
|
||||
rm -rf "$audioPath/incomplete/*"
|
||||
NotifyWebhook "Error" "TIDAL not authenticated but configured"
|
||||
tidalClientTest="failed"
|
||||
log "Script sleeping for $audioScriptInterval..."
|
||||
sleep $audioScriptInterval
|
||||
exit
|
||||
else
|
||||
rm -rf "$audioPath"/incomplete/*
|
||||
rm -rf "$audioPath/incomplete/*"
|
||||
log "TIDAL :: Successfully Verified"
|
||||
tidalClientTest="success"
|
||||
fi
|
||||
}
|
||||
|
||||
logDl () {
|
||||
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: \
|
||||
$lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: $1"
|
||||
}
|
||||
|
||||
DownloadProcess () {
|
||||
|
||||
# Required Input Data
|
||||
|
@ -412,107 +395,71 @@ DownloadProcess () {
|
|||
|
||||
# Create Required Directories
|
||||
if [ ! -d "$audioPath/incomplete" ]; then
|
||||
mkdir -p "$audioPath"/incomplete
|
||||
chmod 777 "$audioPath"/incomplete
|
||||
mkdir -p "$audioPath/incomplete"
|
||||
else
|
||||
rm -rf "$audioPath"/incomplete/*
|
||||
rm -rf "$audioPath/incomplete/*"
|
||||
fi
|
||||
|
||||
if [ ! -d "$audioPath/complete" ]; then
|
||||
mkdir -p "$audioPath"/complete
|
||||
chmod 777 "$audioPath"/complete
|
||||
mkdir -p "$audioPath/complete"
|
||||
else
|
||||
rm -rf "$audioPath"/complete/*
|
||||
rm -rf "$audioPath/complete/*"
|
||||
fi
|
||||
|
||||
|
||||
if [ ! -d "/config/extended/logs" ]; then
|
||||
mkdir -p /config/extended/logs
|
||||
chmod 777 /config/extended/logs
|
||||
fi
|
||||
|
||||
if [ ! -d "/config/extended/logs/downloaded" ]; then
|
||||
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
|
||||
logPaths=( "deezer" "tidal" "failed/deezer" "failed/tidal" )
|
||||
for p in "${!logPaths[@]}"; do
|
||||
if [ ! -d "${STATE_DIR}/extended/logs/downloaded/${logPaths[$p]}" ]; then
|
||||
mkdir -p "${STATE_DIR}/extended/logs/downloaded/${logPaths[$p]}"
|
||||
fi
|
||||
done
|
||||
|
||||
if [ ! -d "$importPath" ]; then
|
||||
mkdir -p "$importPath"
|
||||
chmod 777 "$importPath"
|
||||
fi
|
||||
|
||||
AddDownloadClient
|
||||
|
||||
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
|
||||
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: ERROR :: Previously Downloaded..."
|
||||
if find "$audioPath/complete" -type d -iname "$lidarrArtistNameSanitized-$downloadedAlbumTitleClean ($3)-*-$1-$2" | read -r; then
|
||||
logDl "ERROR :: Previously Downloaded..."
|
||||
return
|
||||
fi
|
||||
|
||||
# check for log file
|
||||
if [ "$2" == "DEEZER" ]; then
|
||||
if [ -f /config/extended/logs/downloaded/deezer/$1 ]; then
|
||||
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: ERROR :: Previously Downloaded ($1)..."
|
||||
return
|
||||
fi
|
||||
if [ -f /config/extended/logs/downloaded/failed/deezer/$1 ]; then
|
||||
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: ERROR :: Previously Attempted Download ($1)..."
|
||||
return
|
||||
fi
|
||||
fi
|
||||
|
||||
for i in "DEEZER" "TIDAL"; do
|
||||
if [ "$2" == $i ]; then
|
||||
if [ -f "${STATE_DIR}/extended/logs/downloaded/${i,,}/$1" ]; then
|
||||
logDl "ERROR :: Previously Downloaded ($1)..."
|
||||
return
|
||||
fi
|
||||
if [ -f "${STATE_DIR}/extended/logs/downloaded/failed/${i,,}/$1" ]; then
|
||||
logDl "ERROR :: Previously Attempted Download ($1)..."
|
||||
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
|
||||
until false
|
||||
do
|
||||
downloadTry=$(( $downloadTry + 1 ))
|
||||
if [ -f /temp-download ]; then
|
||||
rm /temp-download
|
||||
downloadTry=$(( downloadTry + 1 ))
|
||||
if [ -f /tmp/temp-download ]; then
|
||||
rm /tmp/temp-download
|
||||
sleep 0.1
|
||||
fi
|
||||
touch /temp-download
|
||||
touch /tmp/temp-download
|
||||
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 [ -z $arlToken ]; then
|
||||
DownloadClientFreyr $1
|
||||
if [ -z "$arlToken" ]; then
|
||||
DownloadClientFreyr "$1"
|
||||
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
|
||||
|
||||
if [ -d "/tmp/deemix-imgs" ]; then
|
||||
|
@ -521,49 +468,43 @@ DownloadProcess () {
|
|||
|
||||
# Verify Client Works...
|
||||
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
|
||||
deemixFail=$(( $deemixFail + 1))
|
||||
deemixFail=$(( deemixFail + 1))
|
||||
else
|
||||
# Reset for successful download
|
||||
deemixFail=0
|
||||
fi
|
||||
|
||||
# If download failes X times, exit with error...
|
||||
if [ $deemixFail -eq $failedDownloadAttemptThreshold ]; then
|
||||
if [ -z $arlToken ]; then
|
||||
rm -rf "$audioPath"/incomplete/*
|
||||
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: All $failedDownloadAttemptThreshold Download Attempts failed, skipping..."
|
||||
else
|
||||
DeezerClientTest
|
||||
if [ "$deezerClientTest" == "success" ]; then
|
||||
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: All $failedDownloadAttemptThreshold Download Attempts failed, skipping..."
|
||||
deemixFail=0
|
||||
fi
|
||||
if [ $deemixFail -eq $failedDownloadAttemptThreshold ] && [ -z "$arlToken" ]; then
|
||||
rm -rf "$audioPath"/incomplete/*
|
||||
logDl "All $failedDownloadAttemptThreshold Download Attempts failed, skipping..."
|
||||
else
|
||||
DeezerClientTest
|
||||
if [ "$deezerClientTest" == "success" ]; then
|
||||
logDl "All $failedDownloadAttemptThreshold Download Attempts failed, skipping..."
|
||||
deemixFail=0
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$2" == "DEEZER" ]; then
|
||||
if [ $deemixFail -eq $failedDownloadAttemptThreshold ]; then
|
||||
if [ -z $arlToken ]; then
|
||||
DownloadClientFreyr $1
|
||||
else
|
||||
deemix -b $deemixQuality -p "$audioPath"/incomplete "https://www.deezer.com/album/$1" 2>&1 | tee -a "/config/logs/$logFileName"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
if [ "$2" == "DEEZER" ] && [ $deemixFail -eq $failedDownloadAttemptThreshold ] && [ -z "$arlToken" ]; then
|
||||
DownloadClientFreyr "$1"
|
||||
else
|
||||
deemix -b $deemixQuality -p "$audioPath"/incomplete "https://www.deezer.com/album/$1" 2>&1
|
||||
fi
|
||||
|
||||
if [ "$2" == "TIDAL" ]; then
|
||||
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...
|
||||
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
|
||||
tidaldlFail=$(( $tidaldlFail + 1))
|
||||
tidaldlFail=$(( tidaldlFail + 1))
|
||||
else
|
||||
# Reset for successful download
|
||||
tidaldlFail=0
|
||||
|
@ -571,29 +512,29 @@ DownloadProcess () {
|
|||
|
||||
# If download failes X times, exit with error...
|
||||
if [ $tidaldlFail -eq $failedDownloadAttemptThreshold ]; then
|
||||
TidalClientTest
|
||||
if [ "$tidalClientTest" == "success" ]; then
|
||||
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: All $failedDownloadAttemptThreshold Download Attempts failed, skipping..."
|
||||
TidalClientTest
|
||||
if [ "$tidalClientTest" == "success" ]; then
|
||||
logDl "All $failedDownloadAttemptThreshold Download Attempts failed, skipping..."
|
||||
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"
|
||||
if [ "$verifiedFlacFile" == "0" ]; then
|
||||
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Flac Verification :: $file :: Verified"
|
||||
logDl "Flac Verification :: $file :: Verified"
|
||||
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"
|
||||
fi
|
||||
done
|
||||
|
||||
downloadCount=$(find "$audioPath"/incomplete/ -type f -regex ".*/.*\.\(flac\|m4a\|mp3\)" | wc -l)
|
||||
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"
|
||||
else
|
||||
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Success"
|
||||
logDl "Success"
|
||||
completedVerification="true"
|
||||
fi
|
||||
|
||||
|
@ -605,13 +546,13 @@ DownloadProcess () {
|
|||
fi
|
||||
break
|
||||
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
|
||||
fi
|
||||
done
|
||||
|
||||
# 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 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)
|
||||
if [ "$downloadCount" -ne "$5" ]; then
|
||||
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: ERROR :: All download Attempts failed..."
|
||||
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Logging $1 as failed download..."
|
||||
logDl "ERROR :: All download Attempts failed..."
|
||||
logDl "Logging $1 as failed download..."
|
||||
|
||||
|
||||
if [ "$2" == "DEEZER" ]; then
|
||||
touch /config/extended/logs/downloaded/failed/deezer/$1
|
||||
fi
|
||||
if [ "$2" == "TIDAL" ]; then
|
||||
touch /config/extended/logs/downloaded/failed/tidal/$1
|
||||
fi
|
||||
for awa in "DEEZER" "TIDAL"; do
|
||||
[ "$2" == $awa ] \
|
||||
&& touch "${STATE_DIR}/extended/logs/downloaded/failed/${awa,,}/$1"
|
||||
done
|
||||
return
|
||||
fi
|
||||
|
||||
# Log Completed Download
|
||||
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Logging $1 as successfully downloaded..."
|
||||
if [ "$2" == "DEEZER" ]; then
|
||||
touch /config/extended/logs/downloaded/deezer/$1
|
||||
fi
|
||||
if [ "$2" == "TIDAL" ]; then
|
||||
touch /config/extended/logs/downloaded/tidal/$1
|
||||
fi
|
||||
logDl "Logging $1 as successfully downloaded..."
|
||||
for awa in "DEEZER" "TIDAL"; do
|
||||
[ "$2" == $awa ] \
|
||||
&& touch "${STATE_DIR}/extended/logs/downloaded/${awa,,}/$1"
|
||||
done
|
||||
|
||||
# Tag with beets
|
||||
if [ "$enableBeetsTagging" == "true" ]; then
|
||||
if [ -f /config/extended/beets-error ]; then
|
||||
rm /config/extended/beets-error
|
||||
fi
|
||||
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Processing files with beets..."
|
||||
[ -f "${STATE_DIR}/extended/beets-error" ] && rm "${STATE_DIR}/extended/beets-error"
|
||||
logDl "Processing files with beets..."
|
||||
ProcessWithBeets "$audioPath/incomplete"
|
||||
fi
|
||||
|
||||
|
@ -658,33 +593,30 @@ DownloadProcess () {
|
|||
find "$audioPath/incomplete" -type f -iname "*.flac" -print0 | while IFS= read -r -d '' file; do
|
||||
lrcFile="${file%.*}.lrc"
|
||||
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 --set-tag-from-file="Lyrics=$lrcFile" "$file"
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "$audioFormat" != "native" ]; then
|
||||
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: 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
|
||||
logDl "Converting Flac Audio to ${audioFormat^^} ($audioBitrateText)"
|
||||
|
||||
if [ "$audioFormat" == "mp3" ]; then
|
||||
options="-c:a libmp3lame -b:a ${audioBitrate}k"
|
||||
extension="mp3"
|
||||
fi
|
||||
[ "$audioFormat" == "opus" ] \
|
||||
&& options="-c:a libopus -b:a ${audioBitrate}k -application audio -vbr off" \
|
||||
&& extension=$audioFormat
|
||||
|
||||
if [ "$audioFormat" == "aac" ]; then
|
||||
options="-c:a aac -b:a ${audioBitrate}k -movflags faststart"
|
||||
extension="m4a"
|
||||
fi
|
||||
[ "$audioFormat" == "mp3" ] \
|
||||
&& options="-c:a libmp3lame -b:a ${audioBitrate}k" \
|
||||
&& extension=$audioFormat
|
||||
|
||||
if [ "$audioFormat" == "alac" ]; then
|
||||
options="-c:a alac -movflags faststart"
|
||||
extension="m4a"
|
||||
fi
|
||||
[ "$audioFormat" == "aac" ] \
|
||||
&& options="-c:a aac -b:a ${audioBitrate}k -movflags faststart" \
|
||||
&& extension="m4a"
|
||||
|
||||
[ "$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
|
||||
file="${audio}"
|
||||
|
@ -693,20 +625,20 @@ DownloadProcess () {
|
|||
filenamenoext="${filename%.*}"
|
||||
if [ "$audioFormat" == "opus" ]; 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"
|
||||
else
|
||||
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: $filename :: ERROR :: Conversion Failed"
|
||||
logDl "$filename :: ERROR :: Conversion Failed"
|
||||
rm "$foldername/${filenamenoext}.$extension"
|
||||
fi
|
||||
continue
|
||||
fi
|
||||
|
||||
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"
|
||||
if ffmpeg -loglevel warning -hide_banner -nostats -i "$file" -n -vn "$options" "$foldername/${filenamenoext}.$extension" < /dev/null; then
|
||||
logDl "$filename :: Conversion to $audioFormat ($audioBitrateText) successful"
|
||||
rm "$file"
|
||||
else
|
||||
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: $filename :: ERROR :: Conversion Failed"
|
||||
logDl "$filename :: ERROR :: Conversion Failed"
|
||||
rm "$foldername/${filenamenoext}.$extension"
|
||||
fi
|
||||
done
|
||||
|
@ -716,10 +648,10 @@ DownloadProcess () {
|
|||
if [ "$enableReplaygainTags" == "true" ]; then
|
||||
AddReplaygainTags "$audioPath/incomplete"
|
||||
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
|
||||
|
||||
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})"
|
||||
|
||||
find "$audioPath/incomplete" -type f -regex ".*/.*\.\(flac\|opus\|m4a\|mp3\)" -print0 | while IFS= read -r -d '' audio; do
|
||||
|
@ -754,172 +686,146 @@ DownloadProcess () {
|
|||
ProcessWithBeets () {
|
||||
# Input
|
||||
# $1 Download Folder to process
|
||||
if [ -f /config/extended/beets-library.blb ]; then
|
||||
rm /config/extended/beets-library.blb
|
||||
sleep 0.5
|
||||
fi
|
||||
if [ -f /config/extended/beets.log ]; then
|
||||
rm /config/extended/beets.log
|
||||
sleep 0.5
|
||||
fi
|
||||
for awa in "extended/beets-library.blb" "extended/beets.log" "beets-match"; do
|
||||
[ -f "${STATE_DIR}/${awa}" ] \
|
||||
&& rm "${STATE_DIR}/${awa}" \
|
||||
&& sleep 0.5
|
||||
done
|
||||
|
||||
if [ -f "/config/beets-match" ]; then
|
||||
rm "/config/beets-match"
|
||||
sleep 0.5
|
||||
fi
|
||||
touch "/config/beets-match"
|
||||
sleep 0.5
|
||||
|
||||
beet -c /config/extended/beets-config.yaml -l /config/extended/beets-library.blb -d "$1" import -qC "$1"
|
||||
if [ $(find "$1" -type f -regex ".*/.*\.\(flac\|opus\|m4a\|mp3\)" -newer "/config/beets-match" | wc -l) -gt 0 ]; then
|
||||
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"
|
||||
beet -c "${STATE_DIR}/extended/beets-config.yaml" \
|
||||
-l "${STATE_DIR}/extended/beets-library.blb" -d "$1" import -qC "$1"
|
||||
|
||||
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
|
||||
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
|
||||
metaflac --remove-tag=ALBUMARTIST "$file"
|
||||
metaflac --remove-tag=ALBUMARTIST_CREDIT "$file"
|
||||
metaflac --remove-tag=ALBUM_ARTIST "$file"
|
||||
metaflac --remove-tag="ALBUM ARTIST" "$file"
|
||||
# artist
|
||||
metaflac --remove-tag=ARTIST "$file"
|
||||
metaflac --remove-tag=ARTIST_CREDIT "$file"
|
||||
if [ ! -z "$getArtistCredit" ]; then
|
||||
metaflac --set-tag=ARTIST="$getArtistCredit" "$file"
|
||||
metaflac \
|
||||
--remove-tag=ALBUMARTIST --remove-tag=ALBUMARTIST_CREDIT --remove-tag=ALBUM_ARTIST \
|
||||
--remove-tag="ALBUM ARTIST" --remove-tag=ARTIST --remove-tag=ARTIST_CREDIT \
|
||||
--remove-tag=ARTISTSORT --remove-tag=COMPOSERSORT --remove-tag=ALBUMARTISTSORT \
|
||||
--remove-tag=MUSICBRAINZ_ARTISTID --remove-tag=MUSICBRAINZ_ALBUMARTISTID \
|
||||
"$file"
|
||||
|
||||
metaflac \
|
||||
--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
|
||||
metaflac --set-tag=ARTIST="$lidarrArtistName" "$file"
|
||||
fi
|
||||
# sorts
|
||||
metaflac --remove-tag=ARTISTSORT "$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"
|
||||
|
||||
log "FIXED : $file"
|
||||
done
|
||||
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
|
||||
fi
|
||||
|
||||
if [ -f "/config/beets-match" ]; then
|
||||
rm "/config/beets-match"
|
||||
sleep 0.1
|
||||
fi
|
||||
[ -f "${STATE_DIR}/beets-match" ] \
|
||||
&& rm "${STATE_DIR}/beets-match" \
|
||||
&& sleep 0.1
|
||||
|
||||
# Get file metadata
|
||||
GetFile=$(find "$audioPath/incomplete" -type f -regex ".*/.*\.\(flac\|opus\|m4a\|mp3\)" | head -n1)
|
||||
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
|
||||
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
|
||||
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
|
||||
|
||||
# Get Musicbrainz Release Group ID and Album Artist ID from tagged file
|
||||
if [ "$extension" == "flac" ] || [ "$extension" == "opus" ]; then
|
||||
matchedTagsAlbumReleaseGroupId="$(echo $matchedTags | jq -r ".MUSICBRAINZ_RELEASEGROUPID")"
|
||||
matchedTagsAlbumArtistId="$(echo $matchedTags | jq -r ".MUSICBRAINZ_ALBUMARTISTID")"
|
||||
matchedTagsAlbumReleaseGroupId="$(echo "$matchedTags" | jq -r ".MUSICBRAINZ_RELEASEGROUPID")"
|
||||
matchedTagsAlbumArtistId="$(echo "$matchedTags" | jq -r ".MUSICBRAINZ_ALBUMARTISTID")"
|
||||
elif [ "$extension" == "mp3" ] || [ "$extension" == "m4a" ]; then
|
||||
matchedTagsAlbumReleaseGroupId="$(echo $matchedTags | jq -r '."MusicBrainz Release Group Id"')"
|
||||
matchedLidarrAlbumArtistId="$(echo $matchedTags | jq -r '."MusicBrainz Ablum Artist Id"')"
|
||||
matchedTagsAlbumReleaseGroupId="$(echo "$matchedTags" | jq -r '."MusicBrainz Release Group Id"')"
|
||||
matchedLidarrAlbumArtistId="$(echo "$matchedTags" | jq -r '."MusicBrainz Ablum Artist Id"')"
|
||||
fi
|
||||
|
||||
if [ ! -d "/config/extended/logs/downloaded/musicbrainz_matched" ]; then
|
||||
mkdir -p "/config/extended/logs/downloaded/musicbrainz_matched"
|
||||
chmod 777 "/config/extended/logs/downloaded/musicbrainz_matched"
|
||||
fi
|
||||
[ ! -d "${STATE_DIR}/extended/logs/downloaded/musicbrainz_matched" ] \
|
||||
&& mkdir -p "${STATE_DIR}/extended/logs/downloaded/musicbrainz_matched"
|
||||
|
||||
if [ ! -f "/config/extended/logs/downloaded/musicbrainz_matched/$matchedTagsAlbumReleaseGroupId" ]; then
|
||||
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Marking MusicBrainz Release Group ($matchedTagsAlbumReleaseGroupId) as successfully downloaded..."
|
||||
touch "/config/extended/logs/downloaded/musicbrainz_matched/$matchedTagsAlbumReleaseGroupId"
|
||||
|
||||
fi
|
||||
[ ! -f "${STATE_DIR}/extended/logs/downloaded/musicbrainz_matched/$matchedTagsAlbumReleaseGroupId" ] \
|
||||
&& log "Marking MusicBrainz Release Group ($matchedTagsAlbumReleaseGroupId) as successfully downloaded..." \
|
||||
&& touch "/config/extended/logs/downloaded/musicbrainz_matched/$matchedTagsAlbumReleaseGroupId"
|
||||
|
||||
}
|
||||
|
||||
DownloadQualityCheck () {
|
||||
|
||||
if [ "$requireQuality" == "true" ]; then
|
||||
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Checking for unwanted files"
|
||||
[ "$requireQuality" != "true" ] \
|
||||
&& logDl "Skipping download quality check... (enable by setting: requireQuality=true)" \
|
||||
&& return
|
||||
|
||||
if [ "$audioFormat" != "native" ]; then
|
||||
if find "$1" -type f -regex ".*/.*\.\(opus\|m4a\|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
|
||||
if [ "$audioFormat" == "native" ]; then
|
||||
if [ "$audioBitrate" == "master" ]; then
|
||||
if find "$1" -type f -regex ".*/.*\.\(opus\|m4a\|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
|
||||
elif [ "$audioBitrate" == "lossless" ]; then
|
||||
if find "$1" -type f -regex ".*/.*\.\(opus\|m4a\|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
|
||||
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
|
||||
logDl "Checking for unwanted files"
|
||||
|
||||
local deezer
|
||||
local tidal
|
||||
local other
|
||||
local notNative
|
||||
notNative=$([ "$audioFormat" != "native" ] \
|
||||
&& find "$1" -type f -regex ".*/.*\.\(opus\|m4a\|mp3\)" | read -r
|
||||
)
|
||||
other=$([ "$audioBitrate" == "master" ] || [ "$audioBitrate" == "lossless" ] \
|
||||
&& find "$1" -type f -regex ".*/.*\.\(opus\|m4a\|mp3\)" | read -r
|
||||
)
|
||||
deezer=$([ "$2" == "DEEZER" ] \
|
||||
&& find "$1" -type f -regex ".*/.*\.\(opus\|m4a\|flac\)" | read -r
|
||||
)
|
||||
tidal=$([ "$2" == "TIDAL" ] \
|
||||
&& find "$1" -type f -regex ".*/.*\.\(opus\|flac\|mp3\)" | read -r
|
||||
)
|
||||
|
||||
if $notNative || $deezer || $tidal || $other; then
|
||||
logDl "Unwanted files found!"
|
||||
logDl "Performing cleanup..."
|
||||
rm "$1"/*
|
||||
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
|
||||
}
|
||||
|
||||
AddReplaygainTags () {
|
||||
# Input Data
|
||||
# $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
|
||||
}
|
||||
|
||||
NotifyLidarrForImport () {
|
||||
LidarrProcessIt=$(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"
|
||||
curl -s "$arrUrl/api/v1/command" --header "X-Api-Key:" "${arrApiKey}" -H "Content-Type: application/json" --data "{\"name\":\"DownloadedAlbumsScan\", \"path\":\"$1\"}"
|
||||
logDl "LIDARR IMPORT NOTIFICATION SENT! :: $1"
|
||||
}
|
||||
|
||||
DeemixClientSetup () {
|
||||
log "DEEZER :: Verifying deemix configuration"
|
||||
if [ ! -z "$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')"
|
||||
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')"
|
||||
# Create directories
|
||||
mkdir -p /config/xdg/deemix
|
||||
if [ -f "/config/xdg/deemix/.arl" ]; then
|
||||
rm "/config/xdg/deemix/.arl"
|
||||
mkdir -p "${STATE_DIR}/xdg/deemix"
|
||||
if [ -f "${STATE_DIR}/xdg/deemix/.arl" ]; then
|
||||
rm "${STATE_DIR}/xdg/deemix/.arl"
|
||||
fi
|
||||
if [ ! -f "/config/xdg/deemix/.arl" ]; then
|
||||
echo -n "$arlToken" > "/config/xdg/deemix/.arl"
|
||||
if [ ! -f "${STATE_DIR}/xdg/deemix/.arl" ]; then
|
||||
echo -n "$arlToken" > "/${STATE_DIR}/xdg/deemix/.arl"
|
||||
fi
|
||||
log "DEEZER :: ARL Token: Configured"
|
||||
else
|
||||
|
@ -1783,9 +1689,6 @@ AudioProcess () {
|
|||
|
||||
Configuration
|
||||
|
||||
# Perform NotFound Folder Cleanup process
|
||||
NotFoundFolderCleaner
|
||||
|
||||
LidarrRootFolderCheck
|
||||
|
||||
DownloadFormat
|
||||
|
@ -1821,14 +1724,13 @@ AudioProcess () {
|
|||
|
||||
log "Starting Script...."
|
||||
for (( ; ; )); do
|
||||
let i++
|
||||
logfileSetup
|
||||
verifyConfig
|
||||
(( i++ )) || true
|
||||
verifyConfig
|
||||
getArrAppInfo
|
||||
verifyApiAccess
|
||||
AudioProcess
|
||||
log "Script sleeping for $audioScriptInterval..."
|
||||
sleep $audioScriptInterval
|
||||
sleep "$audioScriptInterval"
|
||||
done
|
||||
|
||||
exit
|
||||
|
|
Loading…
Reference in a new issue