fix Playback section
This commit is contained in:
+16
-10
@@ -15,12 +15,17 @@ class RecordingItem:
|
||||
|
||||
|
||||
def _parse_filename(filename: str) -> Optional[datetime]:
|
||||
if not filename.endswith(".fmp4"):
|
||||
return None
|
||||
if filename.endswith(".fmp4"):
|
||||
stem = filename[:-5]
|
||||
elif filename.endswith(".mp4"):
|
||||
stem = filename[:-4]
|
||||
else:
|
||||
return None
|
||||
for fmt in ("%Y-%m-%d_%H-%M-%S-%f", "%Y-%m-%d_%H-%M-%S"):
|
||||
try:
|
||||
return datetime.strptime(stem, "%Y-%m-%d_%H-%M-%S-%f")
|
||||
return datetime.strptime(stem, fmt)
|
||||
except ValueError:
|
||||
continue
|
||||
return None
|
||||
|
||||
|
||||
@@ -36,28 +41,29 @@ def list_recordings(
|
||||
if not cam_dir.exists() or not cam_dir.is_dir():
|
||||
return []
|
||||
|
||||
items: list[tuple[datetime, str]] = []
|
||||
for p in cam_dir.iterdir():
|
||||
items: list[tuple[datetime, str, str]] = []
|
||||
for p in cam_dir.rglob("*"):
|
||||
if not p.is_file():
|
||||
continue
|
||||
dt = _parse_filename(p.name)
|
||||
if dt is None:
|
||||
if not (p.name.endswith(".fmp4") or p.name.endswith(".mp4")):
|
||||
continue
|
||||
dt = _parse_filename(p.name) or datetime.fromtimestamp(p.stat().st_mtime)
|
||||
if date is not None and dt.strftime("%Y-%m-%d") != date:
|
||||
continue
|
||||
items.append((dt, p.name))
|
||||
rel = p.relative_to(base).as_posix()
|
||||
items.append((dt, p.name, rel))
|
||||
|
||||
items.sort(key=lambda x: x[0], reverse=True)
|
||||
sliced = items[offset : offset + limit]
|
||||
|
||||
out: list[RecordingItem] = []
|
||||
for dt, name in sliced:
|
||||
for dt, name, rel in sliced:
|
||||
out.append(
|
||||
RecordingItem(
|
||||
camera=camera,
|
||||
filename=name,
|
||||
timestamp=dt.isoformat(),
|
||||
url=f"/videos/{camera}/{name}",
|
||||
url=f"/videos/{rel}",
|
||||
)
|
||||
)
|
||||
return out
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
[Unit]
|
||||
Description=IPCam Dashboard Backend
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
WorkingDirectory=/mnt/ssd/IPCam_OrangePi_Dashboard
|
||||
ExecStart=/mnt/ssd/IPCam_OrangePi_Dashboard/api/.venv/bin/python /mnt/ssd/IPCam_OrangePi_Dashboard/api/run.py
|
||||
Restart=always
|
||||
RestartSec=2
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
Reference in New Issue
Block a user