1.3 - Support trimming via series "Tag"

#105
This commit is contained in:
RandomNinjaAtk 2023-11-02 11:12:37 +00:00 committed by GitHub
parent f1a4fa626e
commit e54383c612
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -1,6 +1,6 @@
#!/usr/bin/env bash #!/usr/bin/env bash
scriptVersion="1.2" scriptVersion="1.3"
scriptName="DailySeriesEpisodeTrimmer" scriptName="SeriesEpisodeTrimmer"
#### Import Settings #### Import Settings
source /config/extended.conf source /config/extended.conf
@ -27,57 +27,69 @@ seriesId=$sonarr_series_id
seriesData=$(curl -s "$arrUrl/api/v3/series/$seriesId?apikey=$arrApiKey") seriesData=$(curl -s "$arrUrl/api/v3/series/$seriesId?apikey=$arrApiKey")
seriesTitle=$(echo $seriesData | jq -r ".title") seriesTitle=$(echo $seriesData | jq -r ".title")
seriesType=$(echo $seriesData | jq -r ".seriesType") seriesType=$(echo $seriesData | jq -r ".seriesType")
seriesTags=$(echo $seriesData | jq -r ".tags[]")
seriesEpisodeData=$(curl -s "$arrUrl/api/v3/episode?seriesId=$seriesId&apikey=$arrApiKey") seriesEpisodeData=$(curl -s "$arrUrl/api/v3/episode?seriesId=$seriesId&apikey=$arrApiKey")
seriesEpisodeIds=$(echo "$seriesEpisodeData" | jq -r " . | sort_by(.airDate) | reverse | .[] | select(.hasFile==true) | .id") seriesEpisodeIds=$(echo "$seriesEpisodeData" | jq -r " . | sort_by(.airDate) | reverse | .[] | select(.hasFile==true) | .id")
seriesEpisodeIdsCount=$(echo "$seriesEpisodeIds" | wc -l) seriesEpisodeIdsCount=$(echo "$seriesEpisodeIds" | wc -l)
# If sonarr series is tagged, match via tag to support series that are not considered daily
if [ -z "$sonarrSeriesEpisodeTrimmerTag" ]; then
tagMatch="false"
else
tagMatch="false"
for tagId in $seriesTags; do
tagLabel="$(curl -s "$arrUrl/api/v3/tag/$tagId?apikey=$arrApiKey" | jq -r ".label")"
if [ "$sonarrSeriesEpisodeTrimmerTag" == "$tagLabel" ]; then
tagMatch="true"
break
fi
done
fi
# Verify series is marked as "daily" type by sonarr, skip if not... # Verify series is marked as "daily" type by sonarr, skip if not...
if [ $seriesType != "daily" ]; then if [ $seriesType != "daily" ] && [ "$tagMatch" == "false" ]; then
log "$seriesTitle (ID:$seriesId) :: TYPE :: $seriesType :: ERROR :: Non-daily series, skipping..." log "$seriesTitle (ID:$seriesId) :: ERROR :: Series does not match TYPE: Daily or TAG: $sonarrSeriesEpisodeTrimmerTag, skipping..."
exit exit
fi fi
# Skip processing if less than 14 episodes were found to be downloaded # Skip processing if less than 14 episodes were found to be downloaded
if [ $seriesEpisodeIdsCount -lt $maximumDailyEpisodes ]; then if [ $seriesEpisodeIdsCount -lt $maximumDailyEpisodes ]; then
log "$seriesTitle (ID:$seriesId) :: TYPE :: $seriesType :: ERROR :: Series has not exceeded $maximumDailyEpisodes downloaded episodes ($seriesEpisodeIdsCount files found), skipping..." log "$seriesTitle (ID:$seriesId) :: ERROR :: Series has not exceeded $maximumDailyEpisodes downloaded episodes ($seriesEpisodeIdsCount files found), skipping..."
exit exit
fi fi
# Begin processing "daily" series type # Begin processing "daily" series type
if [ $seriesType == daily ]; then seriesEpisodeData=$(curl -s "$arrUrl/api/v3/episode?seriesId=$seriesId&apikey=$arrApiKey")
seriesEpisodeData=$(curl -s "$arrUrl/api/v3/episode?seriesId=$seriesId&apikey=$arrApiKey") seriesEpisodeIds=$(echo "$seriesEpisodeData"| jq -r " . | sort_by(.airDate) | reverse | .[] | select(.hasFile==true) | .id")
seriesEpisodeIds=$(echo "$seriesEpisodeData"| jq -r " . | sort_by(.airDate) | reverse | .[] | select(.hasFile==true) | .id") processId=0
processId=0 seriesRefreshRequired=false
seriesRefreshRequired=false for id in $seriesEpisodeIds; do
for id in $seriesEpisodeIds; do processId=$(( $processId + 1 ))
processId=$(( $processId + 1 )) episodeData=$(curl -s "http://localhost:8989/api/v3/episode/$id?apikey=$arrApiKey")
if [ $processId -gt $maximumDailyEpisodes ]; then episodeSeriesId=$(echo "$episodeData" | jq -r ".seriesId")
episodeData=$(curl -s "http://localhost:8989/api/v3/episode/$id?apikey=$arrApiKey") if [ $processId -gt $maximumDailyEpisodes ]; then
episodeSeriesId=$(echo "$episodeData" | jq -r ".seriesId") episodeTitle=$(echo "$episodeData" | jq -r ".title")
episodeTitle=$(echo "$episodeData" | jq -r ".title") episodeSeasonNumber=$(echo "$episodeData" | jq -r ".seasonNumber")
episodeSeasonNumber=$(echo "$episodeData" | jq -r ".seasonNumber") episodeNumber=$(echo "$episodeData" | jq -r ".episodeNumber")
episodeNumber=$(echo "$episodeData" | jq -r ".episodeNumber") episodeAirDate=$(echo "$episodeData" | jq -r ".airDate")
episodeAirDate=$(echo "$episodeData" | jq -r ".airDate") episodeFileId=$(echo "$episodeData" | jq -r ".episodeFileId")
episodeFileId=$(echo "$episodeData" | jq -r ".episodeFileId")
# Unmonitor downloaded episode if greater than 14 downloaded episodes
log "$seriesTitle (ID:$episodeSeriesId) :: S${episodeSeasonNumber}E${episodeNumber} :: $episodeTitle :: Unmonitored Episode ID :: $id"
umonitorEpisode=$(curl -s "$arrUrl/api/v3/episode/monitor?apikey=$arrApiKey" -X PUT --data-raw "{\"episodeIds\":[$id],\"monitored\":false}")
# Unmonitor downloaded episode if greater than 14 downloaded episodes # Delete downloaded episode if greater than 14 downloaded episodes
log "$seriesTitle (ID:$episodeSeriesId) :: TYPE :: $seriesType :: S${episodeSeasonNumber}E${episodeNumber} :: $episodeAirDate :: $episodeTitle :: Unmonitored Episode ID :: $id" log "$seriesTitle (ID:$episodeSeriesId) :: S${episodeSeasonNumber}E${episodeNumber} :: $episodeTitle :: Deleted File ID :: $episodeFileId"
umonitorEpisode=$(curl -s "$arrUrl/api/v3/episode/monitor?apikey=$arrApiKey" -X PUT --data-raw "{\"episodeIds\":[$id],\"monitored\":false}") deleteFile=$(curl -s "$arrUrl/api/v3/episodefile/$episodeFileId?apikey=$arrApiKey" -X DELETE)
seriesRefreshRequired=true
# Delete downloaded episode if greater than 14 downloaded episodes else
log "$seriesTitle (ID:$episodeSeriesId) :: TYPE :: $seriesType :: S${episodeSeasonNumber}E${episodeNumber} :: $episodeAirDate :: $episodeTitle :: Deleted File ID :: $episodeFileId" # Skip if less than required 14 downloaded episodes exist
deleteFile=$(curl -s "$arrUrl/api/v3/episodefile/$episodeFileId?apikey=$arrApiKey" -X DELETE) log "$seriesTitle (ID:$episodeSeriesId) :: Skipping Episode ID :: $id"
seriesRefreshRequired=true
else
# Skip if less than required 14 downloaded episodes exist
log "$seriesTitle (ID:$episodeSeriesId) :: TYPE :: $seriesType :: Skipping Episode ID :: $id"
fi
done
if [ "$seriesRefreshRequired" = "true" ]; then
# Refresh Series after changes
log "$seriesTitle (ID:$episodeSeriesId) :: TYPE :: $seriesType :: Refresh Series"
refreshSeries=$(curl -s "$arrUrl/api/v3/command?apikey=$arrApiKey" -X POST --data-raw "{\"name\":\"RefreshSeries\",\"seriesId\":$episodeSeriesId}")
fi fi
done
if [ "$seriesRefreshRequired" = "true" ]; then
# Refresh Series after changes
log "$seriesTitle (ID:$episodeSeriesId) :: Refresh Series"
refreshSeries=$(curl -s "$arrUrl/api/v3/command?apikey=$arrApiKey" -X POST --data-raw "{\"name\":\"RefreshSeries\",\"seriesId\":$episodeSeriesId}")
fi fi
exit exit