openvidu-components: Refactored recordings pipes

pull/803/head
Carlos Santos 2023-04-24 17:41:29 +02:00
parent 5f8fa08fe0
commit fffbdd3cd5
1 changed files with 31 additions and 30 deletions

View File

@ -9,13 +9,15 @@ import { Pipe, PipeTransform } from '@angular/core';
export class DurationFromSecondsPipe implements PipeTransform { export class DurationFromSecondsPipe implements PipeTransform {
transform(durationInSeconds: number): string { transform(durationInSeconds: number): string {
if (durationInSeconds < 60) { if (durationInSeconds < 60) {
return Math.floor(durationInSeconds) + 's'; return `${Math.floor(durationInSeconds)}s`;
} else if (durationInSeconds < 3600) { } else if (durationInSeconds < 3600) {
return Math.floor(durationInSeconds / 60) + 'm ' + Math.floor(durationInSeconds % 60) + 's'; const minutes = Math.floor(durationInSeconds / 60);
const seconds = Math.floor(durationInSeconds % 60);
return `${minutes}m ${seconds}s`;
} else { } else {
const hours = Math.floor(durationInSeconds / 3600); const hours = Math.floor(durationInSeconds / 3600);
const minutes = Math.floor((durationInSeconds - hours * 3600) / 60); const minutes = Math.floor((durationInSeconds - hours * 3600) / 60);
return hours + 'h ' + minutes + 'm'; return `${hours}h ${minutes}m`;
} }
} }
} }
@ -23,20 +25,20 @@ export class DurationFromSecondsPipe implements PipeTransform {
/** /**
* @internal * @internal
*/ */
@Pipe({ @Pipe({
name: 'searchByStringProperty' name: 'searchByStringProperty'
}) })
export class SearchByStringPropertyPipe implements PipeTransform { export class SearchByStringPropertyPipe implements PipeTransform {
transform(items: any[], props: { properties: string[], filter: string }): any { transform(items: any[], props: { properties: string[]; filter: string }): any {
if (!items || !props || props.properties.length === 0 || !props.filter) { if (!items || !props || props.properties.length === 0 || !props.filter) {
return items; return items;
} }
return items.filter(item => { return items.filter((item) => {
return props.properties.some(prop => { return props.properties.some((prop) => {
const multipleProps = prop.split('.'); const multipleProps = prop.split('.');
let recursiveProp = item; let recursiveProp = item;
try { try {
multipleProps.forEach(p => { multipleProps.forEach((p) => {
recursiveProp = recursiveProp[p]; recursiveProp = recursiveProp[p];
if (recursiveProp === null || recursiveProp === undefined) { if (recursiveProp === null || recursiveProp === undefined) {
throw new Error('Property not found'); throw new Error('Property not found');
@ -46,7 +48,7 @@ export class SearchByStringPropertyPipe implements PipeTransform {
return false; return false;
} }
return recursiveProp.indexOf(props.filter) !== -1; return recursiveProp.indexOf(props.filter) !== -1;
}) });
}); });
} }
} }
@ -54,17 +56,16 @@ export class SearchByStringPropertyPipe implements PipeTransform {
/** /**
* @internal * @internal
*/ */
@Pipe({ @Pipe({
name: 'thumbnailUrl' name: 'thumbnailUrl'
}) })
export class ThumbnailFromUrlPipe implements PipeTransform { export class ThumbnailFromUrlPipe implements PipeTransform {
transform(url: string): string { transform(url: string): string {
if(url.includes('.mp4')){
const lastPart = url.split('/').pop(); const lastPart = url.split('/').pop();
let thumbnailUrl = lastPart?.replace('mp4', 'jpg'); const isMp4 = url.includes('.mp4');
thumbnailUrl = `recordings/${thumbnailUrl?.split('.')[0]}/${thumbnailUrl}`;
return thumbnailUrl; if (!lastPart || !isMp4) return url;
}
return url; return `recordings/${lastPart.split('.')[0]}/${lastPart.replace('mp4', 'jpg')}`;
} }
} }