From 41ec0d14428a72eb7b70a4d0679492c0f23a7716 Mon Sep 17 00:00:00 2001 From: Nirvana Date: Thu, 4 Dec 2025 16:22:20 +0100 Subject: [PATCH] Implement epg --- .../base/epg/epg_parser.py | 29 +++++++++++++++---- 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/lib/streaming_providers/base/epg/epg_parser.py b/lib/streaming_providers/base/epg/epg_parser.py index 28d6fdd..9f5cdf4 100644 --- a/lib/streaming_providers/base/epg/epg_parser.py +++ b/lib/streaming_providers/base/epg/epg_parser.py @@ -100,20 +100,37 @@ class EPGParser: text = episode_elem.text or '' if system == 'xmltv_ns': - # Format: "season.episode.part/total_parts" - # Example: "4.11.0/1" means season 5, episode 12, part 1 of 1 + # Format: "season.episode.part/total" but may have spaces like "11 . 6 . " + # Clean up spaces around dots + text = text.strip() + # Replace spaces around dots and remove multiple spaces + import re + text = re.sub(r'\s*\.\s*', '.', text) + try: + # Remove trailing slash if present without numerator (e.g., "0.5.") + if text.endswith('.'): + text = text[:-1] + parts = text.split('.') if len(parts) >= 2: - series_num = int(parts[0].split('/')[0]) + 1 if parts[0] else None # 0-indexed, so +1 - episode_num = int(parts[1].split('/')[0]) + 1 if parts[1] else None + # Handle season number + season_str = parts[0].split('/')[0] if parts[0] else None + series_num = int(season_str) + 1 if season_str and season_str.strip() else None + + # Handle episode number + episode_str = parts[1].split('/')[0] if len(parts) > 1 and parts[1] else None + episode_num = int(episode_str) + 1 if episode_str and episode_str.strip() else None + + # Handle part number (optional) part_num = None if len(parts) >= 3 and parts[2]: part_str = parts[2].split('/')[0] - part_num = int(part_str) + 1 if part_str else None + part_num = int(part_str) + 1 if part_str and part_str.strip() else None + return series_num, episode_num, part_num except (ValueError, IndexError) as e: - logger.debug(f"Failed to parse xmltv_ns episode number '{text}': {e}") + logger.debug(f"Failed to parse xmltv_ns episode number '{episode_elem.text}': {e}") elif system == 'onscreen': # Format: "S05E12" or "5x12"