import AppsIcon from '@mui/icons-material/Apps'; import BuildIcon from '@mui/icons-material/Build'; import CancelIcon from '@mui/icons-material/Cancel'; import DeveloperBoardIcon from '@mui/icons-material/DeveloperBoard'; import DevicesIcon from '@mui/icons-material/Devices'; import FolderIcon from '@mui/icons-material/Folder'; import MemoryIcon from '@mui/icons-material/Memory'; import PowerSettingsNewIcon from '@mui/icons-material/PowerSettingsNew'; import RefreshIcon from '@mui/icons-material/Refresh'; import SdCardAlertIcon from '@mui/icons-material/SdCardAlert'; import SdStorageIcon from '@mui/icons-material/SdStorage'; import SettingsBackupRestoreIcon from '@mui/icons-material/SettingsBackupRestore'; import TimerIcon from '@mui/icons-material/Timer'; import { Avatar, Box, Button, Dialog, DialogActions, DialogContent, DialogTitle, Divider, List, ListItem, ListItemAvatar, ListItemText } from '@mui/material'; import { useRequest } from 'alova'; import { useContext, useState } from 'react'; import { toast } from 'react-toastify'; import RestartMonitor from './RestartMonitor'; import SystemStatusVersionDialog from './SystemStatusVersionDialog'; import type { FC } from 'react'; import { dialogStyle } from 'CustomTheme'; import * as SystemApi from 'api/system'; import { ButtonRow, FormLoader, SectionContent } from 'components'; import { AuthenticatedContext } from 'contexts/authentication'; import { useI18nContext } from 'i18n/i18n-react'; function formatNumber(num: number) { return new Intl.NumberFormat().format(num); } const SystemStatusForm: FC = () => { const { LL } = useI18nContext(); const { me } = useContext(AuthenticatedContext); const [confirmRestart, setConfirmRestart] = useState(false); const [confirmFactoryReset, setConfirmFactoryReset] = useState(false); const [processing, setProcessing] = useState(false); const [restarting, setRestarting] = useState(); const [versionDialogOpen, setVersionDialogOpen] = useState(false); const { send: restartCommand } = useRequest(SystemApi.restart(), { immediate: false }); const { send: factoryResetCommand } = useRequest(SystemApi.factoryReset(), { immediate: false }); const { send: partitionCommand } = useRequest(SystemApi.partition(), { immediate: false }); const { data: data, send: loadData, error } = useRequest(SystemApi.readSystemStatus, { force: true }); const restart = async () => { setProcessing(true); await restartCommand() .then(() => { setRestarting(true); }) .catch((err) => { toast.error(err.message); }) .finally(() => { setConfirmRestart(false); setProcessing(false); }); }; const factoryReset = async () => { setProcessing(true); await factoryResetCommand() .then(() => { setRestarting(true); }) .catch((err) => { toast.error(err.message); }) .finally(() => { setConfirmFactoryReset(false); setProcessing(false); }); }; const partition = async () => { setProcessing(true); await partitionCommand() .then(() => { setRestarting(true); }) .catch((err) => { toast.error(err.message); }) .finally(() => { setConfirmRestart(false); setProcessing(false); }); }; const renderRestartDialog = () => ( setConfirmRestart(false)}> {LL.RESTART()} {LL.RESTART_CONFIRM()} {data?.has_loader && ( )} ); const renderFactoryResetDialog = () => ( setConfirmFactoryReset(false)}> {LL.FACTORY_RESET()} {LL.SYSTEM_FACTORY_TEXT_DIALOG()} ); const content = () => { if (!data) { return ; } return ( <> {data.psram_size !== undefined && data.free_psram !== undefined && ( <> )} {me.admin && ( )} {renderRestartDialog()} {renderFactoryResetDialog()} ); }; return ( {restarting ? : content()} {data && ( setVersionDialogOpen(false)} version={data.emsesp_version} platform={data.esp_platform} /> )} ); }; export default SystemStatusForm;