diff --git a/core/path_mapper.py b/core/path_mapper.py index 2b3480a..0b1a9d2 100644 --- a/core/path_mapper.py +++ b/core/path_mapper.py @@ -25,15 +25,28 @@ class PathMapper: def sonarr_path_to_container_path(self, sonarr_path: str) -> str: """Convert Sonarr path to container path using environment mappings""" - # Try to match against configured Sonarr root folders - for i, sonarr_root in enumerate(self.sonarr_roots): - if sonarr_path.startswith(sonarr_root): - # Map to corresponding TV path - if i < len(self.tv_paths): - container_root = self.tv_paths[i] - relative_path = sonarr_path[len(sonarr_root):].lstrip('/') - return str(Path(container_root) / relative_path) if relative_path else container_root + print(f"DEBUG: sonarr_path_to_container_path input: {sonarr_path}") + print(f"DEBUG: sonarr_roots: {self.sonarr_roots}") + print(f"DEBUG: tv_paths: {self.tv_paths}") + # Sort roots by length (longest first) to avoid substring matching issues + indexed_roots = [(i, root) for i, root in enumerate(self.sonarr_roots)] + indexed_roots.sort(key=lambda x: len(x[1]), reverse=True) + + # Try to match against configured Sonarr root folders (longest first) + for original_index, sonarr_root in indexed_roots: + print(f"DEBUG: Checking sonarr_root[{original_index}]: {sonarr_root}") + if sonarr_path.startswith(sonarr_root + '/') or sonarr_path == sonarr_root: + print(f"DEBUG: Match found! Index {original_index}") + # Map to corresponding TV path + if original_index < len(self.tv_paths): + container_root = self.tv_paths[original_index] + relative_path = sonarr_path[len(sonarr_root):].lstrip('/') + result = str(Path(container_root) / relative_path) if relative_path else container_root + print(f"DEBUG: Mapped to: {result}") + return result + + print(f"DEBUG: No match found, returning original: {sonarr_path}") # No fallback - if path mapping fails, return original and let validation catch it return sonarr_path @@ -43,14 +56,18 @@ class PathMapper: print(f"DEBUG: radarr_roots: {self.radarr_roots}") print(f"DEBUG: movie_paths: {self.movie_paths}") - # Try to match against configured Radarr root folders - for i, radarr_root in enumerate(self.radarr_roots): - print(f"DEBUG: Checking radarr_root[{i}]: {radarr_root}") - if radarr_path.startswith(radarr_root): - print(f"DEBUG: Match found! Index {i}") + # Sort roots by length (longest first) to avoid substring matching issues + indexed_roots = [(i, root) for i, root in enumerate(self.radarr_roots)] + indexed_roots.sort(key=lambda x: len(x[1]), reverse=True) + + # Try to match against configured Radarr root folders (longest first) + for original_index, radarr_root in indexed_roots: + print(f"DEBUG: Checking radarr_root[{original_index}]: {radarr_root}") + if radarr_path.startswith(radarr_root + '/') or radarr_path == radarr_root: + print(f"DEBUG: Match found! Index {original_index}") # Map to corresponding movie path - if i < len(self.movie_paths): - container_root = self.movie_paths[i] + if original_index < len(self.movie_paths): + container_root = self.movie_paths[original_index] relative_path = radarr_path[len(radarr_root):].lstrip('/') result = str(Path(container_root) / relative_path) if relative_path else container_root print(f"DEBUG: Mapped to: {result}")