Skip to content

Commit 6625c14

Browse files
committed
Radarr Updates
1 parent 09603f6 commit 6625c14

File tree

3 files changed

+70
-14
lines changed

3 files changed

+70
-14
lines changed

docs/apps/radarr.html

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ <h1>Radarr Documentation</h1>
5757

5858
<p>Radarr is an automated movie downloading and management application. Huntarr integrates with your existing Radarr instance to automatically search for missing movies and quality upgrades that Radarr doesn't actively hunt for.</p>
5959

60-
<h2 id="radarr-instance-setup">Radarr Instance Setup</h2>
60+
<h2 id="instances">Radarr Instance Setup</h2>
6161

6262
<h3>Adding Your Radarr Instance</h3>
6363
<p>To connect your existing Radarr instance to Huntarr:</p>
@@ -165,11 +165,11 @@ <h3 id="search-limits"><i class="fas fa-sliders-h" style="margin-right: 10px; co
165165
<h3 id="additional-options"><i class="fas fa-cogs" style="margin-right: 10px; color: #9b59b6;"></i>Additional Options</h3>
166166
<p>Fine-tune Huntarr's behavior with these additional settings:</p>
167167

168-
<h4><i class="fas fa-eye" style="margin-right: 8px; color: #f1c40f;"></i>Monitored Only</h4>
168+
<h4 id="monitored-only"><i class="fas fa-eye" style="margin-right: 8px; color: #f1c40f;"></i>Monitored Only</h4>
169169
<p>When enabled, Huntarr will only search for movies that are marked as "Monitored" in Radarr. This prevents searches for movies you've intentionally unmonitored.</p>
170170

171171
<h4 id="skip-future-movies"><i class="fas fa-calendar" style="margin-right: 8px; color: #e74c3c;"></i>Skip Future Movies</h4>
172-
<p>When enabled, Huntarr will skip movies with future release dates (based on the Release Date field). When disabled, Huntarr will process all movies regardless of release date.</p>
172+
<p>When enabled, Huntarr will skip movies with future release dates (based on the Release Date field) for both missing movie searches and quality upgrades. When disabled, Huntarr will process all movies regardless of release date.</p>
173173

174174
<div class="alert alert-info">
175175
<strong>📋 Release Date Logic Simplified:</strong> As of Huntarr 7.6.0+, we've simplified release date filtering to only use the <strong>Release Date</strong> field from Radarr. This field is the most reliable and consistently populated date field in the Radarr API.
@@ -193,7 +193,7 @@ <h5>Why We Simplified Release Date Detection</h5>
193193
</ul>
194194

195195
<h5>Release Date Logic Flow</h5>
196-
<p>The simplified logic works as follows:</p>
196+
<p>The simplified logic works as follows for both missing movie searches and quality upgrades:</p>
197197
<ul>
198198
<li><strong>Skip Future Releases = OFF:</strong> Process all movies regardless of release date (useful if you want cam rips, theater recordings, etc.)</li>
199199
<li><strong>Skip Future Releases = ON:</strong> Only process movies with past release dates, with optional control over movies with missing dates</li>
@@ -223,7 +223,7 @@ <h5>Release Date Logic Flow</h5>
223223
<script>mermaid.initialize({startOnLoad:true});</script>
224224

225225
<h4 id="process-no-release-dates"><i class="fas fa-question-circle" style="margin-right: 8px; color: #ff6b35;"></i>Process No Release Dates</h4>
226-
<p>In rare cases, some movies in your Radarr library may have missing or invalid release date information. By default, Huntarr will <strong>skip</strong> these movies to avoid potentially downloading unknown or poor quality content.</p>
226+
<p>In rare cases, some movies in your Radarr library may have missing or invalid release date information. By default, Huntarr will <strong>skip</strong> these movies for both missing searches and quality upgrades to avoid potentially downloading unknown or poor quality content.</p>
227227

228228
<p>When this option is enabled, Huntarr will process movies that have:</p>
229229
<ul>

frontend/static/js/settings_forms.js

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -239,22 +239,22 @@ const SettingsForms = {
239239
</div>
240240
<div class="instance-content">
241241
<div class="setting-item">
242-
<label for="radarr-name-${index}"><a href="https://huntarr.io/threads/name-field.18/" class="info-icon" title="Learn more about naming your Radarr instance" target="_blank" rel="noopener"><i class="fas fa-info-circle"></i></a>Name:</label>
242+
<label for="radarr-name-${index}"><a href="https://plexguide.github.io/Huntarr.io/apps/radarr.html#instances" class="info-icon" title="Learn more about naming your Radarr instance" target="_blank" rel="noopener"><i class="fas fa-info-circle"></i></a>Name:</label>
243243
<input type="text" id="radarr-name-${index}" name="name" value="${instance.name || ''}" placeholder="Friendly name for this Radarr instance">
244244
<p class="setting-help">Friendly name for this Radarr instance</p>
245245
</div>
246246
<div class="setting-item">
247-
<label for="radarr-url-${index}"><a href="https://huntarr.io/threads/url.19/" class="info-icon" title="Learn more about Radarr URL configuration" target="_blank" rel="noopener"><i class="fas fa-info-circle"></i></a>URL:</label>
247+
<label for="radarr-url-${index}"><a href="https://plexguide.github.io/Huntarr.io/apps/radarr.html#instances" class="info-icon" title="Learn more about Radarr URL configuration" target="_blank" rel="noopener"><i class="fas fa-info-circle"></i></a>URL:</label>
248248
<input type="text" id="radarr-url-${index}" name="api_url" value="${instance.api_url || ''}" placeholder="Base URL for Radarr (e.g., http://localhost:7878)">
249249
<p class="setting-help">Base URL for Radarr (e.g., http://localhost:7878)</p>
250250
</div>
251251
<div class="setting-item">
252-
<label for="radarr-key-${index}"><a href="https://huntarr.io/threads/api-key.20/" class="info-icon" title="Learn more about finding your Radarr API key" target="_blank" rel="noopener"><i class="fas fa-info-circle"></i></a>API Key:</label>
252+
<label for="radarr-key-${index}"><a href="https://plexguide.github.io/Huntarr.io/apps/radarr.html#instances" class="info-icon" title="Learn more about finding your Radarr API key" target="_blank" rel="noopener"><i class="fas fa-info-circle"></i></a>API Key:</label>
253253
<input type="text" id="radarr-key-${index}" name="api_key" value="${instance.api_key || ''}" placeholder="API key for Radarr">
254254
<p class="setting-help">API key for Radarr</p>
255255
</div>
256256
<div class="setting-item">
257-
<label for="radarr-enabled-${index}"><a href="https://huntarr.io/threads/enable-toggle.21/" class="info-icon" title="Learn more about enabling/disabling instances" target="_blank" rel="noopener"><i class="fas fa-info-circle"></i></a>Enabled:</label>
257+
<label for="radarr-enabled-${index}"><a href="https://plexguide.github.io/Huntarr.io/apps/radarr.html#instances" class="info-icon" title="Learn more about enabling/disabling instances" target="_blank" rel="noopener"><i class="fas fa-info-circle"></i></a>Enabled:</label>
258258
<label class="toggle-switch" style="width:40px; height:20px; display:inline-block; position:relative;">
259259
<input type="checkbox" id="radarr-enabled-${index}" name="enabled" ${instance.enabled !== false ? 'checked' : ''}>
260260
<span class="toggle-slider" style="position:absolute; cursor:pointer; top:0; left:0; right:0; bottom:0; background-color:#3d4353; border-radius:20px; transition:0.4s;"></span>
@@ -290,22 +290,22 @@ const SettingsForms = {
290290
<div class="settings-group">
291291
<h3>Search Settings</h3>
292292
<div class="setting-item">
293-
<label for="radarr_hunt_missing_movies"><a href="https://huntarr.io" class="info-icon" title="Learn more about missing movies search" target="_blank" rel="noopener"><i class="fas fa-info-circle"></i></a>Missing Search:</label>
293+
<label for="radarr_hunt_missing_movies"><a href="https://plexguide.github.io/Huntarr.io/apps/radarr.html#search-settings" class="info-icon" title="Learn more about missing movies search" target="_blank" rel="noopener"><i class="fas fa-info-circle"></i></a>Missing Search:</label>
294294
<input type="number" id="radarr_hunt_missing_movies" name="hunt_missing_movies" min="0" value="${settings.hunt_missing_movies !== undefined ? (settings.hunt_missing_movies === 0 ? 0 : settings.hunt_missing_movies) : 1}">
295295
<p class="setting-help">Number of missing movies to search per cycle (0 to disable)</p>
296296
</div>
297297
<div class="setting-item">
298-
<label for="radarr_hunt_upgrade_movies"><a href="https://huntarr.io" class="info-icon" title="Learn more about upgrading movies" target="_blank" rel="noopener"><i class="fas fa-info-circle"></i></a>Upgrade Search:</label>
298+
<label for="radarr_hunt_upgrade_movies"><a href="https://plexguide.github.io/Huntarr.io/apps/radarr.html#search-settings" class="info-icon" title="Learn more about upgrading movies" target="_blank" rel="noopener"><i class="fas fa-info-circle"></i></a>Upgrade Search:</label>
299299
<input type="number" id="radarr_hunt_upgrade_movies" name="hunt_upgrade_movies" min="0" value="${settings.hunt_upgrade_movies !== undefined ? (settings.hunt_upgrade_movies === 0 ? 0 : settings.hunt_upgrade_movies) : 0}">
300300
<p class="setting-help">Number of movies to search for quality upgrades per cycle (0 to disable)</p>
301301
</div>
302302
<div class="setting-item">
303-
<label for="radarr_sleep_duration"><a href="/Huntarr.io/docs/#/configuration?id=sleep-duration" class="info-icon" title="Learn more about sleep duration" target="_blank" rel="noopener"><i class="fas fa-info-circle"></i></a>Sleep Duration:</label>
303+
<label for="radarr_sleep_duration"><a href="https://plexguide.github.io/Huntarr.io/apps/radarr.html#search-settings" class="info-icon" title="Learn more about sleep duration" target="_blank" rel="noopener"><i class="fas fa-info-circle"></i></a>Sleep Duration:</label>
304304
<input type="number" id="radarr_sleep_duration" name="sleep_duration" min="60" value="${settings.sleep_duration !== undefined ? settings.sleep_duration : 900}">
305305
<p class="setting-help">Time in seconds between processing cycles</p>
306306
</div>
307307
<div class="setting-item">
308-
<label for="radarr_hourly_cap"><a href="#" class="info-icon" title="Maximum API requests per hour for this app" target="_blank" rel="noopener"><i class="fas fa-info-circle"></i></a>API Cap - Hourly:</label>
308+
<label for="radarr_hourly_cap"><a href="https://plexguide.github.io/Huntarr.io/apps/radarr.html#search-settings" class="info-icon" title="Maximum API requests per hour for this app" target="_blank" rel="noopener"><i class="fas fa-info-circle"></i></a>API Cap - Hourly:</label>
309309
<input type="number" id="radarr_hourly_cap" name="hourly_cap" min="1" max="500" value="${settings.hourly_cap !== undefined ? settings.hourly_cap : 20}">
310310
<p class="setting-help">Maximum API requests per hour (helps prevent rate limiting)</p>
311311
<p class="setting-help" style="color: #cc0000; font-weight: bold;">Setting this too high will risk your accounts being banned! You have been warned!</p>
@@ -315,7 +315,7 @@ const SettingsForms = {
315315
<div class="settings-group">
316316
<h3>Additional Options</h3>
317317
<div class="setting-item">
318-
<label for="radarr_monitored_only"><a href="/Huntarr.io/docs/#/configuration?id=monitored-only" class="info-icon" title="Learn more about monitored only option" target="_blank" rel="noopener"><i class="fas fa-info-circle"></i></a>Monitored Only:</label>
318+
<label for="radarr_monitored_only"><a href="https://plexguide.github.io/Huntarr.io/apps/radarr.html#monitored-only" class="info-icon" title="Learn more about monitored only option" target="_blank" rel="noopener"><i class="fas fa-info-circle"></i></a>Monitored Only:</label>
319319
<label class="toggle-switch" style="width:40px; height:20px; display:inline-block; position:relative;">
320320
<input type="checkbox" id="radarr_monitored_only" ${settings.monitored_only !== false ? 'checked' : ''}>
321321
<span class="toggle-slider" style="position:absolute; cursor:pointer; top:0; left:0; right:0; bottom:0; background-color:#3d4353; border-radius:20px; transition:0.4s;"></span>

src/primary/apps/radarr/upgrade.py

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,15 @@
66

77
import time
88
import random
9+
import datetime
910
from typing import List, Dict, Any, Set, Callable
1011
from src.primary.utils.logger import get_logger
1112
from src.primary.apps.radarr import api as radarr_api
1213
from src.primary.stats_manager import increment_stat, increment_stat_only
1314
from src.primary.stateful_manager import is_processed, add_processed_id
1415
from src.primary.utils.history_utils import log_processed_media
1516
from src.primary.settings_manager import get_advanced_setting, load_settings
17+
from src.primary.utils.date_utils import parse_date
1618

1719
# Get logger for the app
1820
radarr_logger = get_logger("radarr")
@@ -45,6 +47,7 @@ def process_cutoff_upgrades(
4547
monitored_only = app_settings.get("monitored_only", True)
4648
# skip_movie_refresh setting removed as it was a performance bottleneck
4749
hunt_upgrade_movies = app_settings.get("hunt_upgrade_movies", 0)
50+
skip_future_releases = app_settings.get("skip_future_releases", True)
4851

4952
# Use advanced settings from general.json for command operations
5053
command_wait_delay = get_advanced_setting("command_wait_delay", 1)
@@ -65,6 +68,59 @@ def process_cutoff_upgrades(
6568

6669
radarr_logger.info(f"Found {len(upgrade_eligible_data)} movies eligible for upgrade.")
6770

71+
# Skip future releases if enabled (matching missing movies logic)
72+
if skip_future_releases:
73+
radarr_logger.info("Filtering out future releases from upgrades...")
74+
now = datetime.datetime.now(datetime.timezone.utc)
75+
76+
filtered_movies = []
77+
skipped_count = 0
78+
no_date_count = 0
79+
for movie in upgrade_eligible_data:
80+
movie_id = movie.get('id')
81+
movie_title = movie.get('title', 'Unknown Title')
82+
release_date_str = movie.get('releaseDate')
83+
84+
if release_date_str:
85+
release_date = parse_date(release_date_str)
86+
if release_date:
87+
if release_date > now:
88+
# Movie has a future release date, skip it
89+
radarr_logger.debug(f"Skipping future movie ID {movie_id} ('{movie_title}') for upgrade - releaseDate is in the future: {release_date}")
90+
skipped_count += 1
91+
continue
92+
else:
93+
# Movie release date is in the past, include it
94+
radarr_logger.debug(f"Movie ID {movie_id} ('{movie_title}') releaseDate is in the past: {release_date}, including in upgrade search")
95+
filtered_movies.append(movie)
96+
else:
97+
# Could not parse release date, treat as no date
98+
radarr_logger.debug(f"Movie ID {movie_id} ('{movie_title}') has unparseable releaseDate '{release_date_str}' for upgrade - treating as no release date")
99+
if app_settings.get('process_no_release_dates', False):
100+
radarr_logger.debug(f"Movie ID {movie_id} ('{movie_title}') has no valid release date but process_no_release_dates is enabled - including in upgrade search")
101+
filtered_movies.append(movie)
102+
else:
103+
radarr_logger.debug(f"Skipping movie ID {movie_id} ('{movie_title}') for upgrade - no valid release date and process_no_release_dates is disabled")
104+
no_date_count += 1
105+
else:
106+
# No release date available at all
107+
if app_settings.get('process_no_release_dates', False):
108+
radarr_logger.debug(f"Movie ID {movie_id} ('{movie_title}') has no releaseDate field but process_no_release_dates is enabled - including in upgrade search")
109+
filtered_movies.append(movie)
110+
else:
111+
radarr_logger.debug(f"Skipping movie ID {movie_id} ('{movie_title}') for upgrade - no releaseDate field and process_no_release_dates is disabled")
112+
no_date_count += 1
113+
114+
radarr_logger.info(f"Filtered out {skipped_count} future releases and {no_date_count} movies with no release dates from upgrades")
115+
radarr_logger.debug(f"After filtering: {len(filtered_movies)} movies remaining from {len(upgrade_eligible_data)} original")
116+
upgrade_eligible_data = filtered_movies
117+
else:
118+
radarr_logger.info("Skip future releases is disabled - processing all movies for upgrades regardless of release date")
119+
120+
if not upgrade_eligible_data:
121+
radarr_logger.info("No movies eligible for upgrade left to process after filtering future releases.")
122+
return False
123+
68124
# Filter out already processed movies using stateful management
69125
unprocessed_movies = []
70126
for movie in upgrade_eligible_data:

0 commit comments

Comments
 (0)