From c20cefb571819c804d94e6507dd338987ae5426f Mon Sep 17 00:00:00 2001 From: SBCrumb Date: Sun, 14 Sep 2025 13:07:50 -0400 Subject: [PATCH] fix hardcoded paths --- .env.fixed | 2 +- core/path_mapper.py | 44 +++++++++++++++++++++++++++++++++++--------- 2 files changed, 36 insertions(+), 10 deletions(-) diff --git a/.env.fixed b/.env.fixed index 3ff31f4..4936497 100644 --- a/.env.fixed +++ b/.env.fixed @@ -8,7 +8,7 @@ # MEDIA PATHS (REQUIRED) - FIXED # =========================================== # Container paths (what NFOGuard sees inside container) -MOVIE_PATHS=/media/movies,/media/movies6 +MOVIE_PATHS=/media/Movies/movies,/media/Movies/movies6 TV_PATHS=/media/TV/tv,/media/TV/tv6 # Radarr paths (what Radarr sees on the host system) diff --git a/core/path_mapper.py b/core/path_mapper.py index ab5d9f5..81211f3 100644 --- a/core/path_mapper.py +++ b/core/path_mapper.py @@ -3,30 +3,56 @@ Path mapping utilities for NFOGuard Handles conversion between external service paths and container paths """ +import os import re from pathlib import Path - class PathMapper: """Handles path mapping between different environments""" def __init__(self): - pass + # Load path mappings from environment variables + self.radarr_roots = self._parse_path_list(os.environ.get("RADARR_ROOT_FOLDERS", "")) + self.sonarr_roots = self._parse_path_list(os.environ.get("SONARR_ROOT_FOLDERS", "")) + self.movie_paths = self._parse_path_list(os.environ.get("MOVIE_PATHS", "")) + self.tv_paths = self._parse_path_list(os.environ.get("TV_PATHS", "")) + + def _parse_path_list(self, path_string: str) -> list: + """Parse comma-separated path string into list""" + if not path_string: + return [] + return [p.strip() for p in path_string.split(",") if p.strip()] def sonarr_path_to_container_path(self, sonarr_path: str) -> str: - """Convert Sonarr path to container path""" - # Replace /mnt/unionfs/Media with /media + """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 + + # Fallback: simple replacement for backward compatibility if sonarr_path.startswith("/mnt/unionfs/Media"): return sonarr_path.replace("/mnt/unionfs/Media", "/media") return sonarr_path def radarr_path_to_container_path(self, radarr_path: str) -> str: - """Convert Radarr path to container path""" - # Replace /mnt/unionfs/Media with /media + """Convert Radarr path to container path using environment mappings""" + # Try to match against configured Radarr root folders + for i, radarr_root in enumerate(self.radarr_roots): + if radarr_path.startswith(radarr_root): + # Map to corresponding movie path + if i < len(self.movie_paths): + container_root = self.movie_paths[i] + relative_path = radarr_path[len(radarr_root):].lstrip('/') + return str(Path(container_root) / relative_path) if relative_path else container_root + + # Fallback: simple replacement for backward compatibility if radarr_path.startswith("/mnt/unionfs/Media"): - container_path = radarr_path.replace("/mnt/unionfs/Media", "/media") - # Keep movies6 as movies6, don't convert to movies/6 - return container_path + return radarr_path.replace("/mnt/unionfs/Media", "/media") return radarr_path def container_path_to_host_path(self, container_path: str) -> str: