From 997f15ab9c8aee62757b3b90e31235b57b8c2319 Mon Sep 17 00:00:00 2001 From: nrlcode Date: Tue, 24 Mar 2026 13:11:22 -0700 Subject: [PATCH] History snapshot filenames use Frigate timeline timezone (cherry picked from commit 5c3b0fb11b859a8d2b8a5c1e630d7e10b355d08b) --- web/src/components/player/HlsVideoPlayer.tsx | 1 + web/src/utils/snapshotUtil.ts | 23 +++++++++++++++++--- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/web/src/components/player/HlsVideoPlayer.tsx b/web/src/components/player/HlsVideoPlayer.tsx index aaa5a67fd..bc3496ebb 100644 --- a/web/src/components/player/HlsVideoPlayer.tsx +++ b/web/src/components/player/HlsVideoPlayer.tsx @@ -369,6 +369,7 @@ export default function HlsVideoPlayer({ generateSnapshotFilename( camera ?? "recording", snapshotTimestamp, + config?.ui?.timezone, ), ); toast.success( diff --git a/web/src/utils/snapshotUtil.ts b/web/src/utils/snapshotUtil.ts index c88433d45..16c11d62a 100644 --- a/web/src/utils/snapshotUtil.ts +++ b/web/src/utils/snapshotUtil.ts @@ -1,4 +1,5 @@ import { baseUrl } from "@/api/baseUrl"; +import { formatUnixTimestampToDateTime } from "@/utils/dateUtil"; type SnapshotResponse = { dataUrl: string; @@ -97,9 +98,25 @@ export function downloadSnapshot(dataUrl: string, filename: string): void { } } -export function generateSnapshotFilename(cameraName: string): string { - const timestamp = new Date().toISOString().replace(/[:.]/g, "-").slice(0, -5); - return `${cameraName}_snapshot_${timestamp}.jpg`; +export function generateSnapshotFilename( + cameraName: string, + timestampSeconds?: number, + timezone?: string, +): string { + const seconds = timestampSeconds ?? Date.now() / 1000; + const timestamp = formatUnixTimestampToDateTime(seconds, { + timezone, + date_format: "yyyy-MM-dd'T'HH-mm-ss", + }); + + const safeTimestamp = + timestamp === "Invalid time" + ? new Date(seconds * 1000) + .toISOString() + .replace(/[:.]/g, "-") + .slice(0, -5) + : timestamp; + return `${cameraName}_snapshot_${safeTimestamp}.jpg`; } export async function grabVideoSnapshot(): Promise {