mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-05-01 19:17:41 +03:00
Fix incorrect accesses
This commit is contained in:
parent
c02d737c95
commit
e560112732
@ -48,7 +48,7 @@ from .camera.genai import GenAIConfig
|
|||||||
from .camera.motion import MotionConfig
|
from .camera.motion import MotionConfig
|
||||||
from .camera.notification import NotificationConfig
|
from .camera.notification import NotificationConfig
|
||||||
from .camera.objects import FilterConfig, ObjectConfig
|
from .camera.objects import FilterConfig, ObjectConfig
|
||||||
from .camera.record import RecordConfig, RetainModeEnum
|
from .camera.record import RecordConfig
|
||||||
from .camera.review import ReviewConfig
|
from .camera.review import ReviewConfig
|
||||||
from .camera.snapshots import SnapshotsConfig
|
from .camera.snapshots import SnapshotsConfig
|
||||||
from .camera.timestamp import TimestampStyleConfig
|
from .camera.timestamp import TimestampStyleConfig
|
||||||
@ -204,33 +204,6 @@ def verify_valid_live_stream_names(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def verify_recording_retention(camera_config: CameraConfig) -> None:
|
|
||||||
"""Verify that recording retention modes are ranked correctly."""
|
|
||||||
rank_map = {
|
|
||||||
RetainModeEnum.all: 0,
|
|
||||||
RetainModeEnum.motion: 1,
|
|
||||||
RetainModeEnum.active_objects: 2,
|
|
||||||
}
|
|
||||||
|
|
||||||
if (
|
|
||||||
camera_config.record.retain.days != 0
|
|
||||||
and rank_map[camera_config.record.retain.mode]
|
|
||||||
> rank_map[camera_config.record.alerts.retain.mode]
|
|
||||||
):
|
|
||||||
logger.warning(
|
|
||||||
f"{camera_config.name}: Recording retention is configured for {camera_config.record.retain.mode} and alert retention is configured for {camera_config.record.alerts.retain.mode}. The more restrictive retention policy will be applied."
|
|
||||||
)
|
|
||||||
|
|
||||||
if (
|
|
||||||
camera_config.record.retain.days != 0
|
|
||||||
and rank_map[camera_config.record.retain.mode]
|
|
||||||
> rank_map[camera_config.record.detections.retain.mode]
|
|
||||||
):
|
|
||||||
logger.warning(
|
|
||||||
f"{camera_config.name}: Recording retention is configured for {camera_config.record.retain.mode} and detection retention is configured for {camera_config.record.detections.retain.mode}. The more restrictive retention policy will be applied."
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def verify_recording_segments_setup_with_reasonable_time(
|
def verify_recording_segments_setup_with_reasonable_time(
|
||||||
camera_config: CameraConfig,
|
camera_config: CameraConfig,
|
||||||
) -> None:
|
) -> None:
|
||||||
@ -697,7 +670,6 @@ class FrigateConfig(FrigateBaseModel):
|
|||||||
|
|
||||||
verify_config_roles(camera_config)
|
verify_config_roles(camera_config)
|
||||||
verify_valid_live_stream_names(self, camera_config)
|
verify_valid_live_stream_names(self, camera_config)
|
||||||
verify_recording_retention(camera_config)
|
|
||||||
verify_recording_segments_setup_with_reasonable_time(camera_config)
|
verify_recording_segments_setup_with_reasonable_time(camera_config)
|
||||||
verify_zone_objects_are_tracked(camera_config)
|
verify_zone_objects_are_tracked(camera_config)
|
||||||
verify_required_zones_exist(camera_config)
|
verify_required_zones_exist(camera_config)
|
||||||
|
|||||||
@ -285,12 +285,16 @@ class RecordingMaintainer(threading.Thread):
|
|||||||
Path(cache_path).unlink(missing_ok=True)
|
Path(cache_path).unlink(missing_ok=True)
|
||||||
return
|
return
|
||||||
|
|
||||||
# if cached file's start_time is earlier than the retain days for the camera
|
record_config = self.config.cameras[camera].record
|
||||||
# meaning continuous recording is not enabled
|
highest = None
|
||||||
if start_time <= (
|
|
||||||
datetime.datetime.now().astimezone(datetime.timezone.utc)
|
if record_config.continuous.days > 0:
|
||||||
- datetime.timedelta(days=self.config.cameras[camera].record.retain.days)
|
highest = "continuous"
|
||||||
):
|
elif record_config.motion.days > 0:
|
||||||
|
highest = "motion"
|
||||||
|
|
||||||
|
# continuous / motion recording is not enabled
|
||||||
|
if highest is None:
|
||||||
# if the cached segment overlaps with the review items:
|
# if the cached segment overlaps with the review items:
|
||||||
overlaps = False
|
overlaps = False
|
||||||
for review in reviews:
|
for review in reviews:
|
||||||
@ -344,8 +348,7 @@ class RecordingMaintainer(threading.Thread):
|
|||||||
).astimezone(datetime.timezone.utc)
|
).astimezone(datetime.timezone.utc)
|
||||||
if end_time < retain_cutoff:
|
if end_time < retain_cutoff:
|
||||||
self.drop_segment(cache_path)
|
self.drop_segment(cache_path)
|
||||||
# else retain days includes this segment
|
# continuous / motion is enabled
|
||||||
# meaning continuous recording is enabled
|
|
||||||
else:
|
else:
|
||||||
# assume that empty means the relevant recording info has not been received yet
|
# assume that empty means the relevant recording info has not been received yet
|
||||||
camera_info = self.object_recordings_info[camera]
|
camera_info = self.object_recordings_info[camera]
|
||||||
@ -360,7 +363,11 @@ class RecordingMaintainer(threading.Thread):
|
|||||||
).astimezone(datetime.timezone.utc)
|
).astimezone(datetime.timezone.utc)
|
||||||
>= end_time
|
>= end_time
|
||||||
):
|
):
|
||||||
record_mode = self.config.cameras[camera].record.retain.mode
|
record_mode = (
|
||||||
|
RetainModeEnum.all
|
||||||
|
if highest == "continuous"
|
||||||
|
else RetainModeEnum.motion
|
||||||
|
)
|
||||||
return await self.move_segment(
|
return await self.move_segment(
|
||||||
camera, start_time, end_time, duration, cache_path, record_mode
|
camera, start_time, end_time, duration, cache_path, record_mode
|
||||||
)
|
)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user