From e36643944bfa7b058550a44ea7401bc7e4d82082 Mon Sep 17 00:00:00 2001 From: RandomNinjaAtk Date: Fri, 9 Sep 2022 11:56:32 +0000 Subject: [PATCH] v1.0.010 - Big changes, bug fixes #9 1. Only notify Plex to scan if new videos are downloaded or script is triggered by Radarr and not AutoExtras.bash 2. Adjusted language settings to actually function... 3. extrasSingle option now supports language setting 4. extrasSingle option, when not using Kodi Compatibility, sets the filename to Movie Folder name in the trailers directory 5. When extrasSingle option is true, force extrasType to trailer only --- root/scripts/MovieExtras.bash | 248 ++++++++++++++++++---------------- 1 file changed, 128 insertions(+), 120 deletions(-) diff --git a/root/scripts/MovieExtras.bash b/root/scripts/MovieExtras.bash index 78ee252..e531353 100644 --- a/root/scripts/MovieExtras.bash +++ b/root/scripts/MovieExtras.bash @@ -1,18 +1,20 @@ #!/usr/bin/env bash -scriptVersion="1.0.007" +scriptVersion="1.0.010" arrEventType="$radarr_eventtype" arrItemId=$radarr_movie_id tmdbApiKey="3b7751e3179f796565d88fdb2fcdf426" +autoScan="false" if [ ! -z "$1" ]; then arrItemId=$1 + autoScan="true" fi # Debugging -#arrItemId=11677 -#extrasLanguages=en +#arrItemId=1 +#extrasLanguages=it-IT,en-US #extrasType=all -#extrasOfficialOnly=true +#extrasOfficialOnly=false #extrasKodiCompatibility=true #extrasSingle=false #enableExtras=true @@ -65,6 +67,7 @@ arrItemData=$(curl -s "$arrUrl/api/v3/movie/$arrItemId?apikey=$arrApiKey") itemTitle=$(echo "$arrItemData" | jq -r .title) itemHasFile=$(echo "$arrItemData" | jq -r .hasFile) itemPath="$(echo "$arrItemData" | jq -r ".path")" +itemFolder="$(basename "$itemPath")" itemRelativePath="$(echo "$arrItemData" | jq -r ".movieFile.relativePath")" itemTrailerId="$(echo "$arrItemData" | jq -r ".youTubeTrailerId")" tmdbId="$(echo "$arrItemData" | jq -r ".tmdbId")" @@ -76,151 +79,156 @@ if [ ! -d "$itemPath" ]; then fi if [ "$extrasSingle" == "true" ]; then - if [ "$extrasKodiCompatibility" == "true" ] ; then - extrasFileName="movie-trailer" - else - extrasFileName="trailers/Trailer" - fi - - if [ ! -z "$itemTrailerId" ]; then - if [ ! -f "$itemPath/$extrasFileName.mkv" ]; then - log "$itemTitle :: Trailer :: Downloading Trailer ($itemTrailerId)..." - if [ ! -z "$cookiesFile" ]; then - yt-dlp --cookies "$cookiesFile" -o "$itemPath/$extrasFileName" --write-sub --sub-lang $extrasLanguages --embed-subs --merge-output-format mkv --no-mtime --geo-bypass "https://www.youtube.com/watch?v=$itemTrailerId" - else - yt-dlp -o "$itemPath/$extrasFileName" --write-sub --sub-lang $extrasLanguages --embed-subs --merge-output-format mkv --no-mtime --geo-bypass "https://www.youtube.com/watch?v=$itemTrailerId" - fi - - - if python3 /usr/local/sma/manual.py --config "/sma.ini" -i "$itemPath/$extrasFileName.mkv" -nt &>/dev/null; then - sleep 0.01 - log "$itemTitle :: Trailer :: Processed with SMA..." - rm /usr/local/sma/config/*log* - else - log "$itemTitle :: Trailer :: ERROR :: SMA Processing Error" - rm "$itemPath/$extrasFileName.mkv" - log "$itemTitle :: Trailer :: INFO: deleted: $itemPath/$extrasFileName.mkv" - fi - if [ -f "$itemPath/$extrasFileName.mkv" ]; then - chmod 666 "$itemPath/$extrasFileName.mkv" - chown abc:abc "$itemPath/$extrasFileName.mkv" - fi - else - log "$itemTitle :: Trailer :: Already downloaded..." - fi - else - log "$itemTitle :: Trailer :: ERROR :: No Trailer ID Found, Skipping..." - fi - exit + extrasType="trailer" fi -tmdbVideosListData=$(curl -s "https://api.themoviedb.org/3/movie/$tmdbId/videos?api_key=$tmdbApiKey" | jq -r '.results[] | select(.site=="YouTube")') - IFS=',' read -r -a filters <<< "$extrasLanguages" for filter in "${filters[@]}" do + tmdbVideosListData=$(curl -s "https://api.themoviedb.org/3/movie/$tmdbId/videos?api_key=$tmdbApiKey&language=$filter" | jq -r '.results[] | select(.site=="YouTube")') log "$itemTitle :: Searching for \"$filter\" extras..." if [ "$extrasType" == "all" ]; then - tmdbVideosListDataIds=$(echo "$tmdbVideosListData" | jq -r "select(.iso_639_1==\"$filter\") | .id") - tmdbVideosListDataIdsCount=$(echo "$tmdbVideosListData" | jq -r "select(.iso_639_1==\"$filter\") | .id" | wc -l) + tmdbVideosListDataIds=$(echo "$tmdbVideosListData" | jq -r ".id") + tmdbVideosListDataIdsCount=$(echo "$tmdbVideosListData" | jq -r ".id" | wc -l) else - tmdbVideosListDataIds=$(echo "$tmdbVideosListData" | jq -r "select(.iso_639_1==\"$filter\" and .type==\"Trailer\") | .id") - tmdbVideosListDataIdsCount=$(echo "$tmdbVideosListData" | jq -r "select(.iso_639_1==\"$filter\" and .type==\"Trailer\") | .id" | wc -l) + tmdbVideosListDataIds=$(echo "$tmdbVideosListData" | jq -r "select(.type==\"Trailer\") | .id") + tmdbVideosListDataIdsCount=$(echo "$tmdbVideosListData" | jq -r "select(.type==\"Trailer\") | .id" | wc -l) fi if [ -z "$tmdbVideosListDataIds" ]; then log "$itemTitle :: None found..." continue - else - break fi -done - -if [ $tmdbVideosListDataIdsCount -le 0 ]; then - log "$itemTitle :: No Extras Found, skipping..." - exit -fi -log "$itemTitle :: $tmdbVideosListDataIdsCount Extras Found!" -i=0 -for id in $(echo "$tmdbVideosListDataIds"); do - i=$(( i + 1)) - tmdbExtraData="$(echo "$tmdbVideosListData" | jq -r "select(.id==\"$id\")")" - tmdbExtraTitle="$(echo "$tmdbExtraData" | jq -r .name)" - tmdbExtraTitleClean="$(echo "$tmdbExtraTitle" | sed -e "s/[^[:alpha:][:digit:]$^&_+=()'%;{},.@#]/ /g" -e "s/ */ /g" | sed 's/^[.]*//' | sed 's/[.]*$//g' | sed 's/^ *//g' | sed 's/ *$//g')" - tmdbExtraKey="$(echo "$tmdbExtraData" | jq -r .key)" - tmdbExtraType="$(echo "$tmdbExtraData" | jq -r .type)" - tmdbExtraOfficial="$(echo "$tmdbExtraData" | jq -r .official)" - - if [ "$tmdbExtraOfficial" != "true" ]; then - if [ "$extrasOfficialOnly" == "true" ]; then - log "$itemTitle :: $i of $tmdbVideosListDataIdsCount :: $tmdbExtraType :: Not official, skipping..." - continue - fi + if [ $tmdbVideosListDataIdsCount -le 0 ]; then + log "$itemTitle :: No Extras Found, skipping..." + exit fi - if [ "$tmdbExtraType" == "Featurette" ]; then - extraFolderName="featurettes" - elif [ "$tmdbExtraType" == "Trailer" ]; then - extraFolderName="trailers" - elif [ "$tmdbExtraType" == "Behind the Scenes" ]; then - extraFolderName="behind the scenes" - else - log "$itemTitle :: $i of $tmdbVideosListDataIdsCount :: $tmdbExtraType :: ERROR :: Extra Type Not found" - if [ -f "/config/logs/MovieExtras-InvalidType.txt" ]; then - if cat "/config/logs/MovieExtras-InvalidType.txt" | grep "$tmdbExtraType" | read; then + log "$itemTitle :: $tmdbVideosListDataIdsCount Extras Found!" + + i=0 + for id in $(echo "$tmdbVideosListDataIds"); do + i=$(( i + 1)) + updatePlex="false" + tmdbExtraData="$(echo "$tmdbVideosListData" | jq -r "select(.id==\"$id\")")" + tmdbExtraTitle="$(echo "$tmdbExtraData" | jq -r .name)" + tmdbExtraTitleClean="$(echo "$tmdbExtraTitle" | sed -e "s/[^[:alpha:][:digit:]$^&_+=()'%;{},.@#]/ /g" -e "s/ */ /g" | sed 's/^[.]*//' | sed 's/[.]*$//g' | sed 's/^ *//g' | sed 's/ *$//g')" + tmdbExtraKey="$(echo "$tmdbExtraData" | jq -r .key)" + tmdbExtraType="$(echo "$tmdbExtraData" | jq -r .type)" + tmdbExtraOfficial="$(echo "$tmdbExtraData" | jq -r .official)" + + if [ "$tmdbExtraOfficial" != "true" ]; then + if [ "$extrasOfficialOnly" == "true" ]; then + log "$itemTitle :: $i of $tmdbVideosListDataIdsCount :: $tmdbExtraType :: Not official, skipping..." continue + fi + fi + + if [ "$tmdbExtraType" == "Featurette" ]; then + extraFolderName="featurettes" + elif [ "$tmdbExtraType" == "Trailer" ]; then + extraFolderName="trailers" + elif [ "$tmdbExtraType" == "Behind the Scenes" ]; then + extraFolderName="behind the scenes" + else + log "$itemTitle :: $i of $tmdbVideosListDataIdsCount :: $tmdbExtraType :: ERROR :: Extra Type Not found" + if [ -f "/config/logs/MovieExtras-InvalidType.txt" ]; then + if cat "/config/logs/MovieExtras-InvalidType.txt" | grep "$tmdbExtraType" | read; then + continue + else + echo "$tmdbExtraType" >> "/config/logs/MovieExtras-InvalidType.txt" + fi + fi + echo "$tmdbExtraType" >> "/config/logs/MovieExtras-InvalidType.txt" + continue + fi + + if [ "$extrasSingle" == "true" ]; then + log "$itemTitle :: $i of $tmdbVideosListDataIdsCount :: $tmdbExtraType :: Single Trailer Enabled..." + if [ "$extrasKodiCompatibility" == "true" ] ; then + finalPath="$itemPath" + finalFileName="movie-trailer" else - echo "$tmdbExtraType" >> "/config/logs/MovieExtras-InvalidType.txt" + finalPath="$itemPath/$extraFolderName" + finalFileName="$itemFolder" fi + else + finalPath="$itemPath/$extraFolderName" + finalFileName="$tmdbExtraTitleClean" fi - echo "$tmdbExtraType" >> "/config/logs/MovieExtras-InvalidType.txt" - continue - fi - if [ ! -d "$itemPath/$extraFolderName" ]; then - mkdir -p "$itemPath/$extraFolderName" - chmod 777 "$itemPath/$extraFolderName" - chown abc:abc "$itemPath/$extraFolderName" - fi + if [ ! -d "$finalPath" ]; then + mkdir -p "$finalPath" + chmod 777 "$finalPath" + chown abc:abc "$finalPath" + fi - finalPath="$itemPath/$extraFolderName" - if [ -f "$finalPath/$tmdbExtraTitleClean.mkv" ]; then - log "$itemTitle :: $i of $tmdbVideosListDataIdsCount :: $tmdbExtraType :: $tmdbExtraTitle ($tmdbExtraKey) :: Already Downloaded, skipping..." - continue - fi + if [ -f "$finalPath/$finalFileName.mkv" ]; then + log "$itemTitle :: $i of $tmdbVideosListDataIdsCount :: $tmdbExtraType :: $tmdbExtraTitle ($tmdbExtraKey) :: Already Downloaded, skipping..." + if [ "$extrasSingle" == "true" ]; then + log "$itemTitle :: $i of $tmdbVideosListDataIdsCount :: $tmdbExtraType :: Finished processing single trailer download" + break + fi + continue + fi - log "$itemTitle :: $i of $tmdbVideosListDataIdsCount :: $tmdbExtraType :: $tmdbExtraTitle ($tmdbExtraKey) :: Downloading..." - if [ ! -z "$cookiesFile" ]; then - yt-dlp --cookies "$cookiesFile" -o "$finalPath/$tmdbExtraTitleClean" --write-sub --sub-lang $extrasLanguages --embed-subs --merge-output-format mkv --no-mtime --geo-bypass "https://www.youtube.com/watch?v=$tmdbExtraKey" &>/dev/null - else - yt-dlp -o "$finalPath/$tmdbExtraTitleClean" --write-sub --sub-lang $extrasLanguages --embed-subs --merge-output-format mkv --no-mtime --geo-bypass "https://www.youtube.com/watch?v=$tmdbExtraKey" &>/dev/null - fi - if [ -f "$finalPath/$tmdbExtraTitleClean.mkv" ]; then - log "$itemTitle :: $i of $tmdbVideosListDataIdsCount :: $tmdbExtraType :: $tmdbExtraTitle ($tmdbExtraKey) :: Compete" - chmod 666 "$finalPath/$tmdbExtraTitleClean.mkv" - chown abc:abc "$finalPath/$tmdbExtraTitleClean.mkv" - else - log "$itemTitle :: $i of $tmdbVideosListDataIdsCount :: $tmdbExtraType :: $tmdbExtraTitle ($tmdbExtraKey) :: ERROR :: Download Failed" - continue - fi + videoLanguages="$(echo "$extrasLanguages" | sed "s/-[[:alpha:]][[:alpha:]]//g")" + + log "$itemTitle :: $i of $tmdbVideosListDataIdsCount :: $tmdbExtraType :: $tmdbExtraTitle ($tmdbExtraKey) :: Downloading..." + if [ ! -z "$cookiesFile" ]; then + yt-dlp --cookies "$cookiesFile" -o "$finalPath/$finalFileName" --write-sub --sub-lang $videoLanguages --embed-subs --merge-output-format mkv --no-mtime --geo-bypass "https://www.youtube.com/watch?v=$tmdbExtraKey" &>/dev/null + else + yt-dlp -o "$finalPath/$finalFileName" --write-sub --sub-lang $videoLanguages --embed-subs --merge-output-format mkv --no-mtime --geo-bypass "https://www.youtube.com/watch?v=$tmdbExtraKey" &>/dev/null + fi + if [ -f "$finalPath/$finalFileName.mkv" ]; then + log "$itemTitle :: $i of $tmdbVideosListDataIdsCount :: $tmdbExtraType :: $tmdbExtraTitle ($tmdbExtraKey) :: Compete" + chmod 666 "$finalPath/$finalFileName.mkv" + chown abc:abc "$finalPath/$finalFileName.mkv" + else + log "$itemTitle :: $i of $tmdbVideosListDataIdsCount :: $tmdbExtraType :: $tmdbExtraTitle ($tmdbExtraKey) :: ERROR :: Download Failed" + continue + fi + + if python3 /usr/local/sma/manual.py --config "/sma.ini" -i "$finalPath/$finalFileName.mkv" -nt & /dev/null; then + sleep 0.01 + log "$itemTitle :: $i of $tmdbVideosListDataIdsCount :: $tmdbExtraType :: $tmdbExtraTitle :: Processed with SMA..." + rm /usr/local/sma/config/*log* + else + log "$itemTitle :: $i of $tmdbVideosListDataIdsCount :: $tmdbExtraType :: $tmdbExtraTitle :: ERROR :: SMA Processing Error" + rm "$finalPath/$finalFileName.mkv" + log "$itemTitle :: $i of $tmdbVideosListDataIdsCount :: $tmdbExtraType :: $tmdbExtraTitle :: INFO: deleted: $finalPath/$finalFileName.mkv" + fi + + updatePlex="true" + + if [ "$extrasSingle" == "true" ]; then + log "$itemTitle :: $i of $tmdbVideosListDataIdsCount :: $tmdbExtraType :: Finished processing single trailer download" + break + fi + + done - if python3 /usr/local/sma/manual.py --config "/sma.ini" -i "$finalPath/$tmdbExtraTitleClean.mkv" -nt &>/dev/null; then - sleep 0.01 - log "$itemTitle :: $i of $tmdbVideosListDataIdsCount :: $tmdbExtraType :: $tmdbExtraTitle :: Processed with SMA..." - rm /usr/local/sma/config/*log* - else - log "$itemTitle :: $i of $tmdbVideosListDataIdsCount :: $tmdbExtraType :: $tmdbExtraTitle :: ERROR :: SMA Processing Error" - rm "$finalPath/$tmdbExtraTitleClean.mkv" - log "$itemTitle :: $i of $tmdbVideosListDataIdsCount :: $tmdbExtraType :: $tmdbExtraTitle :: INFO: deleted: $finalPath/$tmdbExtraTitleClean.mkv" - fi - done # Process item with PlexNotify.bash if plexToken is configured if [ ! -z "$plexToken" ]; then - log "Using PlexNotify.bash to update Plex...." - bash /config/extended/scripts/PlexNotify.bash "$itemPath" + # Always update plex if extra is downloaded + if [ "$updatePlex" == "true" ]; then + log "Using PlexNotify.bash to update Plex...." + bash /config/extended/scripts/PlexNotify.bash "$itemPath" + exit + fi + + # Do not notify plex if this script was triggered by the AutoExtras.bash and no Extras were downloaded + if [ "$autoScan" == "true" ]; then + log "Skipping plex notification, not needed...." + exit + else + log "Using PlexNotify.bash to update Plex...." + bash /config/extended/scripts/PlexNotify.bash "$itemPath" + exit + fi fi exit