63 lines
2.0 KiB
Python
63 lines
2.0 KiB
Python
"""Configuration constants and EPG timespan parsing."""
|
|
|
|
import os
|
|
import re
|
|
from pathlib import Path
|
|
|
|
DATA_ROOT = Path("/data")
|
|
MOVIES_ROOT = Path("/movies")
|
|
SERIES_ROOT = Path("/series")
|
|
CHANNELS_FILE = DATA_ROOT / "channels.json"
|
|
VIDEO_EXTENSIONS = {".mkv", ".mp4", ".avi", ".mov", ".m4v", ".webm", ".wmv"}
|
|
DEFAULT_DURATION_SEC = 3600
|
|
|
|
# EPG timespan (parsed from EPG_TIMESPAN env)
|
|
EPG_TIMESPAN_DAYS = 14.0
|
|
EPG_TIMESPAN_SEC = 14.0 * 24 * 3600
|
|
SCHEDULE_CACHE_TTL_SEC = (14 * 24 - 3) * 3600
|
|
|
|
|
|
def _parse_epg_timespan(value: str) -> tuple[float, float]:
|
|
"""Parse EPG_TIMESPAN env (e.g. '2d', '14d', '48h'). Returns (days, seconds)."""
|
|
value = (value or "").strip().lower()
|
|
if not value:
|
|
return 14.0, 14.0 * 24 * 3600
|
|
m = re.match(r"^(\d+(?:\.\d+)?)\s*([dh])?$", value)
|
|
if not m:
|
|
return 14.0, 14.0 * 24 * 3600
|
|
num = float(m.group(1))
|
|
unit = m.group(2) or "d"
|
|
days = num / 24.0 if unit == "h" else num
|
|
sec = days * 24 * 3600
|
|
return days, sec
|
|
|
|
|
|
def init_epg_timespan() -> None:
|
|
"""Load EPG_TIMESPAN from env and set EPG_* and SCHEDULE_CACHE_TTL_SEC."""
|
|
global EPG_TIMESPAN_DAYS, EPG_TIMESPAN_SEC, SCHEDULE_CACHE_TTL_SEC
|
|
days, sec = _parse_epg_timespan(os.environ.get("EPG_TIMESPAN", ""))
|
|
EPG_TIMESPAN_DAYS = days
|
|
EPG_TIMESPAN_SEC = sec
|
|
schedule_ttl = sec - 3 * 3600
|
|
SCHEDULE_CACHE_TTL_SEC = max(3600, schedule_ttl)
|
|
|
|
|
|
init_epg_timespan()
|
|
|
|
# TMDB (The Movie Database) for EPG metadata — Dutch (nl). Set TMDB_API_KEY.
|
|
TMDB_API_BASE = "https://api.themoviedb.org/3"
|
|
TMDB_LANGUAGE = "nl"
|
|
TMDB_CACHE_TTL_SEC = 24 * 3600
|
|
TMDB_RATE_LIMIT_REQUESTS = 40
|
|
TMDB_RATE_LIMIT_WINDOW_SEC = 10.0
|
|
TMDB_CACHE_DIR = DATA_ROOT / "tmdb_cache"
|
|
try:
|
|
TMDB_PREFETCH_INTERVAL_SEC = int(os.environ.get("TMDB_PREFETCH_INTERVAL_SEC", str(6 * 3600)))
|
|
except (TypeError, ValueError):
|
|
TMDB_PREFETCH_INTERVAL_SEC = 6 * 3600
|
|
TMDB_IMAGE_BASE = "https://image.tmdb.org/t/p"
|
|
TMDB_IMAGE_STILL_SIZE = "w500"
|
|
|
|
# Preferred audio languages for streaming (in order): Dutch → Flemish → default
|
|
PREFERRED_AUDIO_LANGUAGES = ("nld", "dut", "nl", "vls")
|