Settings tabs, log overlay, external URL, Sources tree restructure, audio fixes

- Settings modal split into 3 tabs: General, Backup, MQTT
- Log viewer moved to full-screen overlay with compact toolbar
- External URL setting: API endpoints + UI for configuring server domain
  used in webhook/WS URLs instead of auto-detected local IP
- Sources tab tree restructured: Picture Source (Screen Capture/Static/
  Processed sub-groups), Color Strip, Audio, Utility
- TreeNav extended to support nested groups (3-level tree)
- Audio tab split into Sources and Templates sub-tabs
- Fix audio template test: device picker now filters by engine type
  (was showing WASAPI indices for sounddevice templates)
- Audio template test device picker disabled during active test
- Rename "Input Source" to "Source" in CSS test preview (en/ru/zh)
- Fix i18n: log filter/level items deferred to avoid stale t() calls

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-17 17:16:57 +03:00
parent 191c988cf9
commit 05152a0f51
17 changed files with 335 additions and 71 deletions

View File

@@ -316,6 +316,12 @@
"settings.tab.backup": "Backup",
"settings.tab.mqtt": "MQTT",
"settings.logs.open_viewer": "Open Log Viewer",
"settings.external_url.label": "External URL",
"settings.external_url.hint": "If set, this base URL is used in webhook URLs and other user-visible links instead of the auto-detected local IP. Example: https://myserver.example.com:8080",
"settings.external_url.placeholder": "https://myserver.example.com:8080",
"settings.external_url.save": "Save",
"settings.external_url.saved": "External URL saved",
"settings.external_url.save_error": "Failed to save external URL",
"settings.general.title": "General Settings",
"settings.capture.title": "Capture Settings",
"settings.capture.saved": "Capture settings updated",
@@ -447,6 +453,7 @@
"streams.group.css_processing": "Processing Templates",
"streams.group.color_strip": "Color Strips",
"streams.group.audio": "Audio",
"streams.group.audio_templates": "Audio Templates",
"streams.section.streams": "Sources",
"streams.add": "Add Source",
"streams.add.raw": "Add Screen Capture",
@@ -1113,7 +1120,7 @@
"color_strip.type.processed": "Processed",
"color_strip.type.processed.desc": "Apply a processing template to another source",
"color_strip.type.processed.hint": "Wraps an existing color strip source and pipes its output through a filter chain.",
"color_strip.processed.input": "Input Source:",
"color_strip.processed.input": "Source:",
"color_strip.processed.input.hint": "The color strip source whose output will be processed",
"color_strip.processed.template": "Processing Template:",
"color_strip.processed.template.hint": "Filter chain to apply to the input source output",
@@ -1276,11 +1283,20 @@
"audio_template.error.delete": "Failed to delete audio template",
"streams.group.value": "Value Sources",
"streams.group.sync": "Sync Clocks",
"tree.group.picture": "Picture Source",
"tree.group.capture": "Screen Capture",
"tree.group.static": "Static",
"tree.group.processing": "Processed",
"tree.group.picture": "Picture",
"tree.group.strip": "Color Strip",
"tree.group.audio": "Audio",
"tree.group.utility": "Utility",
"tree.leaf.sources": "Sources",
"tree.leaf.engine_templates": "Engine Templates",
"tree.leaf.images": "Images",
"tree.leaf.video": "Video",
"tree.leaf.filter_templates": "Filter Templates",
"tree.leaf.processing_templates": "Processing Templates",
"tree.leaf.templates": "Templates",
"value_source.group.title": "Value Sources",
"value_source.select_type": "Select Value Source Type",
"value_source.add": "Add Value Source",