From 66ee65f8cccfb6ea827cb6e106c1f2d5f15814fa Mon Sep 17 00:00:00 2001 From: Dermot Duffy Date: Mon, 2 Jan 2023 16:30:48 -0800 Subject: [PATCH] Use query type instead of view. --- src/components/surround.ts | 2 +- src/components/timeline-core.ts | 6 ++-- src/components/viewer.ts | 4 +-- src/view.ts | 61 ++++++++------------------------- 4 files changed, 20 insertions(+), 53 deletions(-) diff --git a/src/components/surround.ts b/src/components/surround.ts index 79036f1b..d46754ca 100644 --- a/src/components/surround.ts +++ b/src/components/surround.ts @@ -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() }), }) diff --git a/src/components/timeline-core.ts b/src/components/timeline-core.ts index 06357251..c7393d95 100644 --- a/src/components/timeline-core.ts +++ b/src/components/timeline-core.ts @@ -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 => { 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) ) { diff --git a/src/components/viewer.ts b/src/components/viewer.ts index 7859ad5b..02031b71 100644 --- a/src/components/viewer.ts +++ b/src/components/viewer.ts @@ -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', }, ); } diff --git a/src/view.ts b/src/view.ts index 45e81555..9b5c1991 100644 --- a/src/view.ts +++ b/src/view.ts @@ -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; } /**