From 644ca0a8eece0a84872843ab28927f7dae8ed574 Mon Sep 17 00:00:00 2001 From: gsd Date: Wed, 7 Aug 2024 18:22:13 +0300 Subject: [PATCH] move shit's --- config_parser.py => backend/config_parser.py | 0 nvr_core.py => backend/nvr_core.py | 0 nvr_types.py => backend/nvr_types.py | 0 server.py => backend/server.py | 26 ++++++++++++++++---- 4 files changed, 21 insertions(+), 5 deletions(-) rename config_parser.py => backend/config_parser.py (100%) rename nvr_core.py => backend/nvr_core.py (100%) rename nvr_types.py => backend/nvr_types.py (100%) rename server.py => backend/server.py (75%) diff --git a/config_parser.py b/backend/config_parser.py similarity index 100% rename from config_parser.py rename to backend/config_parser.py diff --git a/nvr_core.py b/backend/nvr_core.py similarity index 100% rename from nvr_core.py rename to backend/nvr_core.py diff --git a/nvr_types.py b/backend/nvr_types.py similarity index 100% rename from nvr_types.py rename to backend/nvr_types.py diff --git a/server.py b/backend/server.py similarity index 75% rename from server.py rename to backend/server.py index 495baa7..32f9110 100644 --- a/server.py +++ b/backend/server.py @@ -21,7 +21,7 @@ class Server: print("i am alive") def setup_routers(self): - @self.app.get("/api/recorders", status_code=200) + @self.app.get("/api", status_code=200) async def getRecorders(response: Response): try: return {"ok":True, "data":self.config.getRecorders()} @@ -30,7 +30,7 @@ class Server: response.status_code = 400 return {"ok":False, "error":e} - @self.app.get("/api/recorders/{recorder_index}/channels", status_code=200) + @self.app.get("/api/channels/{recorder_index}", status_code=200) async def getRecorder(response: Response, recorder_index:int): try: nvr:NVR = self.config.getRecorder(recorder_index).nvr @@ -44,7 +44,7 @@ class Server: finally: nvr.logout() - @self.app.get("/api/recorders/{recorder_index}/{channel}/{stream}") + @self.app.get("/api/history/{recorder_index}/{channel}/{stream}") async def getHistory(response: Response, recorder_index:int, channel: int, stream: int, start_date:str = None, end_date:str = None): try: nvr:NVR = self.config.getRecorder(recorder_index).nvr @@ -57,7 +57,23 @@ class Server: finally: nvr.logout() - @self.app.get("/api/recorders/{recorder_index}/file") + @self.app.get("/api/snapshot/{recorder_index}/{channel}") + async def getSnapshot(response: Response, recorder_index:int, channel: int): + try: + nvr:NVR = self.config.getRecorder(recorder_index).nvr + await nvr.login() + async def image(): + async for b in await nvr.client.snapshot(channel): + yield b + return StreamingResponse(image(), media_type="image/jpg") + except Exception as e: + traceback.print_exc() + response.status_code = 400 + return b"" + finally: + nvr.logout() + + @self.app.get("/api/file/{recorder_index}") async def getFile(response: Response, recorder_index:int, b64:str, background_tasks: BackgroundTasks): try: if len(b64) == 0: @@ -77,7 +93,7 @@ class Server: nvr.logout() background_tasks.add_task(after) - return StreamingResponse(nvr.stream_file(file), media_type="application/octet-stream") + return StreamingResponse(nvr.stream_file(file), media_type="application/octet-stream", headers={"Content-Length":file.size}) except Exception as e: traceback.print_exc() response.status_code = 400