diff --git a/.local/SUMMARY.md b/.local/SUMMARY.md index 7be09be..cb3e141 100644 --- a/.local/SUMMARY.md +++ b/.local/SUMMARY.md @@ -204,6 +204,7 @@ Co-Authored-By: Claude ❌ - **API Debug Endpoints**: `/debug/movie/{imdb_id}` for troubleshooting specific movies - **IMDb ID Detection**: Comprehensive logging for directory/filename/NFO parsing - **Three-Tier Logging**: Shows which optimization tier is used for each movie +- **Failed Movies Log**: Dedicated `logs/failed_movies.log` for movies with no_valid_date_source ### 🎯 PERFORMANCE TESTING SCENARIOS - **Cold Database**: Test full processing with empty database (Tier 3 for all content) @@ -252,6 +253,7 @@ Co-Authored-By: Claude ❌ 4. **TMDB FALLBACK TESTING**: Test movies with TMDB IDs but no IMDb IDs 5. **MONITOR**: Database size should remain appropriate with new optimizations 6. **BENCHMARK**: Compare scan times before/after optimization (should see 90%+ improvement) +7. **DEBUG LOG**: Check `logs/failed_movies.log` for movies that couldn't get valid dates --- **CONFIDENTIAL**: This file contains sensitive development information and remains on private Gitea only. \ No newline at end of file diff --git a/nfoguard.py b/nfoguard.py index 9538667..223d4d1 100644 --- a/nfoguard.py +++ b/nfoguard.py @@ -1281,6 +1281,10 @@ class MovieProcessor: return self._get_file_mtime_date(movie_path) else: _log("INFO", f"No valid dates found for {imdb_id} and file date fallback disabled - skipping NFO creation") + + # Log to failed movies debug file for troubleshooting + self._log_failed_movie(movie_path, imdb_id, "No import date, no release date, file date fallback disabled") + return None, "no_valid_date_source", None def _get_digital_release_date(self, imdb_id: str) -> Tuple[Optional[str], str]: @@ -1334,6 +1338,28 @@ class MovieProcessor: _log("ERROR", f"Error reading Radarr NFO file: {e}") return None + def _log_failed_movie(self, movie_path: Path, imdb_id: str, reason: str, available_countries: List[str] = None): + """Log movies that failed to get valid dates to a debug file""" + try: + log_dir = Path("logs") + log_dir.mkdir(exist_ok=True) + + failed_log_path = log_dir / "failed_movies.log" + timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + + log_entry = f"[{timestamp}] {movie_path.name} | IMDb: {imdb_id} | Reason: {reason}" + if available_countries: + log_entry += f" | Available Countries: {', '.join(available_countries)}" + log_entry += "\n" + + with open(failed_log_path, "a", encoding="utf-8") as f: + f.write(log_entry) + + _log("INFO", f"📝 Logged failed movie to {failed_log_path}: {movie_path.name}") + + except Exception as e: + _log("ERROR", f"Failed to write to failed movies log: {e}") + 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")