Skip to content

Commit e54383c

Browse files
1.3 - Support trimming via series "Tag"
#105
1 parent f1a4fa6 commit e54383c

File tree

1 file changed

+50
-38
lines changed

1 file changed

+50
-38
lines changed
Lines changed: 50 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/usr/bin/env bash
2-
scriptVersion="1.2"
3-
scriptName="DailySeriesEpisodeTrimmer"
2+
scriptVersion="1.3"
3+
scriptName="SeriesEpisodeTrimmer"
44

55
#### Import Settings
66
source /config/extended.conf
@@ -27,57 +27,69 @@ seriesId=$sonarr_series_id
2727
seriesData=$(curl -s "$arrUrl/api/v3/series/$seriesId?apikey=$arrApiKey")
2828
seriesTitle=$(echo $seriesData | jq -r ".title")
2929
seriesType=$(echo $seriesData | jq -r ".seriesType")
30+
seriesTags=$(echo $seriesData | jq -r ".tags[]")
3031
seriesEpisodeData=$(curl -s "$arrUrl/api/v3/episode?seriesId=$seriesId&apikey=$arrApiKey")
3132
seriesEpisodeIds=$(echo "$seriesEpisodeData" | jq -r " . | sort_by(.airDate) | reverse | .[] | select(.hasFile==true) | .id")
3233
seriesEpisodeIdsCount=$(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
3852
fi
3953

54+
4055
# Skip processing if less than 14 episodes were found to be downloaded
4156
if [ $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
4459
fi
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}")
8194
fi
82-
8395
exit

0 commit comments

Comments
 (0)