diff --git a/VERSION b/VERSION
index 6bf5ecb..3bfb9a4 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-0.2.19
+0.2.20
diff --git a/clients/external_clients.py b/clients/external_clients.py
index 922d24c..aebf109 100644
--- a/clients/external_clients.py
+++ b/clients/external_clients.py
@@ -109,17 +109,15 @@ class TMDBClient:
release_date = release.get("release_date")
_log("INFO", f"📅 TMDB: Type {release_type}, Date: {release_date}")
- if release_type == 4 and release_date: # Digital release
+ # Accept any reasonable TMDB release type for better coverage
+ if release_date:
parsed_date = _parse_date_to_iso(release_date)
- _log("INFO", f"✅ TMDB: Found digital release date: {parsed_date}")
- return parsed_date
- elif release_type == 6 and release_date: # TV premiere (for older TV movies/specials)
- parsed_date = _parse_date_to_iso(release_date)
- _log("INFO", f"✅ TMDB: Found TV premiere date: {parsed_date}")
- return parsed_date
- elif release_type == 2 and release_date: # Limited theatrical (film festivals, limited runs)
- parsed_date = _parse_date_to_iso(release_date)
- _log("INFO", f"✅ TMDB: Found limited theatrical release date: {parsed_date}")
+ release_type_names = {
+ 1: "Premiere", 2: "Limited Theatrical", 3: "Theatrical",
+ 4: "Digital", 5: "Physical", 6: "TV Premiere"
+ }
+ type_name = release_type_names.get(release_type, f"Type {release_type}")
+ _log("INFO", f"✅ TMDB: Found {type_name} release date: {parsed_date}")
return parsed_date
_log("WARNING", f"❌ TMDB: No digital release found for {imdb_id} in {self.primary_country}")
diff --git a/nfoguard.py b/nfoguard.py
index 0482e8e..2246726 100644
--- a/nfoguard.py
+++ b/nfoguard.py
@@ -572,7 +572,13 @@ class MovieProcessor:
_log("INFO", f"✅ Movie {imdb_id}: Using digital release date {digital_date} from {digital_source}")
return digital_date, digital_source, released
else:
- _log("WARNING", f"⚠️ Movie {imdb_id}: No import date OR digital release date found - will try other fallbacks")
+ _log("WARNING", f"⚠️ Movie {imdb_id}: No import date OR digital release date found - trying additional fallbacks")
+
+ # Try Radarr's own NFO premiered date as fallback
+ radarr_premiered = self._get_radarr_nfo_premiered_date(movie_path)
+ if radarr_premiered:
+ _log("INFO", f"✅ Movie {imdb_id}: Using Radarr NFO premiered date {radarr_premiered}")
+ return radarr_premiered, "radarr:nfo.premiered", released
else: # digital_then_import
# Try digital release first
@@ -619,6 +625,33 @@ class MovieProcessor:
_log("ERROR", f"External clients error for {imdb_id}: {e}")
return None, f"release:error:{str(e)}"
+ def _get_radarr_nfo_premiered_date(self, movie_path: Path) -> Optional[str]:
+ """Extract premiered date from Radarr's existing movie.nfo file"""
+ try:
+ nfo_path = movie_path / "movie.nfo"
+ if not nfo_path.exists():
+ _log("DEBUG", f"No existing NFO file found at {nfo_path}")
+ return None
+
+ nfo_content = nfo_path.read_text(encoding='utf-8')
+
+ # Look for YYYY-MM-DD
+ import re
+ match = re.search(r'(\d{4}-\d{2}-\d{2})', nfo_content)
+ if match:
+ premiered_date = match.group(1)
+ # Convert to ISO format with timezone
+ iso_date = f"{premiered_date}T00:00:00+00:00"
+ _log("INFO", f"✅ Found Radarr NFO premiered date: {premiered_date}")
+ return iso_date
+ else:
+ _log("DEBUG", f"No tag found in existing NFO")
+ return None
+
+ except Exception as e:
+ _log("ERROR", f"Error reading Radarr NFO file: {e}")
+ return None
+
def _get_file_mtime_date(self, movie_path: Path) -> Tuple[str, str, Optional[str]]:
"""Get date from file modification time as last resort"""
video_exts = (".mkv", ".mp4", ".avi", ".mov", ".m4v")