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
|
# Update mode: backfill_only or overwrite
|
||||||
MOVIE_DATE_UPDATE_MODE=backfill_only
|
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
|
# LOGGING
|
||||||
# ===========================================
|
# ===========================================
|
||||||
|
|||||||
+18
-5
@@ -153,6 +153,10 @@ class NFOGuardConfig:
|
|||||||
self.movie_poll_mode = os.environ.get("MOVIE_POLL_MODE", "always").lower()
|
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()
|
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()
|
config = NFOGuardConfig()
|
||||||
|
|
||||||
# ---------------------------
|
# ---------------------------
|
||||||
@@ -261,8 +265,9 @@ class TVProcessor:
|
|||||||
if (season, episode) in disk_episodes:
|
if (season, episode) in disk_episodes:
|
||||||
# Create NFO
|
# Create NFO
|
||||||
if config.manage_nfo:
|
if config.manage_nfo:
|
||||||
|
season_dir = series_path / config.tv_season_dir_format.format(season=season)
|
||||||
self.nfo_manager.create_episode_nfo(
|
self.nfo_manager.create_episode_nfo(
|
||||||
series_path / f"Season {season:02d}",
|
season_dir,
|
||||||
season, episode, aired, dateadded, source, config.lock_metadata
|
season, episode, aired, dateadded, source, config.lock_metadata
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -280,7 +285,7 @@ class TVProcessor:
|
|||||||
seasons_processed = set()
|
seasons_processed = set()
|
||||||
for (season, episode) in disk_episodes.keys():
|
for (season, episode) in disk_episodes.keys():
|
||||||
if season not in seasons_processed:
|
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)
|
self.nfo_manager.create_season_nfo(season_dir, season)
|
||||||
seasons_processed.add(season)
|
seasons_processed.add(season)
|
||||||
|
|
||||||
@@ -294,12 +299,20 @@ class TVProcessor:
|
|||||||
video_exts = (".mkv", ".mp4", ".avi", ".mov", ".m4v")
|
video_exts = (".mkv", ".mp4", ".avi", ".mov", ".m4v")
|
||||||
|
|
||||||
for season_dir in series_path.iterdir():
|
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
|
continue
|
||||||
|
|
||||||
try:
|
try:
|
||||||
season_num = int(season_dir.name.split()[-1])
|
# Extract season number from directory name
|
||||||
except Exception:
|
# 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
|
continue
|
||||||
|
|
||||||
for video_file in season_dir.iterdir():
|
for video_file in season_dir.iterdir():
|
||||||
|
|||||||
Reference in New Issue
Block a user