Use query type instead of view.

This commit is contained in:
Dermot Duffy
2023-01-24 19:36:54 -08:00
parent 093925cb40
commit 66ee65f8cc
4 changed files with 20 additions and 53 deletions
+1 -1
View File
@@ -168,7 +168,7 @@ export class FrigateCardSurround extends LitElement {
if (media) {
this.view
?.evolve({
view: this.view.is('recording') ? 'recording' : 'media',
view: 'media',
queryResults: ev.detail.queryResults,
...(media.getCameraID() && { camera: media.getCameraID() }),
})
+3 -3
View File
@@ -496,7 +496,7 @@ export class FrigateCardTimelineCore extends LitElement {
} else if (
properties.item &&
properties.what === 'item' &&
this.view.is('recording')
this.view.query?.areRecordingQueries()
) {
viewPromise = (async (): Promise<View | null> => {
if (!properties.item || !this.dataManager || !this.hass) {
@@ -606,7 +606,7 @@ export class FrigateCardTimelineCore extends LitElement {
// Don't show event thumbnails if the user is looking at recordings,
// as the recording "hours" are the media, not the event
// clips/snapshots.
if (this._timeline && this.view && !this.view?.is('recording')) {
if (this._timeline && this.view && !this.view.query?.areRecordingQueries()) {
(
await this._createViewWithEventMediaQuery(
this._createEventMediaQuerys({ window: prefetchedWindow }),
@@ -967,7 +967,7 @@ export class FrigateCardTimelineCore extends LitElement {
if (
!this.mini &&
!this.view.is('recording') &&
!this.view.query?.areRecordingQueries() &&
freshMediaQuery &&
!this._alreadyHasAcceptableMediaQuery(freshMediaQuery)
) {
+2 -2
View File
@@ -124,7 +124,7 @@ export class FrigateCardViewer extends LitElement {
// search for. When the query *is* specified, the view is not required to
// indicate the media type (e.g. the mixed 'media' view from the
// timeline).
const mediaType = this.view.getMediaType();
const mediaType = this.view.getDefaultMediaType();
if (!browseMediaQueryParameters || !mediaType) {
return;
}
@@ -148,7 +148,7 @@ export class FrigateCardViewer extends LitElement {
this.cameras,
this.view,
{
targetView: mediaType === 'clips' ? 'clip' : 'snapshot',
targetView: 'media',
},
);
}
+14 -47
View File
@@ -1,4 +1,4 @@
// TODO: Do I need getMediaType below?
// TODO: Implement gallery.
// TODO: Improve data storage in data-manager to allow fetching by limit not time.
// TODO: Live should get most recent events regardless of when they were.
// TODO: Refactor thumbnailsControlSchema to all use the shortform for other thumbnail users beyond live.
@@ -24,7 +24,6 @@
// TODO: Can _timelineRangeChangedHandler be an async method in timeline-core to improve cleanliness?
// TODO: What should the timeline do when an event is clicked on that is not in the queryResults (or if queryResults is empty)?
// TODO: Should the timeline data source clear events (as it currently does) when the query changes?
// TODO: Implement gallery.
import isEqual from 'lodash-es/isEqual';
import clone from 'lodash-es/clone.js';
@@ -334,20 +333,6 @@ export class View {
return ['clips', 'snapshots', 'recordings'].includes(this.view);
}
/**
* Get the viewer view given a gallery view.
*/
public getViewerViewForGalleryView(): 'clip' | 'snapshot' | 'recording' | null {
if (this.is('clips')) {
return 'clip';
} else if (this.is('snapshots')) {
return 'snapshot';
} else if (this.is('recordings')) {
return 'recording';
}
return null;
}
/**
* Determine if a view is of a piece of media (including the media viewer,
* live view, image view -- anything that can create a MediaLoadedInfo event).
@@ -364,39 +349,21 @@ export class View {
}
/**
* Determine if a view is related to a clip or clips.
*/
public isClipRelatedView(): boolean {
return ['clip', 'clips'].includes(this.view);
}
/**
* Determine if a view is related to a snapshot or snapshots.
*/
public isSnapshotRelatedView(): boolean {
return ['snapshot', 'snapshots'].includes(this.view);
}
/**
* Determine if a view is related to a recording or recordings.
*/
public isRecordingRelatedView(): boolean {
return ['recording', 'recordings'].includes(this.view);
}
/**
* Get the media type for this view if available.
* @returns Whether the media is `clips`, `snapshots`, `recordings` or unknown
* Get the default media type for this view if available.
* @returns Whether the default media is `clips`, `snapshots`, `recordings` or unknown
* (`null`).
*/
public getMediaType(): 'clips' | 'snapshots' | 'recordings' | null {
return this.isClipRelatedView()
? 'clips'
: this.isSnapshotRelatedView()
? 'snapshots'
: this.isRecordingRelatedView()
? 'recordings'
: null;
public getDefaultMediaType(): 'clips' | 'snapshots' | 'recordings' | null {
if (['clip', 'clips'].includes(this.view)) {
return 'clips';
}
if (['snapshot', 'snapshots'].includes(this.view)) {
return 'snapshots';
}
if (['recording', 'recordings'].includes(this.view)) {
return 'recordings';
}
return null;
}
/**