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")