627409cf56
- Refactor Frigate generator to support adding cameras to existing configs - Add text-based YAML parsing to preserve formatting and comments - Implement duplicate camera/stream name detection and auto-numbering - Add support for inserting cameras into existing go2rtc and cameras sections - Update UI: add textarea for existing config input and generate button - Preserve user's existing configuration when adding new cameras - Add example config template for new users - Update ConfigPanel to initialize Frigate tab instead of auto-generating - Add FrigateGenerator import to main.js - Add custom styles for Frigate config input and output sections - Support both empty config (create from scratch) and existing config (merge) modes Camera database updates: - Add OpenIPC firmware camera support (257 models) - Add Yi-Hack firmware variants (v4, v5, Allwinner, MStar) - Add Fang-Hacks firmware support - Add OpenMiko firmware support - Update Sonoff camera models - Update Thingino firmware camera models
99 lines
2.9 KiB
JavaScript
99 lines
2.9 KiB
JavaScript
import { Go2RTCGenerator } from '../config-generators/go2rtc/index.js';
|
|
import { FrigateGenerator } from '../config-generators/frigate/index.js';
|
|
|
|
export class ConfigPanel {
|
|
constructor() {
|
|
this.mainStream = null;
|
|
this.subStream = null;
|
|
}
|
|
|
|
render(mainStream, subStream = null) {
|
|
this.mainStream = mainStream;
|
|
this.subStream = subStream;
|
|
|
|
// Update main stream info
|
|
document.getElementById('selected-main-type').textContent = mainStream.type;
|
|
document.getElementById('selected-main-url').textContent = this.maskCredentials(mainStream.url);
|
|
|
|
// Update sub stream info if provided
|
|
if (subStream) {
|
|
document.getElementById('selected-sub-type').textContent = subStream.type;
|
|
document.getElementById('selected-sub-url').textContent = this.maskCredentials(subStream.url);
|
|
}
|
|
|
|
// Generate configs for URL and Go2RTC (as before)
|
|
const urlConfig = this.generateURLConfig();
|
|
const go2rtcConfig = Go2RTCGenerator.generate(mainStream, subStream);
|
|
|
|
// Update config displays
|
|
document.getElementById('config-url').textContent = urlConfig;
|
|
document.getElementById('config-go2rtc').textContent = go2rtcConfig;
|
|
|
|
// For Frigate: initialize the tab instead of generating automatically
|
|
this.initializeFrigateTab();
|
|
}
|
|
|
|
/**
|
|
* Initialize Frigate tab with example config
|
|
*/
|
|
initializeFrigateTab() {
|
|
const textarea = document.getElementById('existing-frigate-config');
|
|
const outputSection = document.getElementById('frigate-output-section');
|
|
|
|
// Show example config if field is empty
|
|
if (!textarea.value || textarea.value.trim() === '') {
|
|
textarea.value = this.getExampleConfig();
|
|
}
|
|
|
|
// Hide output section
|
|
outputSection.classList.add('hidden');
|
|
document.getElementById('config-frigate').textContent = '';
|
|
}
|
|
|
|
/**
|
|
* Get example Frigate config
|
|
*/
|
|
getExampleConfig() {
|
|
return `mqtt:
|
|
enabled: false
|
|
|
|
# Global Recording Settings
|
|
record:
|
|
enabled: true
|
|
retain:
|
|
days: 7
|
|
mode: motion # Record only on motion detection
|
|
|
|
# Go2RTC Configuration (Frigate built-in)
|
|
go2rtc:
|
|
streams:
|
|
# Your existing streams will be preserved here
|
|
|
|
# Frigate Camera Configuration
|
|
cameras:
|
|
# Your existing cameras will be preserved here
|
|
|
|
version: 0.16-0`;
|
|
}
|
|
|
|
generateURLConfig() {
|
|
if (this.subStream) {
|
|
return `Main Stream:\n${this.mainStream.url}\n\nSub Stream:\n${this.subStream.url}`;
|
|
}
|
|
return this.mainStream.url;
|
|
}
|
|
|
|
maskCredentials(url) {
|
|
try {
|
|
const urlObj = new URL(url);
|
|
if (urlObj.username || urlObj.password) {
|
|
urlObj.username = urlObj.username ? '***' : '';
|
|
urlObj.password = urlObj.password ? '***' : '';
|
|
}
|
|
return urlObj.toString();
|
|
} catch (e) {
|
|
return url;
|
|
}
|
|
}
|
|
}
|