From c33327175a6a2811d35b036dc4d166623ca7558c Mon Sep 17 00:00:00 2001 From: Rui Alves Date: Sat, 21 Sep 2024 12:48:13 +0100 Subject: [PATCH] Use query parameters for the media snapshot.jpg endpoint --- frigate/api/defs/media_query_parameters.py | 8 ++++++++ frigate/api/media.py | 24 ++++++++++------------ 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/frigate/api/defs/media_query_parameters.py b/frigate/api/defs/media_query_parameters.py index bee1cba07..e7ddd89bf 100644 --- a/frigate/api/defs/media_query_parameters.py +++ b/frigate/api/defs/media_query_parameters.py @@ -21,3 +21,11 @@ class MediaLatestFrameQueryParams(BaseModel): regions: Optional[int] = None quality: Optional[int] = 70 height: Optional[int] = None + +class MediaEventsSnapshotQueryParams(BaseModel): + download: bool = False, + timestamp: Optional[int] = None, + bbox: Optional[int] = None, + crop: Optional[int] = None, + height: Optional[int] = None, + quality: Optional[int] = 70, diff --git a/frigate/api/media.py b/frigate/api/media.py index 476d017ff..6fda09b94 100644 --- a/frigate/api/media.py +++ b/frigate/api/media.py @@ -20,7 +20,10 @@ from fastapi.responses import FileResponse, JSONResponse, StreamingResponse from peewee import DoesNotExist, fn from tzlocal import get_localzone_name -from frigate.api.defs.media_query_parameters import MediaLatestFrameQueryParams +from frigate.api.defs.media_query_parameters import ( + MediaEventsSnapshotQueryParams, + MediaLatestFrameQueryParams, +) from frigate.api.defs.tags import Tags from frigate.config import FrigateConfig from frigate.const import ( @@ -984,12 +987,7 @@ def event_snapshot_clean(request: Request, event_id: str, download: bool = False def event_snapshot( request: Request, event_id: str, - download: bool = False, - timestamp: Optional[int] = None, - bbox: Optional[int] = None, - crop: Optional[int] = None, - height: Optional[int] = None, - quality: Optional[int] = 70, + params: MediaEventsSnapshotQueryParams = Depends(), ): event_complete = False jpg_bytes = None @@ -1015,11 +1013,11 @@ def event_snapshot( tracked_obj = camera_state.tracked_objects.get(event_id) if tracked_obj is not None: jpg_bytes = tracked_obj.get_jpg_bytes( - timestamp=timestamp, - bounding_box=bbox, - crop=crop, - height=height, - quality=quality, + timestamp=params.timestamp, + bounding_box=params.bbox, + crop=params.crop, + height=params.height, + quality=params.quality, ) except Exception: return JSONResponse( @@ -1041,7 +1039,7 @@ def event_snapshot( "Cache-Control": "private, max-age=31536000" if event_complete else "no-store", } - if download: + if params.download: headers["Content-Disposition"] = f"attachment; filename=snapshot-{event_id}.jpg" return StreamingResponse(