From 191e6f5f3ff0a4eb32aad2c0cc9da6a58d18e64b Mon Sep 17 00:00:00 2001 From: sbcrumb Date: Sun, 5 Oct 2025 10:29:13 -0400 Subject: [PATCH 1/2] fix: Use Sonarr import history for TV episode date detection - Modified _get_sonarr_episodes to call get_episode_import_history() for each episode - This retrieves actual import dates from Sonarr's history API instead of just episodeFile.dateAdded - Added fallback to episodeFile.dateAdded if history lookup fails - Updated source tracking to use 'sonarr:history.import' for better debugging - Added debug logging to show which method found the import date - Should resolve issue where episodes fall back to aired dates despite valid Sonarr imports --- VERSION | 2 +- processors/tv_processor.py | 27 +++++++++++++++++++++++---- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/VERSION b/VERSION index f1547e6..815e68d 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.0.7 +2.0.8 diff --git a/processors/tv_processor.py b/processors/tv_processor.py index 88eb992..54b5698 100644 --- a/processors/tv_processor.py +++ b/processors/tv_processor.py @@ -120,7 +120,8 @@ class TVProcessor: aired = sonarr_data.get('airDate') dateadded = sonarr_data.get('dateAdded') if dateadded: - source = "sonarr" + # Use more specific source to indicate this came from Sonarr import history + source = "sonarr:history.import" # Fallback to external sources if needed if not aired: @@ -140,7 +141,7 @@ class TVProcessor: return episode_dates def _get_sonarr_episodes(self, imdb_id: str) -> Dict[Tuple[int, int], Dict[str, Any]]: - """Get episode information from Sonarr""" + """Get episode information from Sonarr including import history""" try: series_data = self.sonarr.series_by_imdb(imdb_id) if not series_data: @@ -158,10 +159,28 @@ class TVProcessor: episode_num = episode.get('episodeNumber', 0) if season > 0 and episode_num > 0: - episode_map[(season, episode_num)] = { + # Get basic episode info + episode_data = { 'airDate': episode.get('airDate'), - 'dateAdded': episode.get('episodeFile', {}).get('dateAdded') if episode.get('hasFile') else None + 'dateAdded': None } + + # First try to get import date from history (more accurate) + episode_id = episode.get('id') + if episode_id and episode.get('hasFile'): + import_date = self.sonarr.get_episode_import_history(episode_id) + if import_date: + episode_data['dateAdded'] = import_date + _log("DEBUG", f"Got import date from history for S{season:02d}E{episode_num:02d}: {import_date}") + + # Fallback to episodeFile.dateAdded if history didn't work + if not episode_data['dateAdded'] and episode.get('hasFile'): + file_date = episode.get('episodeFile', {}).get('dateAdded') + if file_date: + episode_data['dateAdded'] = file_date + _log("DEBUG", f"Got file date for S{season:02d}E{episode_num:02d}: {file_date}") + + episode_map[(season, episode_num)] = episode_data return episode_map From 5ade28c1181418bf761c73e35bb8ba39411bb165 Mon Sep 17 00:00:00 2001 From: sbcrumb Date: Sun, 5 Oct 2025 10:42:35 -0400 Subject: [PATCH 2/2] fix: Only fallback to airdate when Sonarr has no import date - Modified fallback logic to only use airdate as dateadded when source is NOT 'sonarr:history.import' - This prevents using airdate fallback when Sonarr has valid import dates available - Ensures Sonarr import dates are prioritized over airdate fallbacks - Addresses issue where episodes with valid Sonarr import dates were still falling back to airdates --- VERSION | 2 +- processors/tv_processor.py | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/VERSION b/VERSION index 815e68d..09843e3 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.0.8 +2.0.9 diff --git a/processors/tv_processor.py b/processors/tv_processor.py index 54b5698..dccd780 100644 --- a/processors/tv_processor.py +++ b/processors/tv_processor.py @@ -131,8 +131,9 @@ class TVProcessor: if not dateadded: source = "external" - # Use air date as fallback for dateadded if available - if not dateadded and aired: + # ONLY use air date as fallback for dateadded if we have no Sonarr import date at all + # and if we couldn't get any import information from Sonarr history + if not dateadded and aired and source != "sonarr:history.import": dateadded = aired source = f"{source}_fallback" if source != "unknown" else "aired_fallback"