From ecc70812afcce9f0f62f8e470a5eade227cf0d69 Mon Sep 17 00:00:00 2001 From: sbcrumb Date: Wed, 15 Oct 2025 10:52:51 -0400 Subject: [PATCH] web: more webinterface updates --- api/web_routes.py | 62 +++++++++++++++++++++++++++++++++++++---------- 1 file changed, 49 insertions(+), 13 deletions(-) diff --git a/api/web_routes.py b/api/web_routes.py index deba68f..18138d3 100644 --- a/api/web_routes.py +++ b/api/web_routes.py @@ -814,7 +814,7 @@ async def get_episode_date_options(dependencies: dict, imdb_id: str, season: int "description": f"Currently using: {episode_data.get('source', 'Unknown')}" }) - # Option 2: Aired date + # Option 2: Aired date (if exists in database) if episode_data.get('aired'): options.append({ "type": "airdate", @@ -828,8 +828,16 @@ async def get_episode_date_options(dependencies: dict, imdb_id: str, season: int try: # Get TV processor and clients from dependencies tv_processor = dependencies.get("tv_processor") + print(f"🔍 DEBUG: tv_processor available: {tv_processor is not None}") + if tv_processor: + print(f"🔍 DEBUG: tv_processor has external_clients: {hasattr(tv_processor, 'external_clients')}") + print(f"🔍 DEBUG: tv_processor has sonarr: {hasattr(tv_processor, 'sonarr')}") + if tv_processor and hasattr(tv_processor, 'external_clients'): external_clients = tv_processor.external_clients + print(f"🔍 DEBUG: external_clients available: {external_clients is not None}") + if external_clients: + print(f"🔍 DEBUG: TMDB enabled: {external_clients.tmdb.enabled if hasattr(external_clients, 'tmdb') else 'No TMDB client'}") # Check Sonarr for import dates if tv_processor.sonarr and tv_processor.sonarr.enabled: @@ -840,7 +848,7 @@ async def get_episode_date_options(dependencies: dict, imdb_id: str, season: int series_id = series_data.get('id') if series_id: # Get episodes for the series - episodes = tv_processor.sonarr.get_episodes(series_id) + episodes = tv_processor.sonarr.episodes_for_series(series_id) for ep in episodes: if ep.get('seasonNumber') == season and ep.get('episodeNumber') == episode: episode_id = ep.get('id') @@ -865,10 +873,11 @@ async def get_episode_date_options(dependencies: dict, imdb_id: str, season: int # Check TMDB for episode air dates if external_clients.tmdb.enabled: try: - # Get TMDB TV series ID from IMDb ID - tv_info = external_clients.tmdb.find_tv_by_imdb(imdb_id) - if tv_info: - tmdb_id = tv_info.get('id') + # Get TMDB TV series ID from IMDb ID using find endpoint + tv_find_result = external_clients.tmdb._get(f"/find/{imdb_id}", {"external_source": "imdb_id"}) + if tv_find_result and tv_find_result.get("tv_results"): + tv_show = tv_find_result["tv_results"][0] + tmdb_id = tv_show.get("id") if tmdb_id: # Get episode air date from TMDB episodes = external_clients.tmdb.get_tv_season_episodes(tmdb_id, season) @@ -885,6 +894,16 @@ async def get_episode_date_options(dependencies: dict, imdb_id: str, season: int "source": "tmdb:airdate", "description": f"Air date from TMDB: {air_date}" }) + + # If no aired date in database, also add this as "Use Air Date" option + if not current_aired: + options.insert(1, { # Insert after current option + "type": "airdate_tmdb", + "label": "Use Air Date (TMDB)", + "date": f"{air_date}T20:00:00", + "source": "airdate", + "description": f"Use air date from TMDB: {air_date}" + }) except Exception as e: print(f"⚠️ Failed to get TMDB air date for {imdb_id} S{season:02d}E{episode:02d}: {e}") @@ -903,6 +922,16 @@ async def get_episode_date_options(dependencies: dict, imdb_id: str, season: int "source": "external:airdate", "description": f"Air date from external sources: {air_date}" }) + + # If no aired date in database and not already added from TMDB, add this as "Use Air Date" option + if not current_aired and not any(opt.get('type') == 'airdate_tmdb' for opt in options): + options.insert(1, { # Insert after current option + "type": "airdate_external", + "label": "Use Air Date (External)", + "date": f"{air_date}T20:00:00", + "source": "airdate", + "description": f"Use air date from external sources: {air_date}" + }) except Exception as e: print(f"⚠️ Failed to get external air date for {imdb_id} S{season:02d}E{episode:02d}: {e}") @@ -922,10 +951,17 @@ async def get_episode_date_options(dependencies: dict, imdb_id: str, season: int for i, option in enumerate(options): print(f" Option {i}: {option}") - return { - "imdb_id": imdb_id, - "season": season, - "episode": episode, - "current_data": episode_data, - "options": options - } \ No newline at end of file + # Ensure we always return valid JSON + try: + result = { + "imdb_id": imdb_id, + "season": season, + "episode": episode, + "current_data": episode_data, + "options": options + } + print(f"🔍 DEBUG: Returning result with {len(result['options'])} options") + return result + except Exception as e: + print(f"❌ ERROR: Failed to create response: {e}") + raise HTTPException(status_code=500, detail=f"Failed to generate episode options: {str(e)}") \ No newline at end of file