frontend: implement utility functions for formatting duration and file size

This commit is contained in:
juancarmore 2025-08-06 20:33:30 +02:00
parent 8ac5e2d46f
commit 72d5d78126
3 changed files with 45 additions and 22 deletions

View File

@ -25,6 +25,7 @@ import { MatTableModule } from '@angular/material/table';
import { MatToolbarModule } from '@angular/material/toolbar'; import { MatToolbarModule } from '@angular/material/toolbar';
import { MatTooltipModule } from '@angular/material/tooltip'; import { MatTooltipModule } from '@angular/material/tooltip';
import { MeetRecordingInfo, MeetRecordingStatus } from '@lib/typings/ce'; import { MeetRecordingInfo, MeetRecordingStatus } from '@lib/typings/ce';
import { formatBytes, formatDurationToHMS } from '@lib/utils';
import { debounceTime, distinctUntilChanged } from 'rxjs'; import { debounceTime, distinctUntilChanged } from 'rxjs';
export interface RecordingTableAction { export interface RecordingTableAction {
@ -365,29 +366,11 @@ export class RecordingListsComponent implements OnInit, OnChanges {
return 'var(--ov-meet-text-secondary)'; return 'var(--ov-meet-text-secondary)';
} }
formatFileSize(bytes: number | undefined): string { formatDuration(duration?: number): string {
if (!bytes || bytes === 0) return '-'; return formatDurationToHMS(duration);
const k = 1024;
const sizes = ['B', 'KB', 'MB', 'GB'];
const i = Math.floor(Math.log(bytes) / Math.log(k));
return `${(bytes / Math.pow(k, i)).toFixed(1)} ${sizes[i]}`;
} }
formatDuration(duration: number | undefined): string { formatFileSize(bytes?: number): string {
if (!duration || duration === 0) return '-'; return formatBytes(bytes);
const hours = Math.floor(duration / 3600);
const minutes = Math.floor((duration % 3600) / 60);
const seconds = Math.floor(duration % 60);
if (hours > 0) {
return `${hours}h ${minutes}m ${seconds}s`;
} else if (minutes > 0) {
return `${minutes}m ${seconds}s`;
} else {
return `${seconds}s`;
}
} }
} }

View File

@ -0,0 +1,39 @@
export const formatDurationToHMS = (durationSeconds?: number): string => {
if (!durationSeconds || durationSeconds === 0) return '-';
const hours = Math.floor(durationSeconds / 3600);
const minutes = Math.floor((durationSeconds % 3600) / 60);
const seconds = Math.floor(durationSeconds % 60);
if (hours > 0) {
return `${hours}h ${minutes}m ${seconds}s`;
} else if (minutes > 0) {
return `${minutes}m ${seconds}s`;
} else {
return `${seconds}s`;
}
};
export const formatDurationToTime = (durationSeconds?: number): string => {
if (!durationSeconds || durationSeconds === 0) return '-';
const hours = Math.floor(durationSeconds / 3600);
const minutes = Math.floor((durationSeconds % 3600) / 60);
const seconds = Math.floor(durationSeconds % 60);
if (hours > 0) {
return `${hours}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;
}
return `${minutes}:${seconds.toString().padStart(2, '0')}`;
};
export const formatBytes = (bytes?: number): string => {
if (!bytes || bytes === 0) return '-';
const k = 1024;
const sizes = ['B', 'KB', 'MB', 'GB'];
const i = Math.floor(Math.log(bytes) / Math.log(k));
return `${(bytes / Math.pow(k, i)).toFixed(1)} ${sizes[i]}`;
};

View File

@ -1 +1,2 @@
export * from './format.utils';
export * from './token.utils'; export * from './token.utils';