Create Extras.bash
This commit is contained in:
parent
b01b500691
commit
49b576463f
1 changed files with 257 additions and 0 deletions
257
radarr/Extras.bash
Normal file
257
radarr/Extras.bash
Normal file
|
@ -0,0 +1,257 @@
|
|||
#!/usr/bin/env bash
|
||||
scriptVersion="1.0.4"
|
||||
arrEventType="$radarr_eventtype"
|
||||
arrItemId=$radarr_movie_id
|
||||
tmdbApiKey="3b7751e3179f796565d88fdb2fcdf426"
|
||||
autoScan="false"
|
||||
updatePlex="false"
|
||||
ytdlpExtraOpts="--user-agent facebookexternalhit/1.1"
|
||||
|
||||
if [ ! -z "$1" ]; then
|
||||
arrItemId="$1"
|
||||
autoScan="true"
|
||||
else
|
||||
autoScan="false"
|
||||
fi
|
||||
|
||||
# Debugging
|
||||
#arrItemId=1
|
||||
extrasLanguages="en-US"
|
||||
extrasType="all"
|
||||
extrasOfficialOnly="false"
|
||||
extrasKodiCompatibility="false"
|
||||
extrasSingle="false"
|
||||
enableExtras="true"
|
||||
videoFormat="bv[width>=1280]+ba"
|
||||
|
||||
if [ -z "$arrUrl" ] || [ -z "$arrApiKey" ]; then
|
||||
arrUrlBase="$(cat /config/config.xml | xq | jq -r .Config.UrlBase)"
|
||||
if [ "$arrUrlBase" == "null" ]; then
|
||||
arrUrlBase=""
|
||||
else
|
||||
arrUrlBase="/$(echo "$arrUrlBase" | sed "s/\///g")"
|
||||
fi
|
||||
arrApiKey="$(cat /config/config.xml | xq | jq -r .Config.ApiKey)"
|
||||
arrPort="$(cat /config/config.xml | xq | jq -r .Config.Port)"
|
||||
arrUrl="http://127.0.0.1:${arrPort}${arrUrlBase}"
|
||||
fi
|
||||
|
||||
# auto-clean up log file to reduce space usage
|
||||
if [ -f "/config/logs/MovieExtras.txt" ]; then
|
||||
find /config/logs -type f -name "MovieExtras.txt" -size +1024k -delete
|
||||
fi
|
||||
|
||||
if [ ! -f "/config/logs/MovieExtras.txt" ]; then
|
||||
touch "/config/logs/MovieExtras.txt"
|
||||
chmod 777 "/config/logs/MovieExtras.txt"
|
||||
fi
|
||||
exec &> >(tee -a "/config/logs/MovieExtras.txt")
|
||||
|
||||
log () {
|
||||
m_time=`date "+%F %T"`
|
||||
echo $m_time" :: MovieExtras :: $scriptVersion :: "$1
|
||||
}
|
||||
|
||||
if [ "$arrEventType" == "Test" ]; then
|
||||
log "Tested Successfully"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ "$enableExtras" != "true" ]; then
|
||||
log "Script disabled, exiting..."
|
||||
log "Enable by setting enableExtras=true"
|
||||
exit
|
||||
fi
|
||||
|
||||
if [ "$autoScan" == "true" ]; then
|
||||
if [ ! -z "$2" ]; then
|
||||
cookiesFile="$2"
|
||||
else
|
||||
cookiesFile=""
|
||||
fi
|
||||
else
|
||||
if find /config -type f -iname "cookies.txt" | read; then
|
||||
cookiesFile="$(find /config -type f -iname "cookies.txt" | head -n1)"
|
||||
log "Cookies File Found!"
|
||||
else
|
||||
log "Cookies File Not Found!"
|
||||
cookiesFile=""
|
||||
fi
|
||||
fi
|
||||
|
||||
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")"
|
||||
itemFileName=$(curl -s "$arrUrl/api/v3/moviefile?movieId=$arrItemId&apikey=$arrApiKey" | jq -r .[].relativePath)
|
||||
itemFileNameNoExt="${itemFileName%.*}"
|
||||
itemFolder="$(basename "$itemPath")"
|
||||
itemRelativePath="$(echo "$arrItemData" | jq -r ".movieFile.relativePath")"
|
||||
itemTrailerId="$(echo "$arrItemData" | jq -r ".youTubeTrailerId")"
|
||||
tmdbId="$(echo "$arrItemData" | jq -r ".tmdbId")"
|
||||
|
||||
|
||||
|
||||
if [ ! -d "$itemPath" ]; then
|
||||
log "$itemTitle :: ERROR: Item Path does not exist ($itemPath), Skipping..."
|
||||
exit
|
||||
fi
|
||||
|
||||
if [ "$extrasSingle" == "true" ]; then
|
||||
extrasType="trailer"
|
||||
fi
|
||||
|
||||
IFS=',' read -r -a filters <<< "$extrasLanguages"
|
||||
for filter in "${filters[@]}"
|
||||
do
|
||||
if [ "$useProxy" != "true" ]; then
|
||||
tmdbVideosListData=$(curl -s "https://api.themoviedb.org/3/movie/$tmdbId/videos?api_key=$tmdbApiKey&language=$filter" | jq -r '.results[] | select(.site=="YouTube")')
|
||||
else
|
||||
tmdbVideosListData=$(curl -x $proxyUrl:$proxyPort --proxy-user $proxyUsername:$proxyPassword -s "https://api.themoviedb.org/3/movie/$tmdbId/videos?api_key=$tmdbApiKey&language=$filter" | jq -r '.results[] | select(.site=="YouTube")')
|
||||
fi
|
||||
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
|
||||
|
||||
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
|
||||
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"
|
||||
fi
|
||||
|
||||
if [ "$extrasSingle" == "true" ]; then
|
||||
log "$itemTitle :: $i of $tmdbVideosListDataIdsCount :: $tmdbExtraType :: Single Trailer Enabled..."
|
||||
if [ "$extrasKodiCompatibility" == "true" ] ; then
|
||||
finalPath="$itemPath"
|
||||
finalFileName="$itemFileNameNoExt-trailer"
|
||||
else
|
||||
finalPath="$itemPath/$extraFolderName"
|
||||
if [ -f "$finalPath/$tmdbExtraTitleClean.mkv" ]; then
|
||||
rm "$finalPath/$tmdbExtraTitleClean.mkv"
|
||||
fi
|
||||
finalFileName="$itemFolder"
|
||||
fi
|
||||
else
|
||||
finalPath="$itemPath/$extraFolderName"
|
||||
if [ "$extraFolderName" == "other" ]; then
|
||||
finalFileName="$tmdbExtraTitleClean ($tmdbExtraType)"
|
||||
else
|
||||
finalFileName="$tmdbExtraTitleClean"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ ! -d "$finalPath" ]; then
|
||||
mkdir -p "$finalPath"
|
||||
chmod 777 "$finalPath"
|
||||
fi
|
||||
|
||||
|
||||
if [ -f "$finalPath/$finalFileName.mkv" ]; then
|
||||
log "$itemTitle :: $i of $tmdbViscriptsdeosListDataIdsCount :: $tmdbExtraType :: $tmdbExtraTitle ($tmdbExtraKey) :: Already Downloaded, skipping..."
|
||||
if [ "$extrasSingle" == "true" ]; then
|
||||
log "$itemTitle :: $i of $tmdbVideosListDataIdsCount :: $tmdbExtraType :: Finished processing single trailer download"
|
||||
break
|
||||
fi
|
||||
continue
|
||||
elif [ -f "$finalPath/movie-trailer.mkv" ]; then
|
||||
if [ "$extrasKodiCompatibility" == "true" ] ; then
|
||||
log "$itemTitle :: $i of $tmdbVideosListDataIdsCount :: $tmdbExtraType :: Removing old \"movie-trailer.mkv\" to replace with Kodi naming..."
|
||||
rm "$finalPath/movie-trailer.mkv"
|
||||
fi
|
||||
fi
|
||||
|
||||
videoLanguages="$(echo "$extrasLanguages" | sed "s/-[[:alpha:]][[:alpha:]]//g")"
|
||||
|
||||
log "$itemTitle :: $i of $tmdbVideosListDataIdsCount :: $tmdbExtraType :: $tmdbExtraTitle ($tmdbExtraKey) :: Downloading (yt-dlp :: $videoFormat)..."
|
||||
if [ ! -z "$cookiesFile" ]; then
|
||||
yt-dlp -f "$videoFormat" --no-video-multistreams --cookies "$cookiesFile" -o "$finalPath/$finalFileName" --write-sub --sub-lang $videoLanguages --embed-subs --merge-output-format mkv --no-mtime --geo-bypass $ytdlpExtraOpts "https://www.youtube.com/watch?v=$tmdbExtraKey"
|
||||
else
|
||||
yt-dlp -f "$videoFormat" --no-video-multistreams -o "$finalPath/$finalFileName" --write-sub --sub-lang $videoLanguages --embed-subs --merge-output-format mkv --no-mtime --geo-bypass $ytdlpExtraOpts "https://www.youtube.com/watch?v=$tmdbExtraKey"
|
||||
fi
|
||||
if [ -f "$finalPath/$finalFileName.mkv" ]; then
|
||||
log "$itemTitle :: $i of $tmdbVideosListDataIdsCount :: $tmdbExtraType :: $tmdbExtraTitle ($tmdbExtraKey) :: Compete"
|
||||
chmod 666 "$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 "/config/extended/sma.ini" -i "$finalPath/$finalFileName.mkv" -nt; 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
|
||||
|
||||
done
|
||||
|
||||
# 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 "Using PlexNotify.bash to update Plex...."
|
||||
bash /config/extended/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/PlexNotify.bash "$itemPath"
|
||||
exit
|
||||
fi
|
||||
fi
|
||||
|
||||
exit
|
Loading…
Reference in a new issue