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
+13 -1
View File
@@ -29,6 +29,7 @@ import { contentsChanged } from '../utils/basic';
import './date-picker.js';
import { AdvancedCameraCardDatePicker, DatePickerEvent } from './date-picker.js';
import './icon';
import { renderMessage } from './message';
import './thumbnail/thumbnail.js';
/**
@@ -139,7 +140,18 @@ export class AdvancedCameraCardTimelineCore extends LitElement {
protected _controller: TimelineController = new TimelineController(this);
protected render(): TemplateResult | void {
if (!this.hass || !this.timelineConfig || !this.keys?.length) {
if (!this.hass || !this.timelineConfig) {
return;
}
if (!this.keys.length) {
if (!this.mini) {
return renderMessage({
message: localize('error.no_camera_or_media_for_timeline'),
icon: 'mdi:chart-gantt',
type: 'info',
});
}
return;
}
+22
View File
@@ -8,6 +8,7 @@ import { TimelineConfig } from '../config/schema/timeline';
import { CardWideConfig } from '../config/schema/types';
import { HomeAssistant } from '../ha/types';
import basicBlockStyle from '../scss/basic-block.scss';
import { QueryClassifier } from '../view/query-classifier';
import './surround.js';
import './timeline-core.js';
@@ -32,6 +33,27 @@ export class AdvancedCameraCardTimeline extends LitElement {
public cardWideConfig?: CardWideConfig;
protected _getKeys(): TimelineKey[] {
const query = this.viewManagerEpoch?.manager.getView()?.query;
// If there's a query, try to extract camera IDs or folder info from it.
if (QueryClassifier.isMediaQuery(query)) {
const cameraIDs = query.getQueryCameraIDs();
if (cameraIDs && cameraIDs.size) {
return [...cameraIDs].map((cameraID) => ({ type: 'camera', cameraID }));
}
} else if (QueryClassifier.isFolderQuery(query)) {
const folderConfig = query.getQuery()?.folder;
if (folderConfig) {
return [
{
type: 'folder' as const,
folder: folderConfig,
},
];
}
}
// Otherwise fall back to all cameras that support media queries.
const keys: TimelineKey[] = [];
for (const camera of this.cameraManager?.getStore().getCameraIDsWithCapability({
anyCapabilities: ['clips', 'snapshots', 'recordings'],