Merge pull request #577 from dermotduffy/non-frigate-cameras-on-timeline
Improve timeline behavior with non-Frigate cameras
This commit is contained in:
+20
-4
@@ -36,7 +36,12 @@ import type {
|
|||||||
Message,
|
Message,
|
||||||
} from './types.js';
|
} from './types.js';
|
||||||
|
|
||||||
import { CAMERA_BIRDSEYE, CARD_VERSION, MEDIA_PLAYER_SUPPORT_BROWSE_MEDIA, REPO_URL } from './const.js';
|
import {
|
||||||
|
CAMERA_BIRDSEYE,
|
||||||
|
CARD_VERSION,
|
||||||
|
MEDIA_PLAYER_SUPPORT_BROWSE_MEDIA,
|
||||||
|
REPO_URL,
|
||||||
|
} from './const.js';
|
||||||
import { FrigateCardElements } from './components/elements.js';
|
import { FrigateCardElements } from './components/elements.js';
|
||||||
import { FrigateCardImage } from './components/image.js';
|
import { FrigateCardImage } from './components/image.js';
|
||||||
import { FRIGATE_BUTTON_MENU_ICON, FrigateCardMenu } from './components/menu.js';
|
import { FRIGATE_BUTTON_MENU_ICON, FrigateCardMenu } from './components/menu.js';
|
||||||
@@ -428,6 +433,14 @@ export class FrigateCard extends LitElement {
|
|||||||
tap_action: createFrigateCardCustomAction('image') as FrigateCardCustomAction,
|
tap_action: createFrigateCardCustomAction('image') as FrigateCardCustomAction,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Don't show the timeline button unless there's at least one non-birdseye
|
||||||
|
// camera with a Frigate camera name.
|
||||||
|
if (
|
||||||
|
this._cameras &&
|
||||||
|
[...this._cameras.values()].some(
|
||||||
|
(config) => config.camera_name && config.camera_name !== CAMERA_BIRDSEYE,
|
||||||
|
)
|
||||||
|
) {
|
||||||
buttons.push({
|
buttons.push({
|
||||||
icon: 'mdi:chart-gantt',
|
icon: 'mdi:chart-gantt',
|
||||||
...this._getConfig().menu.buttons.timeline,
|
...this._getConfig().menu.buttons.timeline,
|
||||||
@@ -436,6 +449,7 @@ export class FrigateCard extends LitElement {
|
|||||||
style: this._view?.is('timeline') ? this._getEmphasizedStyle() : {},
|
style: this._view?.is('timeline') ? this._getEmphasizedStyle() : {},
|
||||||
tap_action: createFrigateCardCustomAction('timeline') as FrigateCardCustomAction,
|
tap_action: createFrigateCardCustomAction('timeline') as FrigateCardCustomAction,
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
if (
|
if (
|
||||||
this._view?.isViewerView() ||
|
this._view?.isViewerView() ||
|
||||||
@@ -484,9 +498,11 @@ export class FrigateCard extends LitElement {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
};
|
||||||
|
|
||||||
const mediaPlayers = Object.keys(this._hass?.states || {}).filter(isValidMediaPlayer);
|
const mediaPlayers = Object.keys(this._hass?.states || {}).filter(
|
||||||
|
isValidMediaPlayer,
|
||||||
|
);
|
||||||
if (
|
if (
|
||||||
mediaPlayers.length &&
|
mediaPlayers.length &&
|
||||||
(this._view?.isViewerView() ||
|
(this._view?.isViewerView() ||
|
||||||
@@ -843,7 +859,7 @@ export class FrigateCard extends LitElement {
|
|||||||
if (success) {
|
if (success) {
|
||||||
this._initialized = true;
|
this._initialized = true;
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -37,9 +37,11 @@ import { View, ViewContext } from '../view';
|
|||||||
import {
|
import {
|
||||||
dispatchErrorMessageEvent,
|
dispatchErrorMessageEvent,
|
||||||
dispatchFrigateCardEvent,
|
dispatchFrigateCardEvent,
|
||||||
|
dispatchMessageEvent,
|
||||||
getCameraTitle,
|
getCameraTitle,
|
||||||
stopEventFromActivatingCardWideActions,
|
stopEventFromActivatingCardWideActions,
|
||||||
} from '../common.js';
|
} from '../common.js';
|
||||||
|
import { localize } from '../localize/localize';
|
||||||
|
|
||||||
import timelineCoreStyle from '../scss/timeline-core.scss';
|
import timelineCoreStyle from '../scss/timeline-core.scss';
|
||||||
import timelineStyle from '../scss/timeline.scss';
|
import timelineStyle from '../scss/timeline.scss';
|
||||||
@@ -593,7 +595,7 @@ export class FrigateCardTimelineCore extends LitElement {
|
|||||||
protected _getGroups(): DataGroupCollectionType {
|
protected _getGroups(): DataGroupCollectionType {
|
||||||
const groups: FrigateCardGroupData[] = [];
|
const groups: FrigateCardGroupData[] = [];
|
||||||
this.cameras?.forEach((cameraConfig, camera) => {
|
this.cameras?.forEach((cameraConfig, camera) => {
|
||||||
if (cameraConfig.camera_name !== CAMERA_BIRDSEYE) {
|
if (cameraConfig.camera_name && cameraConfig.camera_name !== CAMERA_BIRDSEYE) {
|
||||||
groups.push({
|
groups.push({
|
||||||
id: camera,
|
id: camera,
|
||||||
content: getCameraTitle(this.hass, cameraConfig),
|
content: getCameraTitle(this.hass, cameraConfig),
|
||||||
@@ -882,10 +884,21 @@ export class FrigateCardTimelineCore extends LitElement {
|
|||||||
if (this._timeline) {
|
if (this._timeline) {
|
||||||
this._timeline.setOptions(options);
|
this._timeline.setOptions(options);
|
||||||
} else {
|
} else {
|
||||||
|
// Don't show an empty timeline, show a message instead.
|
||||||
|
const groups = this._getGroups();
|
||||||
|
if (!groups.length) {
|
||||||
|
dispatchMessageEvent(
|
||||||
|
this,
|
||||||
|
localize('error.timeline_no_cameras'),
|
||||||
|
'mdi:chart-gantt',
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
this._timeline = new Timeline(
|
this._timeline = new Timeline(
|
||||||
this._refTimeline.value,
|
this._refTimeline.value,
|
||||||
this._events.dataset,
|
this._events.dataset,
|
||||||
this._getGroups(),
|
groups,
|
||||||
options,
|
options,
|
||||||
);
|
);
|
||||||
this._timeline.on('select', this._timelineSelectHandler.bind(this));
|
this._timeline.on('select', this._timelineSelectHandler.bind(this));
|
||||||
|
|||||||
@@ -312,6 +312,7 @@
|
|||||||
"no_camera_name": "Could not determine a Frigate camera name for camera (or one of its dependents), please specify either 'camera_entity' or 'camera_name'",
|
"no_camera_name": "Could not determine a Frigate camera name for camera (or one of its dependents), please specify either 'camera_entity' or 'camera_name'",
|
||||||
"download_no_media": "No media to download",
|
"download_no_media": "No media to download",
|
||||||
"download_no_event_id": "Could not extract Frigate event id from media",
|
"download_no_event_id": "Could not extract Frigate event id from media",
|
||||||
"download_sign_failed": "Could not sign media URL for download"
|
"download_sign_failed": "Could not sign media URL for download",
|
||||||
|
"timeline_no_cameras": "No Frigate cameras to show in timeline"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user