Merge remote-tracking branch 'origin/main'
# Conflicts: # lidarr/extended.conf
This commit is contained in:
commit
550ebb0620
9 changed files with 153 additions and 158 deletions
|
@ -1,5 +1,5 @@
|
||||||
#!/usr/bin/with-contenv bash
|
#!/usr/bin/with-contenv bash
|
||||||
scriptVersion="2.24"
|
scriptVersion="2.32"
|
||||||
scriptName="Audio"
|
scriptName="Audio"
|
||||||
|
|
||||||
### Import Settings
|
### Import Settings
|
||||||
|
@ -35,6 +35,10 @@ verifyConfig () {
|
||||||
deezerClientTestDownloadId="197472472"
|
deezerClientTestDownloadId="197472472"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -z "$ignoreInstrumentalRelease" ]; then
|
||||||
|
ignoreInstrumentalRelease="true"
|
||||||
|
fi
|
||||||
|
|
||||||
audioPath="$downloadPath/audio"
|
audioPath="$downloadPath/audio"
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -665,7 +669,7 @@ DownloadProcess () {
|
||||||
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 | egrep -i -E -o "\.{1}\w*$" | sed 's/\.//g')"
|
||||||
downloadedAlbumFolder="$lidarrArtistNameSanitized-$downloadedAlbumTitleClean ($3)-${albumquality^^}-$1-$2"
|
downloadedAlbumFolder="$lidarrArtistNameSanitized-${downloadedAlbumTitleClean:0:100} ($3)-${albumquality^^}-$1-$2"
|
||||||
|
|
||||||
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
|
||||||
file="${audio}"
|
file="${audio}"
|
||||||
|
@ -1232,8 +1236,8 @@ SearchProcess () {
|
||||||
releaseDisambiguation=" ($releaseDisambiguation)"
|
releaseDisambiguation=" ($releaseDisambiguation)"
|
||||||
fi
|
fi
|
||||||
echo "${releaseTitle}${releaseDisambiguation}" >> /temp-release-list
|
echo "${releaseTitle}${releaseDisambiguation}" >> /temp-release-list
|
||||||
echo "$lidarrAlbumTitle" >> /temp-release-list
|
|
||||||
done
|
done
|
||||||
|
echo "$lidarrAlbumTitle" >> /temp-release-list
|
||||||
|
|
||||||
# Get Release Titles
|
# Get Release Titles
|
||||||
OLDIFS="$IFS"
|
OLDIFS="$IFS"
|
||||||
|
@ -1265,12 +1269,26 @@ SearchProcess () {
|
||||||
releaseProcessCount=$(( $releaseProcessCount + 1))
|
releaseProcessCount=$(( $releaseProcessCount + 1))
|
||||||
lidarrReleaseTitle="${lidarrReleaseTitles[$title]}"
|
lidarrReleaseTitle="${lidarrReleaseTitles[$title]}"
|
||||||
lidarrAlbumReleaseTitleClean=$(echo "$lidarrReleaseTitle" | sed -e "s%[^[:alpha:][:digit:]]%%g" -e "s/ */ /g" | sed 's/^[.]*//' | sed 's/[.]*$//g' | sed 's/^ *//g' | sed 's/ *$//g')
|
lidarrAlbumReleaseTitleClean=$(echo "$lidarrReleaseTitle" | sed -e "s%[^[:alpha:][:digit:]]%%g" -e "s/ */ /g" | sed 's/^[.]*//' | sed 's/[.]*$//g' | sed 's/^ *//g' | sed 's/ *$//g')
|
||||||
|
lidarrAlbumReleaseTitleClean="${lidarrAlbumReleaseTitleClean:0:130}"
|
||||||
lidarrAlbumReleaseTitleSearchClean="$(echo "$lidarrReleaseTitle" | sed -e "s%[^[:alpha:][:digit:]]% %g" -e "s/ */ /g" | sed 's/^[.]*//' | sed 's/[.]*$//g' | sed 's/^ *//g' | sed 's/ *$//g')"
|
lidarrAlbumReleaseTitleSearchClean="$(echo "$lidarrReleaseTitle" | sed -e "s%[^[:alpha:][:digit:]]% %g" -e "s/ */ /g" | sed 's/^[.]*//' | sed 's/[.]*$//g' | sed 's/^ *//g' | sed 's/ *$//g')"
|
||||||
lidarrAlbumReleaseTitleFirstWord="$(echo "$lidarrReleaseTitle" | awk '{ print $1 }')"
|
lidarrAlbumReleaseTitleFirstWord="$(echo "$lidarrReleaseTitle" | awk '{ print $1 }')"
|
||||||
lidarrAlbumReleaseTitleFirstWord="${lidarrAlbumReleaseTitleFirstWord:0:3}"
|
lidarrAlbumReleaseTitleFirstWord="${lidarrAlbumReleaseTitleFirstWord:0:3}"
|
||||||
albumTitleSearch="$(jq -R -r @uri <<<"${lidarrAlbumReleaseTitleSearchClean}")"
|
albumTitleSearch="$(jq -R -r @uri <<<"${lidarrAlbumReleaseTitleSearchClean}")"
|
||||||
#echo "Debugging :: $loopCount :: $releaseProcessCount :: $lidarrArtistForeignArtistId :: $lidarrReleaseTitle :: $lidarrAlbumReleasesMinTrackCount-$lidarrAlbumReleasesMaxTrackCount :: $lidarrAlbumReleaseTitleFirstWord :: $albumArtistNameSearch :: $albumTitleSearch"
|
#echo "Debugging :: $loopCount :: $releaseProcessCount :: $lidarrArtistForeignArtistId :: $lidarrReleaseTitle :: $lidarrAlbumReleasesMinTrackCount-$lidarrAlbumReleasesMaxTrackCount :: $lidarrAlbumReleaseTitleFirstWord :: $albumArtistNameSearch :: $albumTitleSearch"
|
||||||
|
|
||||||
|
|
||||||
|
if echo "$lidarrAlbumTitle" | grep -i "instrumental" | read; then
|
||||||
|
sleep 0.01
|
||||||
|
else
|
||||||
|
# ignore instrumental releases
|
||||||
|
if [ "$ignoreInstrumentalRelease" == "true" ]; then
|
||||||
|
if echo "$lidarrReleaseTitle" | grep -i "instrumental" | read; then
|
||||||
|
log "$page :: $wantedAlbumListSource :: $processNumber of $wantedListAlbumTotal :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Instrumental Release Found, Skipping..."
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
# Skip Various Artists album search that is not supported...
|
# Skip Various Artists album search that is not supported...
|
||||||
if [ "$lidarrArtistForeignArtistId" != "89ad4ac3-39f7-470e-963a-56509c546377" ]; then
|
if [ "$lidarrArtistForeignArtistId" != "89ad4ac3-39f7-470e-963a-56509c546377" ]; then
|
||||||
|
|
||||||
|
@ -1414,21 +1432,11 @@ ArtistDeezerSearch () {
|
||||||
deezerAlbumData="$(echo "$deezerArtistAlbumsData" | jq -r "select(.id==$deezerAlbumID)")"
|
deezerAlbumData="$(echo "$deezerArtistAlbumsData" | jq -r "select(.id==$deezerAlbumID)")"
|
||||||
deezerAlbumTitle="$(echo "$deezerAlbumData" | jq -r ".title")"
|
deezerAlbumTitle="$(echo "$deezerAlbumData" | jq -r ".title")"
|
||||||
deezerAlbumTitleClean="$(echo ${deezerAlbumTitle} | sed -e "s%[^[:alpha:][:digit:]]%%g" -e "s/ */ /g" | sed 's/^[.]*//' | sed 's/[.]*$//g' | sed 's/^ *//g' | sed 's/ *$//g')"
|
deezerAlbumTitleClean="$(echo ${deezerAlbumTitle} | sed -e "s%[^[:alpha:][:digit:]]%%g" -e "s/ */ /g" | sed 's/^[.]*//' | sed 's/[.]*$//g' | sed 's/^ *//g' | sed 's/ *$//g')"
|
||||||
# String Character Count test, quicker than the levenshtein method to allow faster processing
|
deezerAlbumTitleClean="${deezerAlbumTitleClean:0:130}"
|
||||||
characterMath=$(( ${#deezerAlbumTitleClean} - ${#lidarrAlbumReleaseTitleClean} ))
|
|
||||||
if [ "$characterMath" -gt "$matchDistance" ]; then
|
|
||||||
log "$1 :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Artist Search :: Deezer :: $type :: $lidarrReleaseTitle :: $lidarrAlbumReleaseTitleClean vs $deezerAlbumTitleClean :: Not a match..."
|
|
||||||
continue
|
|
||||||
elif [ "$characterMath" -lt "0" ]; then
|
|
||||||
log "$1 :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Artist Search :: Deezer :: $type :: $lidarrReleaseTitle :: $lidarrAlbumReleaseTitleClean vs $deezerAlbumTitleClean :: Not a match..."
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
GetDeezerAlbumInfo "$deezerAlbumID"
|
GetDeezerAlbumInfo "$deezerAlbumID"
|
||||||
deezerAlbumData="$(cat "/config/extended/cache/deezer/$deezerAlbumID.json")"
|
deezerAlbumData="$(cat "/config/extended/cache/deezer/$deezerAlbumID.json")"
|
||||||
deezerAlbumTrackCount="$(echo "$deezerAlbumData" | jq -r .nb_tracks)"
|
deezerAlbumTrackCount="$(echo "$deezerAlbumData" | jq -r .nb_tracks)"
|
||||||
deezerAlbumExplicitLyrics="$(echo "$deezerAlbumData" | jq -r .explicit_lyrics)"
|
deezerAlbumExplicitLyrics="$(echo "$deezerAlbumData" | jq -r .explicit_lyrics)"
|
||||||
deezerAlbumTitle="$(echo "$deezerAlbumData"| jq -r .title)"
|
|
||||||
deezerAlbumTitleClean="$(echo "$deezerAlbumTitle" | sed -e "s%[^[:alpha:][:digit:]]%%g" -e "s/ */ /g" | sed 's/^[.]*//' | sed 's/[.]*$//g' | sed 's/^ *//g' | sed 's/ *$//g')"
|
|
||||||
downloadedReleaseDate="$(echo "$deezerAlbumData" | jq -r .release_date)"
|
downloadedReleaseDate="$(echo "$deezerAlbumData" | jq -r .release_date)"
|
||||||
downloadedReleaseYear="${downloadedReleaseDate:0:4}"
|
downloadedReleaseYear="${downloadedReleaseDate:0:4}"
|
||||||
|
|
||||||
|
@ -1443,8 +1451,8 @@ ArtistDeezerSearch () {
|
||||||
fi
|
fi
|
||||||
|
|
||||||
log "$1 :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Artist Search :: Deezer :: $type :: $lidarrReleaseTitle :: $lidarrAlbumReleaseTitleClean vs $deezerAlbumTitleClean :: Checking for Match..."
|
log "$1 :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Artist Search :: Deezer :: $type :: $lidarrReleaseTitle :: $lidarrAlbumReleaseTitleClean vs $deezerAlbumTitleClean :: Checking for Match..."
|
||||||
log "$1 :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Artist Search :: Deezer :: $type :: $lidarrReleaseTitle :: $lidarrAlbumReleaseTitleClean vs $deezerAlbumTitleClean :: Calculating Similarity..."
|
log "$1 :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Artist Search :: Deezer :: $type :: $lidarrReleaseTitle :: $lidarrAlbumReleaseTitleClean vs $deezerAlbumTitleClean :: Calculating Damerau-Levenshtein distance..."
|
||||||
diff=$(levenshtein "${lidarrAlbumReleaseTitleClean,,}" "${deezerAlbumTitleClean,,}" 2>/dev/null)
|
diff=$(python -c "from pyxdameraulevenshtein import damerau_levenshtein_distance; print(damerau_levenshtein_distance(\"${lidarrAlbumReleaseTitleClean,,}\", \"${deezerAlbumTitleClean,,}\"))" 2>/dev/null)
|
||||||
if [ "$diff" -le "$matchDistance" ]; then
|
if [ "$diff" -le "$matchDistance" ]; then
|
||||||
log "$1 :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Artist Search :: Deezer :: $type :: $lidarrReleaseTitle :: $lidarrAlbumReleaseTitleClean vs $deezerAlbumTitleClean :: Deezer MATCH Found :: Calculated Difference = $diff"
|
log "$1 :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Artist Search :: Deezer :: $type :: $lidarrReleaseTitle :: $lidarrAlbumReleaseTitleClean vs $deezerAlbumTitleClean :: Deezer MATCH Found :: Calculated Difference = $diff"
|
||||||
|
|
||||||
|
@ -1452,6 +1460,8 @@ ArtistDeezerSearch () {
|
||||||
log "$1 :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Artist Search :: Deezer :: $type :: $lidarrReleaseTitle :: Downloading $deezerAlbumTrackCount Tracks :: $deezerAlbumTitle ($downloadedReleaseYear)"
|
log "$1 :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Artist Search :: Deezer :: $type :: $lidarrReleaseTitle :: Downloading $deezerAlbumTrackCount Tracks :: $deezerAlbumTitle ($downloadedReleaseYear)"
|
||||||
|
|
||||||
DownloadProcess "$deezerAlbumID" "DEEZER" "$downloadedReleaseYear" "$deezerAlbumTitle" "$deezerAlbumTrackCount"
|
DownloadProcess "$deezerAlbumID" "DEEZER" "$downloadedReleaseYear" "$deezerAlbumTitle" "$deezerAlbumTrackCount"
|
||||||
|
else
|
||||||
|
log "$1 :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Artist Search :: Deezer :: $type :: $lidarrReleaseTitle :: $lidarrAlbumReleaseTitleClean vs $deezerAlbumTitleClean :: Deezer Match Not Found :: Calculated Difference ($diff) greater than $matchDistance"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# End search if lidarr was successfully notified for import
|
# End search if lidarr was successfully notified for import
|
||||||
|
@ -1464,7 +1474,7 @@ ArtistDeezerSearch () {
|
||||||
FuzzyDeezerSearch () {
|
FuzzyDeezerSearch () {
|
||||||
# Required Inputs
|
# Required Inputs
|
||||||
# $1 Process ID
|
# $1 Process ID
|
||||||
# $3 Lyric Type (explicit = true, clean = false)
|
# $2 Lyric Type (explicit = true, clean = false)
|
||||||
|
|
||||||
if [ "$2" == "true" ]; then
|
if [ "$2" == "true" ]; then
|
||||||
type="Explicit"
|
type="Explicit"
|
||||||
|
@ -1494,21 +1504,12 @@ FuzzyDeezerSearch () {
|
||||||
deezerAlbumTitle="$(echo "$deezerAlbumData" | jq -r ".title")"
|
deezerAlbumTitle="$(echo "$deezerAlbumData" | jq -r ".title")"
|
||||||
deezerAlbumTitle="$(echo "$deezerAlbumTitle" | head -n1)"
|
deezerAlbumTitle="$(echo "$deezerAlbumTitle" | head -n1)"
|
||||||
deezerAlbumTitleClean="$(echo "$deezerAlbumTitle" | sed -e "s%[^[:alpha:][:digit:]]%%g" -e "s/ */ /g" | sed 's/^[.]*//' | sed 's/[.]*$//g' | sed 's/^ *//g' | sed 's/ *$//g')"
|
deezerAlbumTitleClean="$(echo "$deezerAlbumTitle" | sed -e "s%[^[:alpha:][:digit:]]%%g" -e "s/ */ /g" | sed 's/^[.]*//' | sed 's/[.]*$//g' | sed 's/^ *//g' | sed 's/ *$//g')"
|
||||||
|
deezerAlbumTitleClean="${deezerAlbumTitleClean:0:130}"
|
||||||
# String Character Count test, quicker than the levenshtein method to allow faster processing
|
|
||||||
characterMath=$(( ${#deezerAlbumTitleClean} - ${#lidarrAlbumReleaseTitleClean} ))
|
|
||||||
if [ "$characterMath" -gt "$matchDistance" ]; then
|
|
||||||
continue
|
|
||||||
elif [ "$characterMath" -lt "0" ]; then
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
GetDeezerAlbumInfo "${deezerAlbumID}"
|
GetDeezerAlbumInfo "${deezerAlbumID}"
|
||||||
deezerAlbumData="$(cat "/config/extended/cache/deezer/$deezerAlbumID.json")"
|
deezerAlbumData="$(cat "/config/extended/cache/deezer/$deezerAlbumID.json")"
|
||||||
deezerAlbumTrackCount="$(echo "$deezerAlbumData" | jq -r .nb_tracks)"
|
deezerAlbumTrackCount="$(echo "$deezerAlbumData" | jq -r .nb_tracks)"
|
||||||
deezerAlbumExplicitLyrics="$(echo "$deezerAlbumData" | jq -r .explicit_lyrics)"
|
deezerAlbumExplicitLyrics="$(echo "$deezerAlbumData" | jq -r .explicit_lyrics)"
|
||||||
deezerAlbumTitle="$(echo "$deezerAlbumData"| jq -r .title)"
|
|
||||||
deezerAlbumTitleClean="$(echo "$deezerAlbumTitle" | sed -e "s%[^[:alpha:][:digit:]]%%g" -e "s/ */ /g" | sed 's/^[.]*//' | sed 's/[.]*$//g' | sed 's/^ *//g' | sed 's/ *$//g')"
|
|
||||||
downloadedReleaseDate="$(echo "$deezerAlbumData" | jq -r .release_date)"
|
downloadedReleaseDate="$(echo "$deezerAlbumData" | jq -r .release_date)"
|
||||||
downloadedReleaseYear="${downloadedReleaseDate:0:4}"
|
downloadedReleaseYear="${downloadedReleaseDate:0:4}"
|
||||||
|
|
||||||
|
@ -1527,13 +1528,15 @@ FuzzyDeezerSearch () {
|
||||||
fi
|
fi
|
||||||
|
|
||||||
log "$1 :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Fuzzy Search :: Deezer :: $type :: $lidarrReleaseTitle :: $lidarrAlbumReleaseTitleClean vs $deezerAlbumTitleClean :: Checking for Match..."
|
log "$1 :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Fuzzy Search :: Deezer :: $type :: $lidarrReleaseTitle :: $lidarrAlbumReleaseTitleClean vs $deezerAlbumTitleClean :: Checking for Match..."
|
||||||
log "$1 :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Fuzzy Search :: Deezer :: $type :: $lidarrReleaseTitle :: $lidarrAlbumReleaseTitleClean vs $deezerAlbumTitleClean :: Calculating Similarity..."
|
log "$1 :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Fuzzy Search :: Deezer :: $type :: $lidarrReleaseTitle :: $lidarrAlbumReleaseTitleClean vs $deezerAlbumTitleClean :: Calculating Damerau-Levenshtein distance..."
|
||||||
diff=$(levenshtein "${lidarrAlbumReleaseTitleClean,,}" "${deezerAlbumTitleClean,,}" 2>/dev/null)
|
diff=$(python -c "from pyxdameraulevenshtein import damerau_levenshtein_distance; print(damerau_levenshtein_distance(\"${lidarrAlbumReleaseTitleClean,,}\", \"${deezerAlbumTitleClean,,}\"))" 2>/dev/null)
|
||||||
if [ "$diff" -le "$matchDistance" ]; then
|
if [ "$diff" -le "$matchDistance" ]; then
|
||||||
log "$1 :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Fuzzy Search :: Deezer :: $type :: $lidarrReleaseTitle :: $lidarrAlbumReleaseTitleClean vs $deezerAlbumTitleClean :: Deezer MATCH Found :: Calculated Difference = $diff"
|
log "$1 :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Fuzzy Search :: Deezer :: $type :: $lidarrReleaseTitle :: $lidarrAlbumReleaseTitleClean vs $deezerAlbumTitleClean :: Deezer MATCH Found :: Calculated Difference = $diff"
|
||||||
log "$1 :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Fuzzy Search :: Deezer :: $type :: $lidarrReleaseTitle :: Downloading $deezerAlbumTrackCount Tracks :: $deezerAlbumTitle ($downloadedReleaseYear)"
|
log "$1 :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Fuzzy Search :: Deezer :: $type :: $lidarrReleaseTitle :: Downloading $deezerAlbumTrackCount Tracks :: $deezerAlbumTitle ($downloadedReleaseYear)"
|
||||||
|
|
||||||
DownloadProcess "$deezerAlbumID" "DEEZER" "$downloadedReleaseYear" "$deezerAlbumTitle" "$deezerAlbumTrackCount"
|
DownloadProcess "$deezerAlbumID" "DEEZER" "$downloadedReleaseYear" "$deezerAlbumTitle" "$deezerAlbumTrackCount"
|
||||||
|
else
|
||||||
|
log "$1 :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Fuzzy Search :: Deezer :: $type :: $lidarrReleaseTitle :: $lidarrAlbumReleaseTitleClean vs $deezerAlbumTitleClean :: Deezer Match Not Found :: Calculated Difference ($diff) greater than $matchDistance"
|
||||||
fi
|
fi
|
||||||
# End search if lidarr was successfully notified for import
|
# End search if lidarr was successfully notified for import
|
||||||
if [ "$lidarrDownloadImportNotfication" == "true" ]; then
|
if [ "$lidarrDownloadImportNotfication" == "true" ]; then
|
||||||
|
@ -1588,6 +1591,7 @@ ArtistTidalSearch () {
|
||||||
tidalArtistAlbumData=$(echo "$tidalArtistAlbumsData" | jq -r "select(.id=="$tidalArtistAlbumId")")
|
tidalArtistAlbumData=$(echo "$tidalArtistAlbumsData" | jq -r "select(.id=="$tidalArtistAlbumId")")
|
||||||
downloadedAlbumTitle="$(echo ${tidalArtistAlbumData} | jq -r .title)"
|
downloadedAlbumTitle="$(echo ${tidalArtistAlbumData} | jq -r .title)"
|
||||||
tidalAlbumTitleClean=$(echo ${downloadedAlbumTitle} | sed -e "s%[^[:alpha:][:digit:]]%%g" -e "s/ */ /g" | sed 's/^[.]*//' | sed 's/[.]*$//g' | sed 's/^ *//g' | sed 's/ *$//g')
|
tidalAlbumTitleClean=$(echo ${downloadedAlbumTitle} | sed -e "s%[^[:alpha:][:digit:]]%%g" -e "s/ */ /g" | sed 's/^[.]*//' | sed 's/[.]*$//g' | sed 's/^ *//g' | sed 's/ *$//g')
|
||||||
|
tidalAlbumTitleClean="${tidalAlbumTitleClean:0:130}"
|
||||||
downloadedReleaseDate="$(echo ${tidalArtistAlbumData} | jq -r .releaseDate)"
|
downloadedReleaseDate="$(echo ${tidalArtistAlbumData} | jq -r .releaseDate)"
|
||||||
if [ "$downloadedReleaseDate" == "null" ]; then
|
if [ "$downloadedReleaseDate" == "null" ]; then
|
||||||
downloadedReleaseDate=$(echo $tidalArtistAlbumData | jq -r '.streamStartDate')
|
downloadedReleaseDate=$(echo $tidalArtistAlbumData | jq -r '.streamStartDate')
|
||||||
|
@ -1595,19 +1599,9 @@ ArtistTidalSearch () {
|
||||||
downloadedReleaseYear="${downloadedReleaseDate:0:4}"
|
downloadedReleaseYear="${downloadedReleaseDate:0:4}"
|
||||||
downloadedTrackCount=$(echo "$tidalArtistAlbumData"| jq -r .numberOfTracks)
|
downloadedTrackCount=$(echo "$tidalArtistAlbumData"| jq -r .numberOfTracks)
|
||||||
|
|
||||||
# String Character Count test, quicker than the levenshtein method to allow faster processing
|
|
||||||
characterMath=$(( ${#tidalAlbumTitleClean} - ${#lidarrAlbumReleaseTitleClean} ))
|
|
||||||
if [ "$characterMath" -gt "$matchDistance" ]; then
|
|
||||||
log "$1 :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Artist Search :: Tidal :: $type :: $lidarrReleaseTitle :: $lidarrAlbumReleaseTitleClean vs $tidalAlbumTitleClean :: Not a match..."
|
|
||||||
continue
|
|
||||||
elif [ "$characterMath" -lt "0" ]; then
|
|
||||||
log "$1 :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Artist Search :: Tidal :: $type :: $lidarrReleaseTitle :: $lidarrAlbumReleaseTitleClean vs $tidalAlbumTitleClean :: Not a match..."
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
log "$1 :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Artist Search :: Tidal :: $type :: $lidarrReleaseTitle :: $lidarrAlbumReleaseTitleClean vs $tidalAlbumTitleClean :: Checking for Match..."
|
log "$1 :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Artist Search :: Tidal :: $type :: $lidarrReleaseTitle :: $lidarrAlbumReleaseTitleClean vs $tidalAlbumTitleClean :: Checking for Match..."
|
||||||
log "$1 :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Artist Search :: Tidal :: $type :: $lidarrReleaseTitle :: $lidarrAlbumReleaseTitleClean vs $tidalAlbumTitleClean :: Calculating Similarity..."
|
log "$1 :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Artist Search :: Tidal :: $type :: $lidarrReleaseTitle :: $lidarrAlbumReleaseTitleClean vs $tidalAlbumTitleClean :: Calculating Damerau-Levenshtein distance..."
|
||||||
diff=$(levenshtein "${lidarrAlbumReleaseTitleClean,,}" "${tidalAlbumTitleClean,,}" 2>/dev/null)
|
diff=$(python -c "from pyxdameraulevenshtein import damerau_levenshtein_distance; print(damerau_levenshtein_distance(\"${lidarrAlbumReleaseTitleClean,,}\", \"${tidalAlbumTitleClean,,}\"))" 2>/dev/null)
|
||||||
if [ "$diff" -le "$matchDistance" ]; then
|
if [ "$diff" -le "$matchDistance" ]; then
|
||||||
log "$1 :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Artist Search :: Tidal :: $type :: $lidarrReleaseTitle :: $lidarrAlbumReleaseTitleClean vs $tidalAlbumTitleClean :: Tidal MATCH Found :: Calculated Difference = $diff"
|
log "$1 :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Artist Search :: Tidal :: $type :: $lidarrReleaseTitle :: $lidarrAlbumReleaseTitleClean vs $tidalAlbumTitleClean :: Tidal MATCH Found :: Calculated Difference = $diff"
|
||||||
|
|
||||||
|
@ -1620,7 +1614,7 @@ ArtistTidalSearch () {
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
log "$1 :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Artist Search :: Tidal :: $type :: $lidarrReleaseTitle :: $lidarrAlbumReleaseTitleClean vs $tidalAlbumTitleClean :: Tidal Match Not Found :: Calculated Difference ($diff) greater than 5"
|
log "$1 :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Artist Search :: Tidal :: $type :: $lidarrReleaseTitle :: $lidarrAlbumReleaseTitleClean vs $tidalAlbumTitleClean :: Tidal Match Not Found :: Calculated Difference ($diff) greater than $matchDistance"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
@ -1655,6 +1649,7 @@ FuzzyTidalSearch () {
|
||||||
tidalAlbumData="$(echo "$tidalSearch" | jq -r "select(.id==$tidalAlbumID)")"
|
tidalAlbumData="$(echo "$tidalSearch" | jq -r "select(.id==$tidalAlbumID)")"
|
||||||
tidalAlbumTitle=$(echo "$tidalAlbumData"| jq -r .title)
|
tidalAlbumTitle=$(echo "$tidalAlbumData"| jq -r .title)
|
||||||
tidalAlbumTitleClean=$(echo ${tidalAlbumTitle} | sed -e "s%[^[:alpha:][:digit:]]%%g" -e "s/ */ /g" | sed 's/^[.]*//' | sed 's/[.]*$//g' | sed 's/^ *//g' | sed 's/ *$//g')
|
tidalAlbumTitleClean=$(echo ${tidalAlbumTitle} | sed -e "s%[^[:alpha:][:digit:]]%%g" -e "s/ */ /g" | sed 's/^[.]*//' | sed 's/[.]*$//g' | sed 's/^ *//g' | sed 's/ *$//g')
|
||||||
|
tidalAlbumTitleClean="${tidalAlbumTitleClean:0:130}"
|
||||||
downloadedReleaseDate="$(echo ${tidalAlbumData} | jq -r .releaseDate)"
|
downloadedReleaseDate="$(echo ${tidalAlbumData} | jq -r .releaseDate)"
|
||||||
if [ "$downloadedReleaseDate" == "null" ]; then
|
if [ "$downloadedReleaseDate" == "null" ]; then
|
||||||
downloadedReleaseDate=$(echo $tidalAlbumData | jq -r '.streamStartDate')
|
downloadedReleaseDate=$(echo $tidalAlbumData | jq -r '.streamStartDate')
|
||||||
|
@ -1662,19 +1657,9 @@ FuzzyTidalSearch () {
|
||||||
downloadedReleaseYear="${downloadedReleaseDate:0:4}"
|
downloadedReleaseYear="${downloadedReleaseDate:0:4}"
|
||||||
downloadedTrackCount=$(echo "$tidalAlbumData"| jq -r .numberOfTracks)
|
downloadedTrackCount=$(echo "$tidalAlbumData"| jq -r .numberOfTracks)
|
||||||
|
|
||||||
# String Character Count test, quicker than the levenshtein method to allow faster processing
|
|
||||||
characterMath=$(( ${#tidalAlbumTitleClean} - ${#lidarrAlbumReleaseTitleClean} ))
|
|
||||||
if [ "$characterMath" -gt "$matchDistance" ]; then
|
|
||||||
log "$1 :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Fuzzy Search :: Tidal :: $type :: $lidarrReleaseTitle :: $lidarrAlbumReleaseTitleClean vs $tidalAlbumTitleClean :: Not a match..."
|
|
||||||
continue
|
|
||||||
elif [ "$characterMath" -lt "0" ]; then
|
|
||||||
log "$1 :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Fuzzy Search :: Tidal :: $type :: $lidarrReleaseTitle :: $lidarrAlbumReleaseTitleClean vs $tidalAlbumTitleClean :: Not a match..."
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
log "$1 :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Fuzzy Search :: Tidal :: $type :: $lidarrReleaseTitle :: $lidarrAlbumReleaseTitleClean vs $tidalAlbumTitleClean :: Checking for Match..."
|
log "$1 :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Fuzzy Search :: Tidal :: $type :: $lidarrReleaseTitle :: $lidarrAlbumReleaseTitleClean vs $tidalAlbumTitleClean :: Checking for Match..."
|
||||||
log "$1 :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Fuzzy Search :: Tidal :: $type :: $lidarrReleaseTitle :: $lidarrAlbumReleaseTitleClean vs $tidalAlbumTitleClean :: Calculating Similarity..."
|
log "$1 :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Fuzzy Search :: Tidal :: $type :: $lidarrReleaseTitle :: $lidarrAlbumReleaseTitleClean vs $tidalAlbumTitleClean :: Calculating Damerau-Levenshtein distance..."
|
||||||
diff=$(levenshtein "${lidarrAlbumReleaseTitleClean,,}" "${tidalAlbumTitleClean,,}" 2>/dev/null)
|
diff=$(python -c "from pyxdameraulevenshtein import damerau_levenshtein_distance; print(damerau_levenshtein_distance(\"${lidarrAlbumReleaseTitleClean,,}\", \"${tidalAlbumTitleClean,,}\"))" 2>/dev/null)
|
||||||
if [ "$diff" -le "$matchDistance" ]; then
|
if [ "$diff" -le "$matchDistance" ]; then
|
||||||
log "$1 :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Fuzzy Search :: Tidal :: $type :: $lidarrReleaseTitle :: $lidarrAlbumReleaseTitleClean vs $tidalAlbumTitleClean :: Tidal MATCH Found :: Calculated Difference = $diff"
|
log "$1 :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Fuzzy Search :: Tidal :: $type :: $lidarrReleaseTitle :: $lidarrAlbumReleaseTitleClean vs $tidalAlbumTitleClean :: Tidal MATCH Found :: Calculated Difference = $diff"
|
||||||
log "$1 :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Fuzzy Search :: Tidal :: $type :: $lidarrReleaseTitle :: Downloading $downloadedTrackCount Tracks :: $tidalAlbumTitle ($downloadedReleaseYear)"
|
log "$1 :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Fuzzy Search :: Tidal :: $type :: $lidarrReleaseTitle :: Downloading $downloadedTrackCount Tracks :: $tidalAlbumTitle ($downloadedReleaseYear)"
|
||||||
|
@ -1682,7 +1667,7 @@ FuzzyTidalSearch () {
|
||||||
DownloadProcess "$tidalAlbumID" "TIDAL" "$downloadedReleaseYear" "$tidalAlbumTitle" "$downloadedTrackCount"
|
DownloadProcess "$tidalAlbumID" "TIDAL" "$downloadedReleaseYear" "$tidalAlbumTitle" "$downloadedTrackCount"
|
||||||
|
|
||||||
else
|
else
|
||||||
log "$1 :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Fuzzy Search :: Tidal :: $type :: $lidarrReleaseTitle :: $lidarrAlbumReleaseTitleClean vs $tidalAlbumTitleClean :: Tidal Match Not Found :: Calculated Difference ($diff) greater than 5"
|
log "$1 :: $lidarrArtistName :: $lidarrAlbumTitle :: $lidarrAlbumType :: Fuzzy Search :: Tidal :: $type :: $lidarrReleaseTitle :: $lidarrAlbumReleaseTitleClean vs $tidalAlbumTitleClean :: Tidal Match Not Found :: Calculated Difference ($diff) greater than $matchDistance"
|
||||||
fi
|
fi
|
||||||
# End search if lidarr was successfully notified for import
|
# End search if lidarr was successfully notified for import
|
||||||
if [ "$lidarrDownloadImportNotfication" == "true" ]; then
|
if [ "$lidarrDownloadImportNotfication" == "true" ]; then
|
||||||
|
@ -1770,45 +1755,6 @@ LidarrMissingAlbumSearch () {
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
function levenshtein {
|
|
||||||
if [ "$1" == "$2" ]; then
|
|
||||||
echo 0
|
|
||||||
else
|
|
||||||
if (( $# != 2 )); then
|
|
||||||
echo "Usage: $0 word1 word2" >&2
|
|
||||||
elif (( ${#1} < ${#2} )); then
|
|
||||||
levenshtein "$2" "$1"
|
|
||||||
else
|
|
||||||
local str1len=${#1}
|
|
||||||
local str2len=${#2}
|
|
||||||
local d
|
|
||||||
|
|
||||||
for (( i = 0; i <= (str1len+1)*(str2len+1); i++ )); do
|
|
||||||
d[i]=0
|
|
||||||
done
|
|
||||||
|
|
||||||
for (( i = 0; i <= str1len; i++ )); do
|
|
||||||
d[i+0*str1len]=$i
|
|
||||||
done
|
|
||||||
|
|
||||||
for (( j = 0; j <= str2len; j++ )); do
|
|
||||||
d[0+j*(str1len+1)]=$j
|
|
||||||
done
|
|
||||||
|
|
||||||
for (( j = 1; j <= str2len; j++ )); do
|
|
||||||
for (( i = 1; i <= str1len; i++ )); do
|
|
||||||
[ "${1:i-1:1}" = "${2:j-1:1}" ] && local cost=0 || local cost=1
|
|
||||||
del=$(( d[(i-1)+str1len*j]+1 ))
|
|
||||||
ins=$(( d[i+str1len*(j-1)]+1 ))
|
|
||||||
alt=$(( d[(i-1)+str1len*(j-1)]+cost ))
|
|
||||||
d[i+str1len*j]=$( echo -e "$del\n$ins\n$alt" | sort -n | head -1 )
|
|
||||||
done
|
|
||||||
done
|
|
||||||
echo ${d[str1len+str1len*(str2len)]}
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
audioFlacVerification () {
|
audioFlacVerification () {
|
||||||
# Test Flac File for errors
|
# Test Flac File for errors
|
||||||
# $1 File for verification
|
# $1 File for verification
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#!/usr/bin/with-contenv bash
|
#!/usr/bin/with-contenv bash
|
||||||
scriptVersion="1.9"
|
scriptVersion="2.1"
|
||||||
scriptName="AutoArtistAdder"
|
scriptName="AutoArtistAdder"
|
||||||
|
|
||||||
### Import Settings
|
### Import Settings
|
||||||
|
@ -21,6 +21,12 @@ verifyConfig () {
|
||||||
autoArtistAdderInterval="12h"
|
autoArtistAdderInterval="12h"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -z "$autoArtistAdderMonitored" ]; then
|
||||||
|
autoArtistAdderMonitored="true"
|
||||||
|
elif [ "$autoArtistAdderMonitored" != "true" ]; then
|
||||||
|
autoArtistAdderMonitored="false"
|
||||||
|
fi
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -108,7 +114,7 @@ AddDeezerArtistToLidarr () {
|
||||||
\"foreignArtistId\": \"$foreignId\",
|
\"foreignArtistId\": \"$foreignId\",
|
||||||
\"qualityProfileId\": $qualityProfileId,
|
\"qualityProfileId\": $qualityProfileId,
|
||||||
\"metadataProfileId\": $metadataProfileId,
|
\"metadataProfileId\": $metadataProfileId,
|
||||||
\"monitored\":true,
|
\"monitored\":$autoArtistAdderMonitored,
|
||||||
\"monitor\":\"all\",
|
\"monitor\":\"all\",
|
||||||
\"rootFolderPath\": \"$path\",
|
\"rootFolderPath\": \"$path\",
|
||||||
\"addOptions\":{\"searchForMissingAlbums\":$lidarrSearchForMissing}
|
\"addOptions\":{\"searchForMissingAlbums\":$lidarrSearchForMissing}
|
||||||
|
@ -259,7 +265,7 @@ AddTidalArtistToLidarr () {
|
||||||
\"foreignArtistId\": \"$foreignId\",
|
\"foreignArtistId\": \"$foreignId\",
|
||||||
\"qualityProfileId\": $qualityProfileId,
|
\"qualityProfileId\": $qualityProfileId,
|
||||||
\"metadataProfileId\": $metadataProfileId,
|
\"metadataProfileId\": $metadataProfileId,
|
||||||
\"monitored\":true,
|
\"monitored\":$autoArtistAdderMonitored,
|
||||||
\"monitor\":\"all\",
|
\"monitor\":\"all\",
|
||||||
\"rootFolderPath\": \"$path\",
|
\"rootFolderPath\": \"$path\",
|
||||||
\"addOptions\":{\"searchForMissingAlbums\":$lidarrSearchForMissing}
|
\"addOptions\":{\"searchForMissingAlbums\":$lidarrSearchForMissing}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#!/usr/bin/with-contenv bash
|
#!/usr/bin/with-contenv bash
|
||||||
scriptVersion="3.5"
|
scriptVersion="3.6"
|
||||||
scriptName="Video"
|
scriptName="Video"
|
||||||
|
|
||||||
### Import Settings
|
### Import Settings
|
||||||
|
@ -8,14 +8,26 @@ source /config/extended.conf
|
||||||
source /config/extended/functions
|
source /config/extended/functions
|
||||||
|
|
||||||
verifyConfig () {
|
verifyConfig () {
|
||||||
videoContainer=mkv
|
if [ -z "$videoContainer" ]; then
|
||||||
|
videoContainer="mkv"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$disableImvd" ]; then
|
||||||
|
disableImvd="fasle"
|
||||||
|
fi
|
||||||
|
|
||||||
if [ "$enableVideo" != "true" ]; then
|
if [ "$enableVideo" != "true" ]; then
|
||||||
log "Script is not enabled, enable by setting enableVideo to \"true\" by modifying the \"/config/extended.conf\" config file..."
|
log "Script is not enabled, enable by setting enableVideo to \"true\" by modifying the \"/config/extended.conf\" config file..."
|
||||||
log "Sleeping (infinity)"
|
log "Sleeping (infinity)"
|
||||||
sleep infinity
|
sleep infinity
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ "$disableImvd" = "true" ]; then
|
||||||
|
log "Script is not enabled, enable by setting disableImvd to \"false\" by modifying the \"/config/extended.conf\" config file..."
|
||||||
|
log "Sleeping (infinity)"
|
||||||
|
sleep infinity
|
||||||
|
fi
|
||||||
|
|
||||||
if [ -z "$downloadPath" ]; then
|
if [ -z "$downloadPath" ]; then
|
||||||
downloadPath="/config/extended/downloads"
|
downloadPath="/config/extended/downloads"
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -29,10 +29,11 @@ configureTrackNamingSettings="true"
|
||||||
|
|
||||||
##### AUDIO SCRIPT
|
##### AUDIO SCRIPT
|
||||||
# SEARCH
|
# SEARCH
|
||||||
searchSort="date" # date or album :: Sorts the missing/cutoff list by release date (newest -> oldest) or album type (album -> single) for processing the list
|
searchSort="date" # date or album :: Sorts the missing/cutoff list by release date (newest -> oldest) or album type (album -> single) for processing the list
|
||||||
matchDistance="5" # The number of changes required to transform the searched album title into a possible found album title match... (0, requires a perfect match)
|
matchDistance="5" # The number of changes required to transform the searched album title into a possible found album title match... (0, requires a perfect match)
|
||||||
lidarrSearchForMissing="true" # true = enabled :: When artists are added, search for them using Lidarr's built in functionality
|
lidarrSearchForMissing="true" # true = enabled :: When artists are added, search for them using Lidarr's built in functionality
|
||||||
retryNotFound="90" ## :: Number of days between re-attempting the download of previously notfound albums
|
retryNotFound="90" ## :: Number of days between re-attempting the download of previously notfound albums
|
||||||
|
ignoreInstrumentalRelease="false" # true = enabled :: Skips albums releases that have the word "instrumental" in either the title or disambiguation
|
||||||
|
|
||||||
# CLIENT
|
# CLIENT
|
||||||
dlClientSource="deezer" # deezer, tidal or both :: set to both, to use both clients, tidal requires extra steps, view logging output
|
dlClientSource="deezer" # deezer, tidal or both :: set to both, to use both clients, tidal requires extra steps, view logging output
|
||||||
|
@ -60,6 +61,7 @@ addDeezerTopTrackArtists="false" # true = enabled :: Enabling this will
|
||||||
topLimit="3" # This setting controls the amount of Top Artist (Albums/Tracks/Artists) to add to Lidarr from Deezer
|
topLimit="3" # This setting controls the amount of Top Artist (Albums/Tracks/Artists) to add to Lidarr from Deezer
|
||||||
addRelatedArtists="false" # true = enabled :: WARNING !!! WARNING !!! Enabling this can cause an endless loop of additional artists.... Enabling this will enable the extended script to automatically add artists that are related to your existing Lidarr artists from Tidal & Deezer
|
addRelatedArtists="false" # true = enabled :: WARNING !!! WARNING !!! Enabling this can cause an endless loop of additional artists.... Enabling this will enable the extended script to automatically add artists that are related to your existing Lidarr artists from Tidal & Deezer
|
||||||
numberOfRelatedArtistsToAddPerArtist="1" # 1-20 :: This will limit the number of related artists to add per artist in your library :: Minimum is 1, Maximum is 20
|
numberOfRelatedArtistsToAddPerArtist="1" # 1-20 :: This will limit the number of related artists to add per artist in your library :: Minimum is 1, Maximum is 20
|
||||||
|
autoArtistAdderMonitored="true" # true or false :: If true, artists that are added automatically are monitored, when false they are added in an unmonitored state
|
||||||
|
|
||||||
##### VIDEO SCRIPT
|
##### VIDEO SCRIPT
|
||||||
addFeaturedVideoArtists="false" # true = enabled :: WARNING !!! WARNING !!! Enabling this can cause an endless loop of additional artists.... Enabling this will enable the extended Video script to automatically add Music Video Featured Artists to your existing Lidarr artists from IMVDB
|
addFeaturedVideoArtists="false" # true = enabled :: WARNING !!! WARNING !!! Enabling this can cause an endless loop of additional artists.... Enabling this will enable the extended Video script to automatically add Music Video Featured Artists to your existing Lidarr artists from IMVDB
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#!/usr/bin/with-contenv bash
|
#!/usr/bin/with-contenv bash
|
||||||
SMA_PATH="/usr/local/sma"
|
SMA_PATH="/usr/local/sma"
|
||||||
|
version="1.1"
|
||||||
|
|
||||||
echo "*** install packages ***" && \
|
echo "*** install packages ***" && \
|
||||||
apk add -U --upgrade --no-cache \
|
apk add -U --upgrade --no-cache \
|
||||||
|
@ -22,11 +23,11 @@ apk add -U --upgrade --no-cache \
|
||||||
echo "*** install freyr client ***" && \
|
echo "*** install freyr client ***" && \
|
||||||
apk add --no-cache -X http://dl-cdn.alpinelinux.org/alpine/edge/testing atomicparsley && \
|
apk add --no-cache -X http://dl-cdn.alpinelinux.org/alpine/edge/testing atomicparsley && \
|
||||||
npm install -g miraclx/freyr-js &&\
|
npm install -g miraclx/freyr-js &&\
|
||||||
echo "*** install beets ***" && \
|
|
||||||
apk add --no-cache -X http://dl-cdn.alpinelinux.org/alpine/edge/community beets && \
|
|
||||||
echo "*** install python packages ***" && \
|
echo "*** install python packages ***" && \
|
||||||
pip install --upgrade --no-cache-dir \
|
pip install --upgrade --no-cache-dir \
|
||||||
|
beets \
|
||||||
yq \
|
yq \
|
||||||
|
pyxDamerauLevenshtein \
|
||||||
pyacoustid \
|
pyacoustid \
|
||||||
requests \
|
requests \
|
||||||
pylast \
|
pylast \
|
||||||
|
@ -46,7 +47,7 @@ touch ${SMA_PATH}/config/sma.log && \
|
||||||
chgrp users ${SMA_PATH}/config/sma.log && \
|
chgrp users ${SMA_PATH}/config/sma.log && \
|
||||||
chmod g+w ${SMA_PATH}/config/sma.log && \
|
chmod g+w ${SMA_PATH}/config/sma.log && \
|
||||||
echo "************ install pip dependencies ************" && \
|
echo "************ install pip dependencies ************" && \
|
||||||
python3 -m pip install --upgrade pip && \
|
python3 -m pip install --upgrade pip && \
|
||||||
pip3 install -r ${SMA_PATH}/setup/requirements.txt
|
pip3 install -r ${SMA_PATH}/setup/requirements.txt
|
||||||
|
|
||||||
mkdir -p /custom-services.d
|
mkdir -p /custom-services.d
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#!/usr/bin/with-contenv bash
|
#!/usr/bin/with-contenv bash
|
||||||
RAHASHER_PATH="/usr/local/RALibretro"
|
RAHASHER_PATH="/usr/local/RALibretro"
|
||||||
|
SKYSCRAPER_PATH="/usr/local/skysource"
|
||||||
echo "************ install dependencies ************"
|
echo "************ install dependencies ************"
|
||||||
echo "************ install and upgrade packages ************"
|
echo "************ install and upgrade packages ************"
|
||||||
apt-get update
|
apt-get update
|
||||||
|
@ -18,6 +19,22 @@ apt-get install -y \
|
||||||
python3-pip \
|
python3-pip \
|
||||||
rclone \
|
rclone \
|
||||||
bsdmainutils
|
bsdmainutils
|
||||||
|
echo "************ skyscraper ************"
|
||||||
|
echo "************ install dependencies ************"
|
||||||
|
echo "************ install packages ************"
|
||||||
|
apt-get update
|
||||||
|
apt-get install -y \
|
||||||
|
build-essential \
|
||||||
|
wget \
|
||||||
|
qt5-default
|
||||||
|
apt-get purge --auto-remove -y
|
||||||
|
apt-get clean
|
||||||
|
echo "************ install skyscraper ************"
|
||||||
|
mkdir -p ${SKYSCRAPER_PATH}
|
||||||
|
cd ${SKYSCRAPER_PATH}
|
||||||
|
wget https://raw.githubusercontent.com/Gemba/skyscraper/master/update_skyscraper.sh
|
||||||
|
sed -i 's/sudo //g' update_skyscraper.sh
|
||||||
|
bash update_skyscraper.sh
|
||||||
echo "************ RAHasher installation ************"
|
echo "************ RAHasher installation ************"
|
||||||
mkdir -p ${RAHASHER_PATH}
|
mkdir -p ${RAHASHER_PATH}
|
||||||
wget "https://github.com/RetroAchievements/RALibretro/releases/download/1.4.0/RAHasher-x64-Linux-1.6.0.zip" -O "${RAHASHER_PATH}/rahasher.zip"
|
wget "https://github.com/RetroAchievements/RALibretro/releases/download/1.4.0/RAHasher-x64-Linux-1.6.0.zip" -O "${RAHASHER_PATH}/rahasher.zip"
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#!/usr/bin/with-contenv bash
|
#!/usr/bin/with-contenv bash
|
||||||
ScriptVersion="1.5"
|
ScriptVersion="1.7"
|
||||||
scriptName="Audiobook"
|
scriptName="Audiobook"
|
||||||
|
|
||||||
#### Import Settings
|
#### Import Settings
|
||||||
|
@ -15,7 +15,7 @@ if [ -z $allowM4b ]; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -z $allowMp3 ]; then
|
if [ -z $allowMp3 ]; then
|
||||||
allowMp3=false
|
allowMp3=true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
@ -27,57 +27,68 @@ exec &> >(tee -a "/config/scripts/audiobook.txt")
|
||||||
|
|
||||||
SECONDS=0
|
SECONDS=0
|
||||||
log "Processing $1"
|
log "Processing $1"
|
||||||
log "Searching for audiobook (m4b) files in completed download..."
|
|
||||||
m4bCount=$(find "$1" -type f -iname "*.m4b" | wc -l)
|
m4bCount=$(find "$1" -type f -iname "*.m4b" | wc -l)
|
||||||
if [ $m4bCount -gt 0 ]; then
|
if [ $m4bCount -gt 1 ]; then
|
||||||
log "$m4bCount M4B files found, removing non m4b files..."
|
log "ERROR: More than 1 M4B file found, performing cleanup..."
|
||||||
find "$1" -type f -not -iname "*.m4b" -delete
|
find "$1" -type f -iname "m4b" -delete
|
||||||
find "$1" -mindepth 2 -type f -exec mv "{}" "$1"/ \;
|
|
||||||
find "$1" -mindepth 1 -type d -delete
|
|
||||||
else
|
else
|
||||||
log "None found..."
|
log "Searching for audiobook (m4b) files in completed download..."
|
||||||
fi
|
if [ $m4bCount -gt 0 ]; then
|
||||||
|
log "$m4bCount M4B files found, removing non m4b files..."
|
||||||
log "Searching for audiobook (m4b.mp4) files in completed download..."
|
find "$1" -type f -not -iname "*.m4b" -delete
|
||||||
mp4Count=$(find "$1" -type f -iname "*.m4b.mp4" | wc -l)
|
find "$1" -mindepth 2 -type f -exec mv "{}" "$1"/ \;
|
||||||
if [ $mp4Count -gt 0 ]; then
|
find "$1" -mindepth 1 -type d -delete
|
||||||
log "$mp4Count M4B (m4b.mp4) files found, removing non m4b files..."
|
else
|
||||||
find "$1" -type f -not -iname "*.m4b.mp4" -delete
|
log "None found..."
|
||||||
find "$1" -mindepth 2 -type f -exec mv "{}" "$1"/ \;
|
|
||||||
find "$1" -mindepth 1 -type d -delete
|
|
||||||
log "Renaming m4b.mp4 files to m4b..."
|
|
||||||
count=0
|
|
||||||
fileCount=$(find "$1" -type f -iname "*.m4b.mp4"| wc -l)
|
|
||||||
find "$1" -type f -iname "*.m4b.mp4" -print0 | while IFS= read -r -d '' file; do
|
|
||||||
count=$(($count+1))
|
|
||||||
baseFileName="${file%.*}"
|
|
||||||
fileName="$(basename "$file")"
|
|
||||||
extension="${fileName##*.}"
|
|
||||||
log "$count of $fileCount :: Processing $fileName"
|
|
||||||
if [ -f "$file" ]; then
|
|
||||||
mv "$file" "$1/${fileName%.*}"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
log "All files renamed"
|
|
||||||
else
|
|
||||||
log "None found..."
|
|
||||||
fi
|
|
||||||
|
|
||||||
log "Searching for audiobook (mp3) files in completed download..."
|
|
||||||
mp3Count=$(find "$1" -type f -iname "*.mp3" | wc -l)
|
|
||||||
if [ $mp3Count -gt 0 ]; then
|
|
||||||
log "$mp3Count MP3 files found, removing non mp3 files..."
|
|
||||||
find "$1" -type f -not -iname "*.mp3" -delete
|
|
||||||
find "$1" -mindepth 2 -type f -exec mv "{}" "$1"/ \;
|
|
||||||
find "$1" -mindepth 1 -type d -delete
|
|
||||||
if [ $mp3Count -ne 1 ]; then
|
|
||||||
log "ERROR: More than 1 MP3 file found, performing cleanup..."
|
|
||||||
find "$1" -type f -iname "*.mp3" -delete
|
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
mp4Count=$(find "$1" -type f -iname "*.m4b.mp4" | wc -l)
|
||||||
|
if [ $mp4Count -gt 1 ]; then
|
||||||
|
log "ERROR: More than 1 MP4 file found, performing cleanup..."
|
||||||
|
find "$1" -type f -iname "*.mp4" -delete
|
||||||
else
|
else
|
||||||
log "None found..."
|
log "Searching for audiobook (m4b.mp4) files in completed download..."
|
||||||
|
if [ $mp4Count -gt 0 ]; then
|
||||||
|
log "$mp4Count M4B (m4b.mp4) files found, removing non m4b files..."
|
||||||
|
find "$1" -type f -not -iname "*.m4b.mp4" -delete
|
||||||
|
find "$1" -mindepth 2 -type f -exec mv "{}" "$1"/ \;
|
||||||
|
find "$1" -mindepth 1 -type d -delete
|
||||||
|
log "Renaming m4b.mp4 files to m4b..."
|
||||||
|
count=0
|
||||||
|
fileCount=$(find "$1" -type f -iname "*.m4b.mp4"| wc -l)
|
||||||
|
find "$1" -type f -iname "*.m4b.mp4" -print0 | while IFS= read -r -d '' file; do
|
||||||
|
count=$(($count+1))
|
||||||
|
baseFileName="${file%.*}"
|
||||||
|
fileName="$(basename "$file")"
|
||||||
|
extension="${fileName##*.}"
|
||||||
|
log "$count of $fileCount :: Processing $fileName"
|
||||||
|
if [ -f "$file" ]; then
|
||||||
|
mv "$file" "$1/${fileName%.*}"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
log "All files renamed"
|
||||||
|
else
|
||||||
|
log "None found..."
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
mp3Count=$(find "$1" -type f -iname "*.mp3" | wc -l)
|
||||||
|
if [ $mp3Count -gt 1 ]; then
|
||||||
|
log "ERROR: More than 1 MP3 file found, performing cleanup..."
|
||||||
|
find "$1" -type f -iname "*.mp3" -delete
|
||||||
|
else
|
||||||
|
log "Searching for audiobook (mp3) files in completed download..."
|
||||||
|
if [ $mp3Count -gt 0 ]; then
|
||||||
|
log "$mp3Count MP3 files found, removing non mp3 files..."
|
||||||
|
find "$1" -type f -not -iname "*.mp3" -delete
|
||||||
|
find "$1" -mindepth 2 -type f -exec mv "{}" "$1"/ \;
|
||||||
|
find "$1" -mindepth 1 -type d -delete
|
||||||
|
else
|
||||||
|
log "None found..."
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
error="false"
|
error="false"
|
||||||
bookfound="false"
|
bookfound="false"
|
||||||
m4bCount=$(find "$1" -type f -iname "*.m4b" | wc -l)
|
m4bCount=$(find "$1" -type f -iname "*.m4b" | wc -l)
|
||||||
|
|
|
@ -16,7 +16,7 @@ apk add -U --update --no-cache \
|
||||||
ffmpeg \
|
ffmpeg \
|
||||||
yt-dlp
|
yt-dlp
|
||||||
echo "************ install python packages ************"
|
echo "************ install python packages ************"
|
||||||
pip install --upgrade --no-cache-dir -U \
|
pip install --upgrade --no-cache-dir -U --break-system-packages \
|
||||||
excludarr \
|
excludarr \
|
||||||
yq
|
yq
|
||||||
echo "************ setup SMA ************"
|
echo "************ setup SMA ************"
|
||||||
|
@ -32,8 +32,8 @@ echo "************ create logging file ************"
|
||||||
mkdir -p /config/extended/sma/config
|
mkdir -p /config/extended/sma/config
|
||||||
touch /config/extended/sma/config/sma.log
|
touch /config/extended/sma/config/sma.log
|
||||||
echo "************ install pip dependencies ************"
|
echo "************ install pip dependencies ************"
|
||||||
pip install --upgrade pip --no-cache-dir
|
pip install --upgrade pip --no-cache-dir --break-system-packages
|
||||||
pip install -r /config/extended/sma/setup/requirements.txt --no-cache-dir
|
pip install -r /config/extended/sma/setup/requirements.txt --no-cache-dir --break-system-packages
|
||||||
chmod 777 -R /config/extended/sma
|
chmod 777 -R /config/extended/sma
|
||||||
echo "************ install recyclarr ************"
|
echo "************ install recyclarr ************"
|
||||||
mkdir -p /recyclarr
|
mkdir -p /recyclarr
|
||||||
|
|
|
@ -22,7 +22,7 @@ getArrAppInfo () {
|
||||||
if [ "$arrUrlBase" == "null" ]; then
|
if [ "$arrUrlBase" == "null" ]; then
|
||||||
arrUrlBase=""
|
arrUrlBase=""
|
||||||
else
|
else
|
||||||
arrUrlBase="/$(echo "$arrUrlBase" | sed "s/\///g")"
|
arrUrlBase="/$(echo "$arrUrlBase" | sed "s/\///")"
|
||||||
fi
|
fi
|
||||||
arrName="$(cat /config/config.xml | xq | jq -r .Config.InstanceName)"
|
arrName="$(cat /config/config.xml | xq | jq -r .Config.InstanceName)"
|
||||||
arrApiKey="$(cat /config/config.xml | xq | jq -r .Config.ApiKey)"
|
arrApiKey="$(cat /config/config.xml | xq | jq -r .Config.ApiKey)"
|
||||||
|
|
Loading…
Reference in a new issue