fix: Timeline should should show folder media even without camera support (#2216)

- Closes #2205
This commit is contained in:
Dermot Duffy
2025-10-13 21:15:32 -07:00
committed by GitHub
parent ebbd219db7
commit 7edaac079e
19 changed files with 236 additions and 123 deletions
+19 -12
View File
@@ -3,7 +3,11 @@ import { ViewDisplayMode } from '../../config/schema/common/display';
import { AdvancedCameraCardConfig } from '../../config/schema/types';
import { localize } from '../../localize/localize';
import { View, ViewParameters } from '../../view/view';
import { getCameraIDsForViewName } from '../../view/view-to-cameras';
import {
getCameraIDsForViewName,
isViewSupportedByCamera,
isViewSupportedByQueryOnly,
} from '../../view/view-support';
import { CardViewAPI } from '../types';
import { applyViewModifiers } from './modifiers';
import { ViewFactoryOptions, ViewIncompatible, ViewNoCameraError } from './types';
@@ -32,7 +36,7 @@ export class ViewFactory {
cameraID = options.params.camera;
} else {
const cameraIDs = [
...getCameraIDsForViewName(this._api.getCameraManager(), viewName),
...getCameraIDsForViewName(viewName, this._api.getCameraManager()),
];
if (
@@ -73,8 +77,8 @@ export class ViewFactory {
if (!cameraID || !allCameraIDs.has(cameraID)) {
const viewCameraIDs = getCameraIDsForViewName(
this._api.getCameraManager(),
viewName,
this._api.getCameraManager(),
);
// Reset to the default camera.
@@ -98,8 +102,18 @@ export class ViewFactory {
});
}
if (!this.isViewSupportedByCamera(cameraID, viewName)) {
if (options?.failSafe && this.isViewSupportedByCamera(cameraID, VIEW_DEFAULT)) {
if (
!isViewSupportedByCamera(viewName, this._api.getCameraManager(), cameraID) &&
!isViewSupportedByQueryOnly(
viewName,
options?.params?.query ?? options?.baseView?.query,
options?.params?.queryResults ?? options?.baseView?.queryResults,
)
) {
if (
options?.failSafe &&
isViewSupportedByCamera(VIEW_DEFAULT, this._api.getCameraManager(), cameraID)
) {
viewName = VIEW_DEFAULT;
} else {
const capabilities = this._api
@@ -142,13 +156,6 @@ export class ViewFactory {
return view;
}
public isViewSupportedByCamera(
cameraID: string,
view: AdvancedCameraCardView,
): boolean {
return !!getCameraIDsForViewName(this._api.getCameraManager(), view, cameraID).size;
}
protected _getDefaultDisplayModeForView(
viewName: AdvancedCameraCardView,
config: AdvancedCameraCardConfig,
-2
View File
@@ -1,5 +1,4 @@
import { ViewContext } from 'view';
import { AdvancedCameraCardView } from '../../config/schema/common/const.js';
import { AdvancedCameraCardError } from '../../types.js';
import { ViewItem } from '../../view/item.js';
import { QueryResults } from '../../view/query-results.js';
@@ -73,7 +72,6 @@ export interface ViewManagerInterface {
setViewWithMergedContext(context: ViewContext | null): void;
isViewSupportedByCamera(cameraID: string, view: AdvancedCameraCardView): boolean;
hasMajorMediaChange(oldView?: View | null, newView?: View | null): boolean;
}
-9
View File
@@ -1,10 +1,8 @@
import { ViewContext } from 'view';
import { AdvancedCameraCardView } from '../../config/schema/common/const';
import { log } from '../../utils/debug';
import { getStreamCameraID } from '../../utils/substream';
import { QueryClassifier } from '../../view/query-classifier';
import { View } from '../../view/view';
import { getCameraIDsForViewName } from '../../view/view-to-cameras';
import { InitializationAspect } from '../initialization-manager';
import { CardViewAPI } from '../types';
import { ViewFactory } from './factory';
@@ -257,13 +255,6 @@ export class ViewManager implements ViewManagerInterface {
}
}
public isViewSupportedByCamera(
cameraID: string,
view: AdvancedCameraCardView,
): boolean {
return !!getCameraIDsForViewName(this._api.getCameraManager(), view, cameraID).size;
}
/**
* Detect if the current view has a major "media change" for the given previous view.
* @param oldView The previous view.