mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-03-30 20:04:54 +03:00
Some checks are pending
CI / AMD64 Build (push) Waiting to run
CI / ARM Build (push) Waiting to run
CI / Jetson Jetpack 6 (push) Waiting to run
CI / AMD64 Extra Build (push) Blocked by required conditions
CI / ARM Extra Build (push) Blocked by required conditions
CI / Synaptics Build (push) Blocked by required conditions
CI / Assemble and push default build (push) Blocked by required conditions
* add generation script a script to read yaml code blocks from docs markdown files and generate corresponding "Frigate UI" tab instructions based on the json schema, i18n, section configs (hidden fields), and nav mappings * first pass * components * add to gitignore * second pass * fix broken anchors * fixes * clean up tabs * version bump * tweaks * remove role mapping config from ui
121 lines
4.3 KiB
Python
121 lines
4.3 KiB
Python
"""Map config section keys to Settings UI navigation paths."""
|
|
|
|
# Derived from web/src/pages/Settings.tsx section mappings
|
|
# and web/public/locales/en/views/settings.json menu labels.
|
|
#
|
|
# Format: section_key -> (group_label, page_label)
|
|
# Navigation path: "Settings > {group_label} > {page_label}"
|
|
|
|
GLOBAL_NAV: dict[str, tuple[str, str]] = {
|
|
"detect": ("Global configuration", "Object detection"),
|
|
"ffmpeg": ("Global configuration", "FFmpeg"),
|
|
"record": ("Global configuration", "Recording"),
|
|
"snapshots": ("Global configuration", "Snapshots"),
|
|
"motion": ("Global configuration", "Motion detection"),
|
|
"objects": ("Global configuration", "Objects"),
|
|
"review": ("Global configuration", "Review"),
|
|
"audio": ("Global configuration", "Audio events"),
|
|
"live": ("Global configuration", "Live playback"),
|
|
"timestamp_style": ("Global configuration", "Timestamp style"),
|
|
"notifications": ("Notifications", "Notifications"),
|
|
}
|
|
|
|
CAMERA_NAV: dict[str, tuple[str, str]] = {
|
|
"detect": ("Camera configuration", "Object detection"),
|
|
"ffmpeg": ("Camera configuration", "FFmpeg"),
|
|
"record": ("Camera configuration", "Recording"),
|
|
"snapshots": ("Camera configuration", "Snapshots"),
|
|
"motion": ("Camera configuration", "Motion detection"),
|
|
"objects": ("Camera configuration", "Objects"),
|
|
"review": ("Camera configuration", "Review"),
|
|
"audio": ("Camera configuration", "Audio events"),
|
|
"audio_transcription": ("Camera configuration", "Audio transcription"),
|
|
"notifications": ("Camera configuration", "Notifications"),
|
|
"live": ("Camera configuration", "Live playback"),
|
|
"birdseye": ("Camera configuration", "Birdseye"),
|
|
"face_recognition": ("Camera configuration", "Face recognition"),
|
|
"lpr": ("Camera configuration", "License plate recognition"),
|
|
"mqtt": ("Camera configuration", "MQTT"),
|
|
"onvif": ("Camera configuration", "ONVIF"),
|
|
"ui": ("Camera configuration", "Camera UI"),
|
|
"timestamp_style": ("Camera configuration", "Timestamp style"),
|
|
}
|
|
|
|
ENRICHMENT_NAV: dict[str, tuple[str, str]] = {
|
|
"semantic_search": ("Enrichments", "Semantic search"),
|
|
"genai": ("Enrichments", "Generative AI"),
|
|
"face_recognition": ("Enrichments", "Face recognition"),
|
|
"lpr": ("Enrichments", "License plate recognition"),
|
|
"classification": ("Enrichments", "Object classification"),
|
|
"audio_transcription": ("Enrichments", "Audio transcription"),
|
|
}
|
|
|
|
SYSTEM_NAV: dict[str, tuple[str, str]] = {
|
|
"go2rtc_streams": ("System", "go2rtc streams"),
|
|
"database": ("System", "Database"),
|
|
"mqtt": ("System", "MQTT"),
|
|
"tls": ("System", "TLS"),
|
|
"auth": ("System", "Authentication"),
|
|
"networking": ("System", "Networking"),
|
|
"proxy": ("System", "Proxy"),
|
|
"ui": ("System", "UI"),
|
|
"logger": ("System", "Logging"),
|
|
"environment_vars": ("System", "Environment variables"),
|
|
"telemetry": ("System", "Telemetry"),
|
|
"birdseye": ("System", "Birdseye"),
|
|
"detectors": ("System", "Detector hardware"),
|
|
"model": ("System", "Detection model"),
|
|
}
|
|
|
|
# All known top-level config section keys
|
|
ALL_CONFIG_SECTIONS = (
|
|
set(GLOBAL_NAV)
|
|
| set(CAMERA_NAV)
|
|
| set(ENRICHMENT_NAV)
|
|
| set(SYSTEM_NAV)
|
|
| {"cameras"}
|
|
)
|
|
|
|
|
|
def get_nav_path(section_key: str, level: str = "global") -> str | None:
|
|
"""Get the full navigation path for a config section.
|
|
|
|
Args:
|
|
section_key: Config section key (e.g., "record")
|
|
level: "global", "camera", "enrichment", or "system"
|
|
|
|
Returns:
|
|
NavPath string like "Settings > Global configuration > Recording",
|
|
or None if not found.
|
|
"""
|
|
nav_tables = {
|
|
"global": GLOBAL_NAV,
|
|
"camera": CAMERA_NAV,
|
|
"enrichment": ENRICHMENT_NAV,
|
|
"system": SYSTEM_NAV,
|
|
}
|
|
|
|
table = nav_tables.get(level)
|
|
if table is None:
|
|
return None
|
|
|
|
entry = table.get(section_key)
|
|
if entry is None:
|
|
return None
|
|
|
|
group, page = entry
|
|
return f"Settings > {group} > {page}"
|
|
|
|
|
|
def detect_level(section_key: str) -> str:
|
|
"""Detect whether a config section is global, camera, enrichment, or system."""
|
|
if section_key in SYSTEM_NAV:
|
|
return "system"
|
|
if section_key in ENRICHMENT_NAV:
|
|
return "enrichment"
|
|
if section_key in GLOBAL_NAV:
|
|
return "global"
|
|
if section_key in CAMERA_NAV:
|
|
return "camera"
|
|
return "global"
|