feat: Add folder title matching and parsing (#2067)
This is a breaking change for users of the [experimental 'folder' functionality](https://card.camera/#/configuration/folders). Related: #1748
This commit is contained in:
@@ -13,9 +13,7 @@ export const getViewMediaFromBrowseMediaArray = (
|
||||
);
|
||||
};
|
||||
|
||||
export const getViewItemsFromBrowseMediaArray = <
|
||||
M extends BrowseMediaMetadata | undefined,
|
||||
>(
|
||||
export const getViewItemsFromBrowseMediaArray = <M extends BrowseMediaMetadata>(
|
||||
browseMedia: RichBrowseMedia<M>[],
|
||||
options?: ViewMediaSourceOptions,
|
||||
): ViewItem[] => {
|
||||
|
||||
@@ -9,7 +9,7 @@ import {
|
||||
|
||||
export class BrowseMediaViewItemFactory {
|
||||
static create(
|
||||
browseMedia: RichBrowseMedia<BrowseMediaMetadata | undefined>,
|
||||
browseMedia: RichBrowseMedia<BrowseMediaMetadata>,
|
||||
options?: ViewMediaSourceOptions,
|
||||
): ViewItem | null {
|
||||
if (browseMedia.can_expand) {
|
||||
|
||||
@@ -10,7 +10,7 @@ import {
|
||||
ViewMediaSourceOptions,
|
||||
ViewMediaType,
|
||||
} from '../../view/item';
|
||||
import { BrowseMedia, BrowseMediaMetadata, RichBrowseMedia } from './types';
|
||||
import { BrowseMediaMetadata, RichBrowseMedia } from './types';
|
||||
|
||||
interface MediaClassBrowserSetting {
|
||||
icon: string;
|
||||
@@ -114,12 +114,19 @@ export class BrowseMediaEventViewMedia extends ViewMedia implements EventViewMed
|
||||
}
|
||||
|
||||
export class BrowseMediaViewFolder extends ViewFolder {
|
||||
constructor(folder: FolderConfig, browseMedia: BrowseMedia) {
|
||||
private _browseMedia: RichBrowseMedia<BrowseMediaMetadata>;
|
||||
|
||||
constructor(folder: FolderConfig, browseMedia: RichBrowseMedia<BrowseMediaMetadata>) {
|
||||
super(folder, {
|
||||
id: browseMedia.media_content_id,
|
||||
icon: getIcon(browseMedia.children_media_class ?? browseMedia.media_class),
|
||||
title: browseMedia.title,
|
||||
thumbnail: browseMedia.thumbnail,
|
||||
});
|
||||
this._browseMedia = browseMedia;
|
||||
}
|
||||
|
||||
public getBrowseMedia(): RichBrowseMedia<BrowseMediaMetadata> {
|
||||
return this._browseMedia;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
import { orderBy } from 'lodash-es';
|
||||
import { BrowseMediaMetadata, RichBrowseMedia } from './types';
|
||||
|
||||
export const sortMediaByStartDate = (
|
||||
media: RichBrowseMedia<BrowseMediaMetadata>[],
|
||||
): RichBrowseMedia<BrowseMediaMetadata>[] => {
|
||||
return orderBy(media, (media) => media._metadata?.startDate, 'desc');
|
||||
};
|
||||
@@ -2,9 +2,9 @@ import { z } from 'zod';
|
||||
import { ExpiringEqualityCache } from '../../cache/expiring-cache';
|
||||
|
||||
export interface BrowseMediaMetadata {
|
||||
cameraID: string;
|
||||
startDate: Date;
|
||||
endDate: Date;
|
||||
cameraID?: string;
|
||||
startDate?: Date;
|
||||
endDate?: Date;
|
||||
what?: string[];
|
||||
}
|
||||
// Recursive type, cannot use type interference:
|
||||
|
||||
@@ -16,7 +16,7 @@ export const isMediaWithinDates = (
|
||||
end?: Date,
|
||||
): boolean => {
|
||||
// If there's no metadata, nothing matches.
|
||||
if (!media._metadata) {
|
||||
if (!media._metadata?.startDate || !media._metadata?.endDate) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user