11#! /usr/bin/env bash
2- scriptVersion=" 1.2 "
3- scriptName=" DailySeriesEpisodeTrimmer "
2+ scriptVersion=" 1.3 "
3+ scriptName=" SeriesEpisodeTrimmer "
44
55# ### Import Settings
66source /config/extended.conf
@@ -27,57 +27,69 @@ seriesId=$sonarr_series_id
2727seriesData=$( curl -s " $arrUrl /api/v3/series/$seriesId ?apikey=$arrApiKey " )
2828seriesTitle=$( echo $seriesData | jq -r " .title" )
2929seriesType=$( echo $seriesData | jq -r " .seriesType" )
30+ seriesTags=$( echo $seriesData | jq -r " .tags[]" )
3031seriesEpisodeData=$( curl -s " $arrUrl /api/v3/episode?seriesId=$seriesId &apikey=$arrApiKey " )
3132seriesEpisodeIds=$( echo " $seriesEpisodeData " | jq -r " . | sort_by(.airDate) | reverse | .[] | select(.hasFile==true) | .id" )
3233seriesEpisodeIdsCount=$( echo " $seriesEpisodeIds " | wc -l)
3334
35+ # If sonarr series is tagged, match via tag to support series that are not considered daily
36+ if [ -z " $sonarrSeriesEpisodeTrimmerTag " ]; then
37+ tagMatch=" false"
38+ else
39+ tagMatch=" false"
40+ for tagId in $seriesTags ; do
41+ tagLabel=" $( curl -s " $arrUrl /api/v3/tag/$tagId ?apikey=$arrApiKey " | jq -r " .label" ) "
42+ if [ " $sonarrSeriesEpisodeTrimmerTag " == " $tagLabel " ]; then
43+ tagMatch=" true"
44+ break
45+ fi
46+ done
47+ fi
3448# Verify series is marked as "daily" type by sonarr, skip if not...
35- if [ $seriesType != " daily" ]; then
36- log " $seriesTitle (ID:$seriesId ) :: TYPE :: $seriesType :: ERROR :: Non-daily series , skipping..."
49+ if [ $seriesType != " daily" ] && [ " $tagMatch " == " false " ] ; then
50+ log " $seriesTitle (ID:$seriesId ) :: ERROR :: Series does not match TYPE: Daily or TAG: $sonarrSeriesEpisodeTrimmerTag , skipping..."
3751 exit
3852fi
3953
54+
4055# Skip processing if less than 14 episodes were found to be downloaded
4156if [ $seriesEpisodeIdsCount -lt $maximumDailyEpisodes ]; then
42- log " $seriesTitle (ID:$seriesId ) :: TYPE :: $seriesType :: ERROR :: Series has not exceeded $maximumDailyEpisodes downloaded episodes ($seriesEpisodeIdsCount files found), skipping..."
57+ log " $seriesTitle (ID:$seriesId ) :: ERROR :: Series has not exceeded $maximumDailyEpisodes downloaded episodes ($seriesEpisodeIdsCount files found), skipping..."
4358 exit
4459fi
4560
4661# Begin processing "daily" series type
47- if [ $seriesType == daily ]; then
48- seriesEpisodeData=$( curl -s " $arrUrl /api/v3/episode?seriesId=$seriesId &apikey=$arrApiKey " )
49- seriesEpisodeIds=$( echo " $seriesEpisodeData " | jq -r " . | sort_by(.airDate) | reverse | .[] | select(.hasFile==true) | .id" )
50- processId=0
51- seriesRefreshRequired=false
52- for id in $seriesEpisodeIds ; do
53- processId=$(( $processId + 1 ))
54- if [ $processId -gt $maximumDailyEpisodes ]; then
55- episodeData=$( curl -s " http://localhost:8989/api/v3/episode/$id ?apikey=$arrApiKey " )
56- episodeSeriesId=$( echo " $episodeData " | jq -r " .seriesId" )
57- episodeTitle=$( echo " $episodeData " | jq -r " .title" )
58- episodeSeasonNumber=$( echo " $episodeData " | jq -r " .seasonNumber" )
59- episodeNumber=$( echo " $episodeData " | jq -r " .episodeNumber" )
60- episodeAirDate=$( echo " $episodeData " | jq -r " .airDate" )
61- episodeFileId=$( echo " $episodeData " | jq -r " .episodeFileId" )
62-
63- # Unmonitor downloaded episode if greater than 14 downloaded episodes
64- log " $seriesTitle (ID:$episodeSeriesId ) :: TYPE :: $seriesType :: S${episodeSeasonNumber} E${episodeNumber} :: $episodeAirDate :: $episodeTitle :: Unmonitored Episode ID :: $id "
65- umonitorEpisode=$( curl -s " $arrUrl /api/v3/episode/monitor?apikey=$arrApiKey " -X PUT --data-raw " {\" episodeIds\" :[$id ],\" monitored\" :false}" )
62+ seriesEpisodeData=$( curl -s " $arrUrl /api/v3/episode?seriesId=$seriesId &apikey=$arrApiKey " )
63+ seriesEpisodeIds=$( echo " $seriesEpisodeData " | jq -r " . | sort_by(.airDate) | reverse | .[] | select(.hasFile==true) | .id" )
64+ processId=0
65+ seriesRefreshRequired=false
66+ for id in $seriesEpisodeIds ; do
67+ processId=$(( $processId + 1 ))
68+ episodeData=$( curl -s " http://localhost:8989/api/v3/episode/$id ?apikey=$arrApiKey " )
69+ episodeSeriesId=$( echo " $episodeData " | jq -r " .seriesId" )
70+ if [ $processId -gt $maximumDailyEpisodes ]; then
71+ episodeTitle=$( echo " $episodeData " | jq -r " .title" )
72+ episodeSeasonNumber=$( echo " $episodeData " | jq -r " .seasonNumber" )
73+ episodeNumber=$( echo " $episodeData " | jq -r " .episodeNumber" )
74+ episodeAirDate=$( echo " $episodeData " | jq -r " .airDate" )
75+ episodeFileId=$( echo " $episodeData " | jq -r " .episodeFileId" )
76+
77+ # Unmonitor downloaded episode if greater than 14 downloaded episodes
78+ log " $seriesTitle (ID:$episodeSeriesId ) :: S${episodeSeasonNumber} E${episodeNumber} :: $episodeTitle :: Unmonitored Episode ID :: $id "
79+ umonitorEpisode=$( curl -s " $arrUrl /api/v3/episode/monitor?apikey=$arrApiKey " -X PUT --data-raw " {\" episodeIds\" :[$id ],\" monitored\" :false}" )
6680
67- # Delete downloaded episode if greater than 14 downloaded episodes
68- log " $seriesTitle (ID:$episodeSeriesId ) :: TYPE :: $seriesType :: S${episodeSeasonNumber} E${episodeNumber} :: $episodeAirDate :: $episodeTitle :: Deleted File ID :: $episodeFileId "
69- deleteFile=$( curl -s " $arrUrl /api/v3/episodefile/$episodeFileId ?apikey=$arrApiKey " -X DELETE)
70- seriesRefreshRequired=true
71- else
72- # Skip if less than required 14 downloaded episodes exist
73- log " $seriesTitle (ID:$episodeSeriesId ) :: TYPE :: $seriesType :: Skipping Episode ID :: $id "
74- fi
75- done
76- if [ " $seriesRefreshRequired " = " true" ]; then
77- # Refresh Series after changes
78- log " $seriesTitle (ID:$episodeSeriesId ) :: TYPE :: $seriesType :: Refresh Series"
79- refreshSeries=$( curl -s " $arrUrl /api/v3/command?apikey=$arrApiKey " -X POST --data-raw " {\" name\" :\" RefreshSeries\" ,\" seriesId\" :$episodeSeriesId }" )
81+ # Delete downloaded episode if greater than 14 downloaded episodes
82+ log " $seriesTitle (ID:$episodeSeriesId ) :: S${episodeSeasonNumber} E${episodeNumber} :: $episodeTitle :: Deleted File ID :: $episodeFileId "
83+ deleteFile=$( curl -s " $arrUrl /api/v3/episodefile/$episodeFileId ?apikey=$arrApiKey " -X DELETE)
84+ seriesRefreshRequired=true
85+ else
86+ # Skip if less than required 14 downloaded episodes exist
87+ log " $seriesTitle (ID:$episodeSeriesId ) :: Skipping Episode ID :: $id "
8088 fi
89+ done
90+ if [ " $seriesRefreshRequired " = " true" ]; then
91+ # Refresh Series after changes
92+ log " $seriesTitle (ID:$episodeSeriesId ) :: Refresh Series"
93+ refreshSeries=$( curl -s " $arrUrl /api/v3/command?apikey=$arrApiKey " -X POST --data-raw " {\" name\" :\" RefreshSeries\" ,\" seriesId\" :$episodeSeriesId }" )
8194fi
82-
8395exit
0 commit comments