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,48 +25,47 @@ 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');
}
});
} catch (error) {
return false;
} }
}); return recursiveProp.indexOf(props.filter) !== -1;
} catch (error) { });
return false;
}
return recursiveProp.indexOf(props.filter) !== -1;
})
}); });
} }
} }
/** /**
* @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(); const isMp4 = url.includes('.mp4');
let thumbnailUrl = lastPart?.replace('mp4', 'jpg');
thumbnailUrl = `recordings/${thumbnailUrl?.split('.')[0]}/${thumbnailUrl}`; if (!lastPart || !isMp4) return url;
return thumbnailUrl;
} return `recordings/${lastPart.split('.')[0]}/${lastPart.replace('mp4', 'jpg')}`;
return url;
} }
} }