Add configurable TV season directory naming
Features:
- TV_SEASON_DIR_FORMAT: Configurable season folder creation (Season {season:02d})
- TV_SEASON_DIR_PATTERN: Configurable season folder detection (season )
- Support for different naming conventions (Season 01, S01, Season01, etc.)
- Updated .env.template with TV configuration examples
Fixes hardcoded 'Season ' patterns for better flexibility
This commit is contained in:
@@ -104,6 +104,17 @@ MOVIE_POLL_MODE=always
|
||||
# Update mode: backfill_only or overwrite
|
||||
MOVIE_DATE_UPDATE_MODE=backfill_only
|
||||
|
||||
# ===========================================
|
||||
# TV SERIES PROCESSING
|
||||
# ===========================================
|
||||
# Season directory naming format (supports {season} placeholder)
|
||||
# Examples: "Season {season:02d}" -> "Season 01", "S{season:02d}" -> "S01"
|
||||
TV_SEASON_DIR_FORMAT=Season {season:02d}
|
||||
|
||||
# Season directory detection pattern (lowercase, what to look for at start of dir name)
|
||||
# Examples: "season " -> matches "Season 01", "s" -> matches "S01", "season" -> matches "Season01"
|
||||
TV_SEASON_DIR_PATTERN=season
|
||||
|
||||
# ===========================================
|
||||
# LOGGING
|
||||
# ===========================================
|
||||
|
||||
+18
-5
@@ -152,6 +152,10 @@ class NFOGuardConfig:
|
||||
self.max_release_date_gap_years = int(os.environ.get("MAX_RELEASE_DATE_GAP_YEARS", "10"))
|
||||
self.movie_poll_mode = os.environ.get("MOVIE_POLL_MODE", "always").lower()
|
||||
self.movie_update_mode = os.environ.get("MOVIE_DATE_UPDATE_MODE", "backfill_only").lower()
|
||||
|
||||
# TV processing
|
||||
self.tv_season_dir_format = os.environ.get("TV_SEASON_DIR_FORMAT", "Season {season:02d}")
|
||||
self.tv_season_dir_pattern = os.environ.get("TV_SEASON_DIR_PATTERN", "season ").lower()
|
||||
|
||||
config = NFOGuardConfig()
|
||||
|
||||
@@ -261,8 +265,9 @@ class TVProcessor:
|
||||
if (season, episode) in disk_episodes:
|
||||
# Create NFO
|
||||
if config.manage_nfo:
|
||||
season_dir = series_path / config.tv_season_dir_format.format(season=season)
|
||||
self.nfo_manager.create_episode_nfo(
|
||||
series_path / f"Season {season:02d}",
|
||||
season_dir,
|
||||
season, episode, aired, dateadded, source, config.lock_metadata
|
||||
)
|
||||
|
||||
@@ -280,7 +285,7 @@ class TVProcessor:
|
||||
seasons_processed = set()
|
||||
for (season, episode) in disk_episodes.keys():
|
||||
if season not in seasons_processed:
|
||||
season_dir = series_path / f"Season {season:02d}"
|
||||
season_dir = series_path / config.tv_season_dir_format.format(season=season)
|
||||
self.nfo_manager.create_season_nfo(season_dir, season)
|
||||
seasons_processed.add(season)
|
||||
|
||||
@@ -294,12 +299,20 @@ class TVProcessor:
|
||||
video_exts = (".mkv", ".mp4", ".avi", ".mov", ".m4v")
|
||||
|
||||
for season_dir in series_path.iterdir():
|
||||
if not (season_dir.is_dir() and season_dir.name.lower().startswith("season ")):
|
||||
if not (season_dir.is_dir() and season_dir.name.lower().startswith(config.tv_season_dir_pattern)):
|
||||
continue
|
||||
|
||||
try:
|
||||
season_num = int(season_dir.name.split()[-1])
|
||||
except Exception:
|
||||
# Extract season number from directory name
|
||||
# Handle formats like "Season 01", "S01", "Season01", etc.
|
||||
dir_name = season_dir.name.lower()
|
||||
if config.tv_season_dir_pattern in dir_name:
|
||||
# Extract everything after the pattern
|
||||
season_part = dir_name[len(config.tv_season_dir_pattern):].strip()
|
||||
else:
|
||||
continue
|
||||
season_num = int(season_part)
|
||||
except (ValueError, IndexError):
|
||||
continue
|
||||
|
||||
for video_file in season_dir.iterdir():
|
||||
|
||||
Reference in New Issue
Block a user