fix: Improve review media filtering (#2322)
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
import { SetReviewActionConfig } from '../../../config/schema/actions/custom/set-review';
|
||||
import { toggleReviewed } from '../../../utils/media-actions';
|
||||
import { ViewItemClassifier } from '../../../view/item-classifier';
|
||||
import { getReviewedQueryFilterFromQuery } from '../../../view/utils/query-filter';
|
||||
import { CardActionsAPI } from '../../types';
|
||||
import { AdvancedCameraCardAction } from './base';
|
||||
|
||||
@@ -7,7 +9,8 @@ export class SetReviewAction extends AdvancedCameraCardAction<SetReviewActionCon
|
||||
public async execute(api: CardActionsAPI): Promise<void> {
|
||||
await super.execute(api);
|
||||
|
||||
const view = api.getViewManager().getView();
|
||||
const viewManager = api.getViewManager();
|
||||
const view = viewManager.getView();
|
||||
const queryResults = view?.queryResults;
|
||||
const item = queryResults?.getSelectedResult();
|
||||
|
||||
@@ -15,20 +18,26 @@ export class SetReviewAction extends AdvancedCameraCardAction<SetReviewActionCon
|
||||
return;
|
||||
}
|
||||
|
||||
const targetReviewedState = this._action.reviewed ?? !item.isReviewed();
|
||||
const targetReviewedState = this._action.reviewed;
|
||||
if (targetReviewedState !== undefined && targetReviewedState === item.isReviewed()) {
|
||||
return;
|
||||
}
|
||||
|
||||
await api.getViewItemManager().reviewMedia(item, targetReviewedState);
|
||||
const results = await Promise.all([
|
||||
toggleReviewed(
|
||||
item,
|
||||
api.getViewItemManager(),
|
||||
viewManager.getEpoch(),
|
||||
getReviewedQueryFilterFromQuery(view?.query, item),
|
||||
),
|
||||
api
|
||||
.getEffectsControllerAPI()
|
||||
?.startEffect('check', { duration: 0.4, fadeIn: false }),
|
||||
]);
|
||||
|
||||
// Clone the item to ensure Lit detects the change.
|
||||
// Test-case: Setting a media item reviewed via the menu, should update the
|
||||
// reviewed state in a thumbnail.
|
||||
const clonedItem = item.clone();
|
||||
clonedItem.setReviewed(targetReviewedState);
|
||||
|
||||
api.getViewManager().setViewByParameters({
|
||||
params: {
|
||||
queryResults: queryResults.clone().replaceItem(item, clonedItem),
|
||||
},
|
||||
});
|
||||
// Trigger UI update to refresh menu icon state
|
||||
if (results[0]) {
|
||||
api.getCardElementManager().update();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ import { MEDIA_CHUNK_SIZE_DEFAULT } from '../../const';
|
||||
import { findBestMediaTimeIndex } from '../../utils/find-best-media-time-index';
|
||||
import { QueryResults } from '../../view/query-results';
|
||||
import { UnifiedQuery } from '../../view/unified-query';
|
||||
import { MediaTypeSpec, UnifiedQueryBuilder } from '../../view/unified-query-builder';
|
||||
import { UnifiedQueryBuilder } from '../../view/unified-query-builder';
|
||||
import { UnifiedQueryRunner } from '../../view/unified-query-runner';
|
||||
import { View } from '../../view/view';
|
||||
import { CardViewAPI } from '../types';
|
||||
@@ -126,8 +126,9 @@ export class ViewQueryExecutor {
|
||||
case 'clips':
|
||||
viewModifiers.push(
|
||||
...(await executeQuery(
|
||||
builder.buildCameraMediaQuery(MediaTypeSpec.clips(), {
|
||||
builder.buildCameraMediaQuery('events', {
|
||||
cameraID: cameraForQuery,
|
||||
eventsSubtype: 'clips',
|
||||
limit: this._getLimit(),
|
||||
}),
|
||||
)),
|
||||
@@ -139,8 +140,9 @@ export class ViewQueryExecutor {
|
||||
case 'snapshots':
|
||||
viewModifiers.push(
|
||||
...(await executeQuery(
|
||||
builder.buildCameraMediaQuery(MediaTypeSpec.snapshots(), {
|
||||
builder.buildCameraMediaQuery('events', {
|
||||
cameraID: cameraForQuery,
|
||||
eventsSubtype: 'snapshots',
|
||||
limit: this._getLimit(),
|
||||
}),
|
||||
)),
|
||||
@@ -151,7 +153,7 @@ export class ViewQueryExecutor {
|
||||
case 'recordings':
|
||||
viewModifiers.push(
|
||||
...(await executeQuery(
|
||||
builder.buildCameraMediaQuery(MediaTypeSpec.recordings(), {
|
||||
builder.buildCameraMediaQuery('recordings', {
|
||||
cameraID: cameraForQuery,
|
||||
limit: this._getLimit(),
|
||||
}),
|
||||
@@ -163,7 +165,7 @@ export class ViewQueryExecutor {
|
||||
case 'reviews':
|
||||
viewModifiers.push(
|
||||
...(await executeQuery(
|
||||
builder.buildCameraMediaQuery(MediaTypeSpec.reviews(), {
|
||||
builder.buildCameraMediaQuery('reviews', {
|
||||
cameraID: cameraForQuery,
|
||||
limit: this._getLimit(),
|
||||
}),
|
||||
|
||||
Reference in New Issue
Block a user