Use the newly embedded Frigate event metadata.
This commit is contained in:
@@ -22,34 +22,20 @@ dayjs.extend(dayjs_custom_parse_format);
|
|||||||
export class BrowseMediaUtil {
|
export class BrowseMediaUtil {
|
||||||
/**
|
/**
|
||||||
* Return the Frigate event_id given a FrigateBrowseMediaSource object.
|
* Return the Frigate event_id given a FrigateBrowseMediaSource object.
|
||||||
* @param media The event to extract the id from.
|
* @param media The event to get the id from.
|
||||||
* @returns The `event_id` or `null` if not successfully parsed.
|
* @returns The `event_id` or `null` if not successfully parsed.
|
||||||
*/
|
*/
|
||||||
static extractEventID(media: FrigateBrowseMediaSource): string | null {
|
static getEventID(media: FrigateBrowseMediaSource): string | null {
|
||||||
const result = media.media_content_id.match(
|
return media.frigate?.event.id ?? null;
|
||||||
/^media-source:\/\/frigate\/.*\/(?<id>[.0-9]+-[a-zA-Z0-9]+)$/,
|
|
||||||
);
|
|
||||||
return result && result.groups ? result.groups['id'] : null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the event start time given a FrigateBrowseMediaSource object.
|
* Return the event start time given a FrigateBrowseMediaSource object.
|
||||||
* @param browseMedia The media object to extract the start time from.
|
* @param browseMedia The media object to get the start time from.
|
||||||
* @returns The start time in unix/epoch time, or null if it cannot be determined.
|
* @returns The start time in unix/epoch time, or null if it cannot be determined.
|
||||||
*/
|
*/
|
||||||
static extractEventStartTime(browseMedia: FrigateBrowseMediaSource): number | null {
|
static getEventStartTime(media: FrigateBrowseMediaSource): number | null {
|
||||||
// Example: 2021-08-27 20:57:22 [10s, Person 76%]
|
return media.frigate?.event.start_time ?? null;
|
||||||
const result = browseMedia.title.match(/^(?<iso_datetime>.+) \[/);
|
|
||||||
if (result && result.groups) {
|
|
||||||
const iso_datetime_str = result.groups['iso_datetime'];
|
|
||||||
if (iso_datetime_str) {
|
|
||||||
const iso_datetime = dayjs(iso_datetime_str, 'YYYY-MM-DD HH:mm:ss', true);
|
|
||||||
if (iso_datetime.isValid()) {
|
|
||||||
return iso_datetime.unix();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -116,8 +102,8 @@ export class BrowseMediaUtil {
|
|||||||
'event-search',
|
'event-search',
|
||||||
params.mediaType,
|
params.mediaType,
|
||||||
'', // Name/Title to render (not necessary here)
|
'', // Name/Title to render (not necessary here)
|
||||||
params.after ? String(params.after) : '',
|
params.after ? String(Math.floor(params.after)) : '',
|
||||||
params.before ? String(params.before) : '',
|
params.before ? String(Math.ceil(params.before)) : '',
|
||||||
params.cameraName,
|
params.cameraName,
|
||||||
params.label,
|
params.label,
|
||||||
params.zone,
|
params.zone,
|
||||||
|
|||||||
+1
-1
@@ -746,7 +746,7 @@ export class FrigateCard extends LitElement {
|
|||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const event_id = BrowseMediaUtil.extractEventID(this._view.media);
|
const event_id = BrowseMediaUtil.getEventID(this._view.media);
|
||||||
if (!event_id) {
|
if (!event_id) {
|
||||||
this._setMessageAndUpdate({
|
this._setMessageAndUpdate({
|
||||||
message: localize('error.download_no_event_id'),
|
message: localize('error.download_no_event_id'),
|
||||||
|
|||||||
@@ -414,7 +414,7 @@ export class FrigateCardViewerCarousel extends FrigateCardMediaCarousel {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
const snapshotStartTime = BrowseMediaUtil.extractEventStartTime(snapshot);
|
const snapshotStartTime = BrowseMediaUtil.getEventStartTime(snapshot);
|
||||||
if (!snapshotStartTime) {
|
if (!snapshotStartTime) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -435,7 +435,7 @@ export class FrigateCardViewerCarousel extends FrigateCardMediaCarousel {
|
|||||||
if (!BrowseMediaUtil.isTrueMedia(child)) {
|
if (!BrowseMediaUtil.isTrueMedia(child)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
const startTime = BrowseMediaUtil.extractEventStartTime(child);
|
const startTime = BrowseMediaUtil.getEventStartTime(child);
|
||||||
|
|
||||||
if (startTime && (earliest === null || startTime < earliest)) {
|
if (startTime && (earliest === null || startTime < earliest)) {
|
||||||
earliest = startTime;
|
earliest = startTime;
|
||||||
@@ -471,7 +471,7 @@ export class FrigateCardViewerCarousel extends FrigateCardMediaCarousel {
|
|||||||
if (!BrowseMediaUtil.isTrueMedia(child)) {
|
if (!BrowseMediaUtil.isTrueMedia(child)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
const clipStartTime = BrowseMediaUtil.extractEventStartTime(child);
|
const clipStartTime = BrowseMediaUtil.getEventStartTime(child);
|
||||||
if (clipStartTime && clipStartTime === snapshotStartTime) {
|
if (clipStartTime && clipStartTime === snapshotStartTime) {
|
||||||
return new View({
|
return new View({
|
||||||
view: 'clip',
|
view: 'clip',
|
||||||
|
|||||||
Reference in New Issue
Block a user