Comprehensive fallback enhancement: Accept any TMDB type + Radarr NFO premiered dates
- TMDB now accepts ANY release type (1-6+) for maximum coverage - Added Radarr NFO <premiered> date extraction as additional fallback - For rename-first movies: Import → Any TMDB → Radarr NFO → File dates - Much more aggressive about using ANY reasonable date over bad file dates - Covers edge cases where TMDB has unusual release types Version bumped to 0.2.20
This commit is contained in:
@@ -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}")
|
||||
|
||||
+34
-1
@@ -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 <premiered>YYYY-MM-DD</premiered>
|
||||
import re
|
||||
match = re.search(r'<premiered>(\d{4}-\d{2}-\d{2})</premiered>', 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 <premiered> 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")
|
||||
|
||||
Reference in New Issue
Block a user