import { Button, Card, CardActionArea, CardActions, CardContent, CardMedia, Chip, IconButton, LinearProgress, Skeleton, Stack, Tooltip, Typography } from '@mui/material' import { useAtomValue } from 'jotai' import { useCallback } from 'react' import { serverURL } from '../atoms/settings' import { RPCResult } from '../types' import { base64URLEncode, ellipsis, formatSize, formatSpeedMiB, mapProcessStatus } from '../utils' import ResolutionBadge from './ResolutionBadge' import ClearIcon from '@mui/icons-material/Clear' import StopCircleIcon from '@mui/icons-material/StopCircle' import OpenInBrowserIcon from '@mui/icons-material/OpenInBrowser' import SaveAltIcon from '@mui/icons-material/SaveAlt' type Props = { download: RPCResult onStop: () => void onCopy: () => void } const DownloadCard: React.FC = ({ download, onStop, onCopy }) => { const serverAddr = useAtomValue(serverURL) const isCompleted = useCallback( () => download.progress.percentage === '-1', [download.progress.percentage] ) const percentageToNumber = useCallback( () => isCompleted() ? 100 : Number(download.progress.percentage.replace('%', '')), [download.progress.percentage, isCompleted] ) const viewFile = (path: string) => { const encoded = base64URLEncode(path) window.open(`${serverAddr}/filebrowser/v/${encoded}?token=${localStorage.getItem('token')}`) } const downloadFile = (path: string) => { const encoded = base64URLEncode(path) window.open(`${serverAddr}/filebrowser/d/${encoded}?token=${localStorage.getItem('token')}`) } return ( { navigator.clipboard.writeText(download.info.url) onCopy() }}> {download.info.thumbnail !== '' ? : } {download.progress.percentage ? : null } {download.info.title !== '' ? {ellipsis(download.info.title, 100)} : } {!isCompleted() ? download.progress.percentage : ''}   {!isCompleted() ? formatSpeedMiB(download.progress.speed) : ''} {formatSize(download.info.filesize_approx ?? 0)} {isCompleted() ? : } {isCompleted() && <> downloadFile(download.output.savedFilePath)} > viewFile(download.output.savedFilePath)} > } ) } export default DownloadCard