The .gitignore 'downloads/' pattern for the DOWNLOAD_ROOT bind mount also matched the
backend/app/downloads source package, so formats.py/storage.py/service.py never got
committed with M2. Anchor the ignore to '/downloads/' (repo root only) and add the package.
storage.sanitize() now handles arbitrarily messy titles (emoji, ZWJ, fullwidth, clickbait
punctuation): NFKC-normalize, drop emoji/symbol/control unicode categories, collapse
repeated punctuation, underscore-join words -> space-free paths. Accents (HU/DE) preserved,
no ASCII folding. Plex layout uses _-_ separators + Season_{year}.
32 lines
475 B
Text
32 lines
475 B
Text
# Secrets / local config
|
|
.env
|
|
*.env.local
|
|
|
|
# Python
|
|
__pycache__/
|
|
*.py[cod]
|
|
.venv/
|
|
venv/
|
|
.mypy_cache/
|
|
.pytest_cache/
|
|
.ruff_cache/
|
|
|
|
# Node / frontend
|
|
node_modules/
|
|
frontend/dist/
|
|
*.log
|
|
|
|
# Data / dumps
|
|
*.dump
|
|
*.sql.gz
|
|
backups/
|
|
|
|
# Download center: locally downloaded media (the DOWNLOAD_ROOT bind mount at the repo root).
|
|
# Anchored with a leading slash so it does NOT also ignore the backend/app/downloads package.
|
|
/downloads/
|
|
|
|
# OS / editor
|
|
.DS_Store
|
|
Thumbs.db
|
|
.idea/
|
|
.vscode/
|