feat: Make cameras optional (#2343)
This commit is contained in:
@@ -11,7 +11,7 @@ import { ViewItemClassifier } from '../view/item-classifier';
|
||||
export const findBestMediaTimeIndex = (
|
||||
mediaArray: ViewItem[],
|
||||
targetTime: Date,
|
||||
favorCameraID?: string,
|
||||
favorCameraID?: string | null,
|
||||
): number | null => {
|
||||
let bestMatch:
|
||||
| {
|
||||
|
||||
@@ -28,6 +28,9 @@ export const getPTZTarget = (
|
||||
};
|
||||
} else if (view.is('live')) {
|
||||
const substreamAwareCameraID = getStreamCameraID(view);
|
||||
if (!substreamAwareCameraID) {
|
||||
return null;
|
||||
}
|
||||
let type: PTZType = 'digital';
|
||||
|
||||
if (options?.type !== 'digital' && options?.cameraManager) {
|
||||
|
||||
@@ -28,14 +28,14 @@ const screenshotElement = (
|
||||
|
||||
export const generateScreenshotFilename = (view?: View | null): string => {
|
||||
if (view?.is('live') || view?.is('image')) {
|
||||
return `${view.view}_${view.camera}_${format(
|
||||
return `${view.view}${view.camera ? `_${view.camera}` : ''}_${format(
|
||||
new Date(),
|
||||
`yyyy-MM-dd-HH-mm-ss`,
|
||||
)}.jpg`;
|
||||
} else if (view?.isViewerView()) {
|
||||
const media = view.queryResults?.getSelectedResult();
|
||||
const id = media?.getID() ?? null;
|
||||
return `${view.view}_${view.camera}${id ? `_${id}` : ''}.jpg`;
|
||||
return `${view.view}${view.camera ? `_${view.camera}` : ''}${id ? `_${id}` : ''}.jpg`;
|
||||
}
|
||||
return 'screenshot.jpg';
|
||||
};
|
||||
|
||||
+22
-6
@@ -1,18 +1,31 @@
|
||||
import { View } from '../view/view';
|
||||
|
||||
export const getStreamCameraID = (view: View, cameraID?: string): string => {
|
||||
return (
|
||||
view.context?.live?.overrides?.get(cameraID ?? view.camera) ??
|
||||
cameraID ??
|
||||
view.camera
|
||||
);
|
||||
/**
|
||||
* Get the effective camera ID for streaming, considering substream overrides.
|
||||
* Returns null if the view has no camera.
|
||||
*/
|
||||
export const getStreamCameraID = (
|
||||
view: View,
|
||||
cameraID?: string | null,
|
||||
): string | null => {
|
||||
const baseCameraID = cameraID ?? view.camera;
|
||||
if (!baseCameraID) {
|
||||
return null;
|
||||
}
|
||||
return view.context?.live?.overrides?.get(baseCameraID) ?? baseCameraID;
|
||||
};
|
||||
|
||||
export const hasSubstream = (view: View): boolean => {
|
||||
if (!view.camera) {
|
||||
return false;
|
||||
}
|
||||
return getStreamCameraID(view) !== view.camera;
|
||||
};
|
||||
|
||||
export const setSubstream = (view: View, substreamID: string): void => {
|
||||
if (!view.camera) {
|
||||
return;
|
||||
}
|
||||
const overrides: Map<string, string> = view.context?.live?.overrides ?? new Map();
|
||||
overrides.set(view.camera, substreamID);
|
||||
view.mergeInContext({
|
||||
@@ -21,6 +34,9 @@ export const setSubstream = (view: View, substreamID: string): void => {
|
||||
};
|
||||
|
||||
export const removeSubstream = (view: View): void => {
|
||||
if (!view.camera) {
|
||||
return;
|
||||
}
|
||||
const overrides: Map<string, string> | undefined = view.context?.live?.overrides;
|
||||
if (overrides && overrides.has(view.camera)) {
|
||||
view.context?.live?.overrides?.delete(view.camera);
|
||||
|
||||
Reference in New Issue
Block a user