import axios from 'axios' import Dialog from '@material-ui/core/Dialog' import TextField from '@material-ui/core/TextField' import Button from '@material-ui/core/Button' import Checkbox from '@material-ui/core/Checkbox' import { FormControlLabel, Grid, Input, InputLabel, Select, Slider, Switch, useMediaQuery, useTheme, } from '@material-ui/core' import { settingsHost } from 'utils/Hosts' import { useEffect, useState } from 'react' import { useTranslation } from 'react-i18next' import { Header } from 'style/DialogStyles' import AppBar from '@material-ui/core/AppBar' import Tabs from '@material-ui/core/Tabs' import Tab from '@material-ui/core/Tab' import SwipeableViews from 'react-swipeable-views' import { USBIcon, RAMIcon } from 'icons' import CircularProgress from '@material-ui/core/CircularProgress' import { FooterSection, Divider, PreloadCacheValue, MainSettingsContent, SecondarySettingsContent, StorageButton, StorageIconWrapper, CacheStorageSelector, SettingSectionLabel, PreloadCachePercentage, cacheBeforeReaderColor, cacheAfterReaderColor, Content, } from './style' import defaultSettings from './defaultSettings' import { a11yProps, TabPanel } from './tabComponents' export default function SettingsDialog({ handleClose }) { const { t } = useTranslation() const fullScreen = useMediaQuery('@media (max-width:930px)') const { direction } = useTheme() const [settings, setSettings] = useState() const [selectedTab, setSelectedTab] = useState(0) const [cacheSize, setCacheSize] = useState(32) const [cachePercentage, setCachePercentage] = useState(40) const [isProMode, setIsProMode] = useState(JSON.parse(localStorage.getItem('isProMode')) || false) useEffect(() => { axios.post(settingsHost(), { action: 'get' }).then(({ data }) => { setSettings({ ...data, CacheSize: data.CacheSize / (1024 * 1024) }) }) }, []) const handleSave = () => { handleClose() const sets = JSON.parse(JSON.stringify(settings)) sets.CacheSize = cacheSize * 1024 * 1024 sets.ReaderReadAHead = cachePercentage axios.post(settingsHost(), { action: 'set', sets }) } const inputForm = ({ target: { type, value, checked, id } }) => { const sets = JSON.parse(JSON.stringify(settings)) if (type === 'number' || type === 'select-one') { sets[id] = Number(value) } else if (type === 'checkbox') { if ( id === 'DisableTCP' || id === 'DisableUTP' || id === 'DisableUPNP' || id === 'DisableDHT' || id === 'DisablePEX' || id === 'DisableUpload' ) sets[id] = Boolean(!checked) else sets[id] = Boolean(checked) } else if (type === 'url') { sets[id] = value } setSettings(sets) } const { CacheSize, PreloadBuffer, ReaderReadAHead, RetrackersMode, TorrentDisconnectTimeout, EnableIPv6, ForceEncrypt, DisableTCP, DisableUTP, DisableUPNP, DisableDHT, DisablePEX, DisableUpload, DownloadRateLimit, UploadRateLimit, ConnectionsLimit, DhtConnectionLimit, PeersListenPort, UseDisk, TorrentsSavePath, RemoveCacheOnDrop, } = settings || {} useEffect(() => { if (!CacheSize || !ReaderReadAHead) return setCacheSize(CacheSize) setCachePercentage(ReaderReadAHead) }, [CacheSize, ReaderReadAHead]) const updateSettings = newProps => setSettings({ ...settings, ...newProps }) const handleChange = (_, newValue) => setSelectedTab(newValue) const handleChangeIndex = index => setSelectedTab(index) const handleBlur = ({ target: { value } }) => { if (value < 32) return setCacheSize(32) if (value > 20000) return setCacheSize(20000) setCacheSize(Math.round(value / 8) * 8) } const handleInputChange = ({ target: { value } }) => setCacheSize(value === '' ? '' : Number(value)) return (
{t('Settings')}
{settings ? ( <>
Настройки кеша
{100 - cachePercentage}% ({Math.round((cacheSize / 100) * (100 - cachePercentage))} МБ)
От кеша будет оставаться позади воспроизводимого блока
{cachePercentage}% ({Math.round((cacheSize / 100) * cachePercentage)} МБ)
От кеша будет спереди от воспроизводимого блока
Размер кеша
setCacheSize(newValue)} step={8} /> {isProMode && ( )}
Кеш предзагрузки
setCachePercentage(newValue)} /> {isProMode && ( setCachePercentage(value === '' ? '' : Number(value)) } onBlur={({ target: { value } }) => { if (value < 0) return setCachePercentage(0) if (value > 100) return setCachePercentage(100) }} style={{ width: '65px' }} inputProps={{ min: 0, max: 100, type: 'number' }} /> )}
} label={t('PreloadBuffer')} />
{UseDisk ? (
Место хранения кеша
updateSettings({ UseDisk: false })}>
Оперативная память
Диск
} label={t('RemoveCacheOnDrop')} /> {t('RemoveCacheOnDropDesc')}
) : ( Место хранения кеша
Оперативная память
updateSettings({ UseDisk: true })}>
Диск
)}
Дополнительные настройки } label={t('EnableIPv6')} />
} label={t('TCP')} />
} label={t('UTP')} />
} label={t('PEX')} />
} label={t('ForceEncrypt')} />


} label={t('DHT')} />


} label={t('Upload')} />


} label={t('UPNP')} />
{t('RetrackersMode')}
) : ( )}
{/* {t('Settings')} {show && ( <>

} label={t('PreloadBuffer')} />
} label={t('UseDisk')} />
{t('UseDiskDesc')}
} label={t('RemoveCacheOnDrop')} />
{t('RemoveCacheOnDropDesc')}

} label={t('EnableIPv6')} />
} label={t('TCP')} />
} label={t('UTP')} />
} label={t('PEX')} />
} label={t('ForceEncrypt')} />


} label={t('DHT')} />


} label={t('Upload')} />


} label={t('UPNP')} />
{t('RetrackersMode')}
)}
*/} { setIsProMode(checked) localStorage.setItem('isProMode', checked) if (!checked) setSelectedTab(0) }} color='primary' /> } label='Pro mode' />
) }