diff --git a/root/scripts/Extras.bash b/root/scripts/Extras.bash index 88a5b62..e724e35 100644 --- a/root/scripts/Extras.bash +++ b/root/scripts/Extras.bash @@ -1,5 +1,5 @@ #!/usr/bin/env bash -scriptVersion="1.0.008" +scriptVersion="1.0.009" arrEventType="$sonarr_eventtype" arrItemId=$sonarr_series_id tmdbApiKey="3b7751e3179f796565d88fdb2fcdf426" @@ -48,13 +48,14 @@ fi exec &>> "/config/logs/Extras.txt" chmod 666 "/config/logs/Extras.txt" +# Check to see if Extras are enabled via ENV if [ "$enableExtras" != "true" ]; then log "Script disabled, exiting..." log "Enable by setting enableExtras=true" exit fi - +# Get series information arrItemData=$(curl -s "$arrUrl/api/v3/series/$arrItemId?apikey=$arrApiKey") itemTitle=$(echo "$arrItemData" | jq -r .title) itemHasFile=$(echo "$arrItemData" | jq -r .hasFile) @@ -62,156 +63,168 @@ itemPath="$(echo "$arrItemData" | jq -r ".path")" imdbId="$(echo "$arrItemData" | jq -r ".imdbId")" tmdbId=$(curl -s "https://api.themoviedb.org/3/find/$imdbId?api_key=$tmdbApiKey&external_source=imdb_id" | jq -r .tv_results[].id) - -if find /config -type f -name "cookies.txt" | read; then - cookiesFile="$(find /config -type f -iname "cookies.txt" | head -n1)" - log "$itemTitle :: Cookies File Found!" -else - log "$itemTitle :: Cookies File Not Found!" - cookiesFile="" -fi - -if [ -f "/config/extended/logs/extras/$tmdbId" ]; then - find "/config/extended/logs/extras" -type f -mtime +7 -name "$tmdbId" -delete -fi - -if [ -f "/config/extended/logs/extras/$tmdbId" ]; then - log "$itemTitle :: Already processed Extras, waiting 7 days to re-check..." - exit -fi - +# Check if series folder path exists if [ ! -d "$itemPath" ]; then log "$itemTitle :: ERROR: Item Path does not exist ($itemPath), Skipping..." exit fi -IFS=',' read -r -a filters <<< "$extrasLanguages" -for filter in "${filters[@]}" -do - tmdbVideosListData=$(curl -s "https://api.themoviedb.org/3/tv/$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 ".id") - tmdbVideosListDataIdsCount=$(echo "$tmdbVideosListData" | jq -r ".id" | wc -l) +DownloadExtras () { + + # Check for cookies file + if find /config -type f -name "cookies.txt" | read; then + cookiesFile="$(find /config -type f -iname "cookies.txt" | head -n1)" + log "$itemTitle :: Cookies File Found!" else - 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 + log "$itemTitle :: Cookies File Not Found!" + cookiesFile="" fi - if [ $tmdbVideosListDataIdsCount -le 0 ]; then - log "$itemTitle :: No Extras Found, skipping..." - exit - fi + IFS=',' read -r -a filters <<< "$extrasLanguages" + for filter in "${filters[@]}" + do + tmdbVideosListData=$(curl -s "https://api.themoviedb.org/3/tv/$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 ".id") + tmdbVideosListDataIdsCount=$(echo "$tmdbVideosListData" | jq -r ".id" | wc -l) + else + 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 + 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 - extraFolderName="other" - log "$itemTitle :: $i of $tmdbVideosListDataIdsCount :: $tmdbExtraType :: ERROR :: Extra Type Not found, placing in \"other\" folder..." - if [ -f "/config/logs/Extras-InvalidType.txt" ]; then - if cat "/config/logs/Extras-InvalidType.txt" | grep "$tmdbExtraType" | read; then - sleep 0.01 - else - echo "$tmdbExtraType" >> "/config/logs/Extras-InvalidType.txt" + 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 fi - fi - if [ ! -d "$itemPath/$extraFolderName" ]; then - mkdir -p "$itemPath/$extraFolderName" - chmod 777 "$itemPath/$extraFolderName" - fi + if [ "$tmdbExtraType" == "Featurette" ]; then + extraFolderName="featurettes" + elif [ "$tmdbExtraType" == "Trailer" ]; then + extraFolderName="trailers" + elif [ "$tmdbExtraType" == "Behind the Scenes" ]; then + extraFolderName="behind the scenes" + else + extraFolderName="other" + log "$itemTitle :: $i of $tmdbVideosListDataIdsCount :: $tmdbExtraType :: ERROR :: Extra Type Not found, placing in \"other\" folder..." + if [ -f "/config/logs/Extras-InvalidType.txt" ]; then + if cat "/config/logs/Extras-InvalidType.txt" | grep "$tmdbExtraType" | read; then + sleep 0.01 + else + echo "$tmdbExtraType" >> "/config/logs/Extras-InvalidType.txt" + fi + fi + fi - finalPath="$itemPath/$extraFolderName" + if [ ! -d "$itemPath/$extraFolderName" ]; then + mkdir -p "$itemPath/$extraFolderName" + chmod 777 "$itemPath/$extraFolderName" + fi - if [ -f "$finalPath/$tmdbExtraTitleClean.mkv" ]; then - log "$itemTitle :: $i of $tmdbVideosListDataIdsCount :: $tmdbExtraType :: $tmdbExtraTitle ($tmdbExtraKey) :: Already Downloaded, skipping..." - continue - fi + finalPath="$itemPath/$extraFolderName" - videoLanguages="$(echo "$extrasLanguages" | sed "s/-[[:alpha:]][[:alpha:]]//g")" + if [ -f "$finalPath/$tmdbExtraTitleClean.mkv" ]; then + log "$itemTitle :: $i of $tmdbVideosListDataIdsCount :: $tmdbExtraType :: $tmdbExtraTitle ($tmdbExtraKey) :: Already Downloaded, skipping..." + 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 $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/$tmdbExtraTitleClean" --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/$tmdbExtraTitleClean.mkv" ]; then - log "$itemTitle :: $i of $tmdbVideosListDataIdsCount :: $tmdbExtraType :: $tmdbExtraTitle ($tmdbExtraKey) :: Compete" - chmod 666 "$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")" - 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 - updatePlex="true" + log "$itemTitle :: $i of $tmdbVideosListDataIdsCount :: $tmdbExtraType :: $tmdbExtraTitle ($tmdbExtraKey) :: Downloading..." + if [ ! -z "$cookiesFile" ]; then + yt-dlp --cookies "$cookiesFile" -o "$finalPath/$tmdbExtraTitleClean" --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/$tmdbExtraTitleClean" --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/$tmdbExtraTitleClean.mkv" ]; then + log "$itemTitle :: $i of $tmdbVideosListDataIdsCount :: $tmdbExtraType :: $tmdbExtraTitle ($tmdbExtraKey) :: Compete" + chmod 666 "$finalPath/$tmdbExtraTitleClean.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/$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 + updatePlex="true" + done done -done -# Mark Complete -if [ ! -d "/config/extended/logs/extras" ]; then - mkdir -p "/config/extended/logs/extras" - chmod 777 "/config/extended/logs/extras" -fi -log "$itemTitle :: Marking/logging as Extras downloads complete (/config/extended/logs/extras/$tmdbId)" -touch "/config/extended/logs/extras/$tmdbId" -chmod 666 "/config/extended/logs/extras/$tmdbId" - -# Process item with PlexNotify.bash if plexToken is configured -if [ ! -z "$plexToken" ]; then - # Always update plex if extra is downloaded - if [ "$updatePlex" == "true" ]; then - log "$itemTitle :: Using PlexNotify.bash to update Plex...." - bash /config/extended/scripts/PlexNotify.bash "$itemPath" - exit + # Mark Series Extras Complete + if [ ! -d "/config/extended/logs/extras" ]; then + mkdir -p "/config/extended/logs/extras" + chmod 777 "/config/extended/logs/extras" fi - - # Do not notify plex if this script was triggered by the AutoExtras.bash and no Extras were downloaded - if [ "$autoScan" == "true" ]; then - log "$itemTitle :: Skipping plex notification, not needed...." - exit - else - log "$itemTitle :: Using PlexNotify.bash to update Plex...." - bash /config/extended/scripts/PlexNotify.bash "$itemPath" - exit + log "$itemTitle :: Marking/logging as Extras downloads complete (/config/extended/logs/extras/$tmdbId)" + touch "/config/extended/logs/extras/$tmdbId" + chmod 666 "/config/extended/logs/extras/$tmdbId" + +} + +NotifyPlex () { + # Process item with PlexNotify.bash if plexToken is configured + if [ ! -z "$plexToken" ]; then + # Always update plex if extra is downloaded + if [ "$updatePlex" == "true" ]; then + log "$itemTitle :: 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 "$itemTitle :: Skipping plex notification, not needed...." + exit + else + log "$itemTitle :: Using PlexNotify.bash to update Plex...." + bash /config/extended/scripts/PlexNotify.bash "$itemPath" + exit + fi fi +} + +# Check if series has been previously processed +if [ -f "/config/extended/logs/extras/$tmdbId" ]; then + # Delete log file older than 7 days, to allow re-processing + find "/config/extended/logs/extras" -type f -mtime +7 -name "$tmdbId" -delete fi +if [ -f "/config/extended/logs/extras/$tmdbId" ]; then + log "$itemTitle :: Already processed Extras, waiting 7 days to re-check..." + NotifyPlex + exit +else + DownloadExtras + NotifyPlex +fi exit