mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-04-03 22:04:53 +03:00
57 lines
1.3 KiB
TypeScript
57 lines
1.3 KiB
TypeScript
import { baseUrl } from "@/api/baseUrl.ts";
|
|
|
|
export const RECORDING_REVIEW_LINK_PARAM = "timestamp";
|
|
|
|
export type RecordingReviewLinkState = {
|
|
camera: string;
|
|
timestamp: number;
|
|
};
|
|
|
|
export function parseRecordingReviewLink(
|
|
value: string | null,
|
|
): RecordingReviewLinkState | undefined {
|
|
if (!value) {
|
|
return undefined;
|
|
}
|
|
|
|
const separatorIndex = value.lastIndexOf("_");
|
|
|
|
if (separatorIndex <= 0 || separatorIndex == value.length - 1) {
|
|
return undefined;
|
|
}
|
|
|
|
const camera = value.slice(0, separatorIndex);
|
|
const timestamp = value.slice(separatorIndex + 1);
|
|
|
|
if (!camera || !timestamp) {
|
|
return undefined;
|
|
}
|
|
|
|
const parsedTimestamp = Number(timestamp);
|
|
const now = Math.floor(Date.now() / 1000);
|
|
|
|
if (!Number.isFinite(parsedTimestamp) || parsedTimestamp <= 0) {
|
|
return undefined;
|
|
}
|
|
|
|
return {
|
|
camera,
|
|
// clamp future timestamps to now
|
|
timestamp: Math.min(Math.floor(parsedTimestamp), now),
|
|
};
|
|
}
|
|
|
|
export function createRecordingReviewUrl(
|
|
pathname: string,
|
|
state: RecordingReviewLinkState,
|
|
): string {
|
|
const url = new URL(baseUrl);
|
|
url.pathname = pathname.startsWith("/") ? pathname : `/${pathname}`;
|
|
url.searchParams.set(
|
|
RECORDING_REVIEW_LINK_PARAM,
|
|
`${state.camera}_${Math.floor(state.timestamp)}`,
|
|
);
|
|
|
|
return url.toString();
|
|
}
|