Fix incorrect accesses

This commit is contained in:
Nicolas Mowen 2025-05-30 14:24:38 -06:00
parent c02d737c95
commit e560112732
2 changed files with 17 additions and 38 deletions

View File

@ -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)

View File

@ -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
) )