import type MediaFox from '@mediafox/core'; import React, {createRef} from 'react'; import {formatBytes} from '~/lib/format-bytes'; import {formatElapsedTime} from '~/lib/format-elapsed-time'; import {formatSeconds} from '~/lib/format-seconds'; import type {ConvertProgressType} from '~/lib/progress'; import { useAddOutputFilenameToTitle, useAddProgressToTitle, } from '~/lib/title-context'; import {AudioWaveForm, AudioWaveformContainer} from './AudioWaveform'; import {Card} from './ui/card'; import {Skeleton} from './ui/skeleton'; import type {VideoThumbnailRef} from './VideoThumbnail'; import {VideoThumbnail} from './VideoThumbnail'; export const convertProgressRef = createRef(); export const ConvertProgress: React.FC<{ readonly state: ConvertProgressType; readonly newName: string | null; readonly done: boolean; readonly duration: number | null; readonly isReencoding: boolean; readonly bars: number[]; readonly startTime?: number; readonly completedTime?: number; readonly mediafox: MediaFox; }> = ({ state, newName, bars, done, isReencoding, duration, startTime, completedTime, mediafox, }) => { const progress = done ? 1 : state.overallProgress; useAddProgressToTitle(progress); useAddOutputFilenameToTitle(newName); return ( {isReencoding && state.hasVideo ? ( <> {duration ? ( <>
{state.millisecondsWritten || done ? (
) : null}
) : null} ) : duration && !state.hasVideo ? ( <>
) : null}
{newName ? ( {newName} ) : ( )}
{formatSeconds(state.millisecondsWritten / 1000)} {' • '} {formatBytes(state.bytesWritten)} {startTime && ( <> {' • '} Time:{' '} {formatElapsedTime( done && completedTime ? completedTime - startTime : Date.now() - startTime, )} )}
); };