mirror of
https://github.com/blakeblackshear/frigate.git
synced 2024-11-21 19:07:46 +01:00
Prevent recordings from being turned on if disabled in config (#6444)
* Prevent enabling recordings if not enabled in config * Fix conflict * Fix spacing * Update wording * Update wording --------- Co-authored-by: Blake Blackshear <blakeb@blakeshome.com>
This commit is contained in:
parent
305323c9e9
commit
5951a740d2
@ -180,6 +180,12 @@ class Dispatcher:
|
|||||||
record_settings = self.config.cameras[camera_name].record
|
record_settings = self.config.cameras[camera_name].record
|
||||||
|
|
||||||
if payload == "ON":
|
if payload == "ON":
|
||||||
|
if not self.config.cameras[camera_name].record.enabled_in_config:
|
||||||
|
logger.error(
|
||||||
|
f"Recordings must be enabled in the config to be turned on via MQTT."
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
if not record_settings.enabled:
|
if not record_settings.enabled:
|
||||||
logger.info(f"Turning on recordings for {camera_name}")
|
logger.info(f"Turning on recordings for {camera_name}")
|
||||||
record_settings.enabled = True
|
record_settings.enabled = True
|
||||||
|
@ -172,6 +172,9 @@ class RecordConfig(FrigateBaseModel):
|
|||||||
events: EventsConfig = Field(
|
events: EventsConfig = Field(
|
||||||
default_factory=EventsConfig, title="Event specific settings."
|
default_factory=EventsConfig, title="Event specific settings."
|
||||||
)
|
)
|
||||||
|
enabled_in_config: Optional[bool] = Field(
|
||||||
|
title="Keep track of original state of recording."
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class MotionConfig(FrigateBaseModel):
|
class MotionConfig(FrigateBaseModel):
|
||||||
@ -952,6 +955,9 @@ class FrigateConfig(FrigateBaseModel):
|
|||||||
for input in camera_config.ffmpeg.inputs:
|
for input in camera_config.ffmpeg.inputs:
|
||||||
input.path = input.path.format(**FRIGATE_ENV_VARS)
|
input.path = input.path.format(**FRIGATE_ENV_VARS)
|
||||||
|
|
||||||
|
# set config recording value
|
||||||
|
camera_config.record.enabled_in_config = camera_config.record.enabled
|
||||||
|
|
||||||
# Add default filters
|
# Add default filters
|
||||||
object_keys = camera_config.objects.track
|
object_keys = camera_config.objects.track
|
||||||
if camera_config.objects.filters is None:
|
if camera_config.objects.filters is None:
|
||||||
|
@ -16,7 +16,7 @@ export const handlers = [
|
|||||||
front: {
|
front: {
|
||||||
name: 'front',
|
name: 'front',
|
||||||
objects: { track: ['taco', 'cat', 'dog'] },
|
objects: { track: ['taco', 'cat', 'dog'] },
|
||||||
record: { enabled: true },
|
record: { enabled: true, enabled_in_config: true },
|
||||||
detect: { width: 1280, height: 720 },
|
detect: { width: 1280, height: 720 },
|
||||||
snapshots: {},
|
snapshots: {},
|
||||||
restream: { enabled: true, jsmpeg: { height: 720 } },
|
restream: { enabled: true, jsmpeg: { height: 720 } },
|
||||||
@ -25,7 +25,7 @@ export const handlers = [
|
|||||||
side: {
|
side: {
|
||||||
name: 'side',
|
name: 'side',
|
||||||
objects: { track: ['taco', 'cat', 'dog'] },
|
objects: { track: ['taco', 'cat', 'dog'] },
|
||||||
record: { enabled: false },
|
record: { enabled: false, enabled_in_config: true },
|
||||||
detect: { width: 1280, height: 720 },
|
detect: { width: 1280, height: 720 },
|
||||||
snapshots: {},
|
snapshots: {},
|
||||||
restream: { enabled: true, jsmpeg: { height: 720 } },
|
restream: { enabled: true, jsmpeg: { height: 720 } },
|
||||||
|
@ -16,12 +16,12 @@ export default function Cameras() {
|
|||||||
<ActivityIndicator />
|
<ActivityIndicator />
|
||||||
) : (
|
) : (
|
||||||
<div className="grid grid-cols-1 3xl:grid-cols-3 md:grid-cols-2 gap-4 p-2 px-4">
|
<div className="grid grid-cols-1 3xl:grid-cols-3 md:grid-cols-2 gap-4 p-2 px-4">
|
||||||
<SortedCameras unsortedCameras={config.cameras} />
|
<SortedCameras config={config} unsortedCameras={config.cameras} />
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function SortedCameras({ unsortedCameras }) {
|
function SortedCameras({ config, unsortedCameras }) {
|
||||||
const sortedCameras = useMemo(
|
const sortedCameras = useMemo(
|
||||||
() =>
|
() =>
|
||||||
Object.entries(unsortedCameras)
|
Object.entries(unsortedCameras)
|
||||||
@ -33,13 +33,13 @@ function SortedCameras({ unsortedCameras }) {
|
|||||||
return (
|
return (
|
||||||
<Fragment>
|
<Fragment>
|
||||||
{sortedCameras.map(([camera, conf]) => (
|
{sortedCameras.map(([camera, conf]) => (
|
||||||
<Camera key={camera} name={camera} conf={conf} />
|
<Camera key={camera} name={camera} config={config.cameras[camera]} conf={conf} />
|
||||||
))}
|
))}
|
||||||
</Fragment>
|
</Fragment>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function Camera({ name }) {
|
function Camera({ name, config }) {
|
||||||
const { payload: detectValue, send: sendDetect } = useDetectState(name);
|
const { payload: detectValue, send: sendDetect } = useDetectState(name);
|
||||||
const { payload: recordValue, send: sendRecordings } = useRecordingsState(name);
|
const { payload: recordValue, send: sendRecordings } = useRecordingsState(name);
|
||||||
const { payload: snapshotValue, send: sendSnapshots } = useSnapshotsState(name);
|
const { payload: snapshotValue, send: sendSnapshots } = useSnapshotsState(name);
|
||||||
@ -65,11 +65,13 @@ function Camera({ name }) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: `Toggle recordings ${recordValue === 'ON' ? 'off' : 'on'}`,
|
name: config.record.enabled_in_config ? `Toggle recordings ${recordValue === 'ON' ? 'off' : 'on'}` : 'Recordings must be enabled in the config to be turned on in the UI.',
|
||||||
icon: ClipIcon,
|
icon: ClipIcon,
|
||||||
color: recordValue === 'ON' ? 'blue' : 'gray',
|
color: config.record.enabled_in_config ? (recordValue === 'ON' ? 'blue' : 'gray') : 'red',
|
||||||
onClick: () => {
|
onClick: () => {
|
||||||
|
if (config.record.enabled_in_config) {
|
||||||
sendRecordings(recordValue === 'ON' ? 'OFF' : 'ON', true);
|
sendRecordings(recordValue === 'ON' ? 'OFF' : 'ON', true);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -81,7 +83,7 @@ function Camera({ name }) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
[detectValue, sendDetect, recordValue, sendRecordings, snapshotValue, sendSnapshots]
|
[config, detectValue, sendDetect, recordValue, sendRecordings, snapshotValue, sendSnapshots]
|
||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
Loading…
Reference in New Issue
Block a user