From b2938758e24eaf9784748a429aa92734315036dc Mon Sep 17 00:00:00 2001 From: SBCrumb Date: Tue, 9 Sep 2025 10:03:54 -0400 Subject: [PATCH] fix file date release to option not required --- .env.template | 4 ++++ CHANGELOG.md | 4 ++++ README.md | 15 +++++++++++++++ nfoguard.py | 19 +++++++++++++++---- 4 files changed, 38 insertions(+), 4 deletions(-) diff --git a/.env.template b/.env.template index a5c026c..76399d7 100644 --- a/.env.template +++ b/.env.template @@ -82,6 +82,10 @@ MOVIE_PRIORITY=import_then_digital # Smart fallback: prefer release dates over file dates for manual imports (true/false) PREFER_RELEASE_DATES_OVER_FILE_DATES=true +# Allow file dates as absolute last resort (true/false) +# If false, movies with no valid import AND no release dates will be skipped entirely +ALLOW_FILE_DATE_FALLBACK=false + # Fallback priority order when no valid Radarr import exists (comma-separated) # Options: digital, physical, theatrical # digital = VOD/streaming release, physical = DVD/Blu-ray, theatrical = cinema release diff --git a/CHANGELOG.md b/CHANGELOG.md index e1a7be7..19cda6e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,10 @@ All notable changes to this project will be documented in this file. - **Smart Comparison Logic**: Prevents unrealistic dates (won't use 2000 digital for 1983 movie) - **Per-Movie Intelligence**: "The Craft (1996)" gets 1996 theatrical, "Top Gun Maverick (2022)" gets digital - **Configuration**: `PREFER_RELEASE_DATES_OVER_FILE_DATES=true` replaces old digital-only setting +- **🔇 File Date Fallback Control**: New option to completely disable file date usage + - **Configuration**: `ALLOW_FILE_DATE_FALLBACK=false` (default: false) + - **Behavior**: Movies with no release dates get skipped instead of using file dates + - **Clean Logs**: Eliminates "Using file dateAdded as fallback" warnings - **Enhanced Debug Endpoints**: - `/debug/movie/{imdb_id}/priority` - Shows date selection logic and available sources - Detailed analysis of file date vs digital date decisions diff --git a/README.md b/README.md index 335a5aa..563d203 100644 --- a/README.md +++ b/README.md @@ -292,6 +292,21 @@ RELEASE_DATE_PRIORITY=physical,digital,theatrical RELEASE_DATE_PRIORITY=digital,theatrical,physical ``` +### Disabling File Date Fallbacks + +**Problem**: Don't want file modification dates used at all + +**Solution**: Disable file date fallbacks completely +```bash +# Add to your .env +ALLOW_FILE_DATE_FALLBACK=false +``` + +**Result**: +- ✅ Movies with release dates get processed normally +- ⚠️ Movies with NO release dates get skipped (no NFO created) +- 🔇 No more "Using file dateAdded as fallback" warnings + ## 📖 Example Workflow You add The Blacklist in Sonarr. diff --git a/nfoguard.py b/nfoguard.py index 625e258..3f99796 100644 --- a/nfoguard.py +++ b/nfoguard.py @@ -97,6 +97,7 @@ class NFOGuardConfig: # Movie processing self.movie_priority = os.environ.get("MOVIE_PRIORITY", "import_then_digital").lower() self.prefer_release_dates_over_file_dates = _bool_env("PREFER_RELEASE_DATES_OVER_FILE_DATES", True) + self.allow_file_date_fallback = _bool_env("ALLOW_FILE_DATE_FALLBACK", False) self.release_date_priority = [p.strip() for p in os.environ.get("RELEASE_DATE_PRIORITY", "digital,physical,theatrical").split(",")] self.movie_poll_mode = os.environ.get("MOVIE_POLL_MODE", "always").lower() self.movie_update_mode = os.environ.get("MOVIE_DATE_UPDATE_MODE", "backfill_only").lower() @@ -431,6 +432,12 @@ class MovieProcessor: # Decide dates dateadded, source, released = self._decide_movie_dates(imdb_id, movie_path, should_query, existing) + # Skip processing if no valid date found and file dates disabled + if dateadded is None: + _log("WARNING", f"Skipping movie {movie_path.name} - no valid date source available") + self.db.upsert_movie_dates(imdb_id, released, None, source, True) + return + # Create NFO if config.manage_nfo: self.nfo_manager.create_movie_nfo( @@ -466,7 +473,7 @@ class MovieProcessor: if radarr_movie: movie_id = radarr_movie.get("id") if movie_id: - import_date, import_source = self.radarr.get_movie_import_date(movie_id) + import_date, import_source = self.radarr.get_movie_import_date(movie_id, fallback_to_file_date=config.allow_file_date_fallback) # Check if we got a real import date or just file date fallback if import_date and import_source != "radarr:db.file.dateAdded": @@ -499,12 +506,16 @@ class MovieProcessor: if radarr_movie: movie_id = radarr_movie.get("id") if movie_id: - import_date, import_source = self.radarr.get_movie_import_date(movie_id) + import_date, import_source = self.radarr.get_movie_import_date(movie_id, fallback_to_file_date=config.allow_file_date_fallback) if import_date: return import_date, import_source, released - # Last resort: file mtime - return self._get_file_mtime_date(movie_path) + # Last resort: file mtime (if allowed) + if config.allow_file_date_fallback: + 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") + return None, "no_valid_date_source", None def _get_digital_release_date(self, imdb_id: str) -> Tuple[Optional[str], str]: """Get release date from external sources using configured priority"""