import axios from 'axios' import ListItem from '@material-ui/core/ListItem' import ListItemIcon from '@material-ui/core/ListItemIcon' import ListItemText from '@material-ui/core/ListItemText' import { useEffect, useState } from 'react' import SettingsIcon from '@material-ui/icons/Settings' import Dialog from '@material-ui/core/Dialog' import DialogTitle from '@material-ui/core/DialogTitle' import DialogContent from '@material-ui/core/DialogContent' import TextField from '@material-ui/core/TextField' import DialogActions from '@material-ui/core/DialogActions' import Button from '@material-ui/core/Button' import { FormControlLabel, InputLabel, Select, Switch } from '@material-ui/core' import { settingsHost, setTorrServerHost, getTorrServerHost } from 'utils/Hosts' import { useTranslation } from 'react-i18next' import { ThemeProvider } from '@material-ui/core/styles' import { lightTheme } from '../style/materialUISetup' export default function SettingsDialog() { const { t } = useTranslation() const [open, setOpen] = useState(false) const [settings, setSets] = useState({}) const [show, setShow] = useState(false) const [tsHost, setTSHost] = useState(getTorrServerHost()) const handleClickOpen = () => setOpen(true) const handleClose = () => setOpen(false) const handleSave = () => { setOpen(false) const sets = JSON.parse(JSON.stringify(settings)) sets.CacheSize *= 1024 * 1024 axios.post(settingsHost(), { action: 'set', sets }) } useEffect(() => { axios .post(settingsHost(), { action: 'get' }) .then(({ data }) => { setSets({ ...data, CacheSize: data.CacheSize / (1024 * 1024) }) setShow(true) }) .catch(() => setShow(false)) }, [tsHost]) const onInputHost = ({ target: { value } }) => { const host = value.replace(/\/$/gi, '') setTorrServerHost(host) setTSHost(host) } 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 } setSets(sets) } const { CacheSize, PreloadBuffer, ReaderReadAHead, RetrackersMode, TorrentDisconnectTimeout, EnableIPv6, ForceEncrypt, DisableTCP, DisableUTP, DisableUPNP, DisableDHT, DisablePEX, DisableUpload, DownloadRateLimit, UploadRateLimit, ConnectionsLimit, DhtConnectionLimit, PeersListenPort, UseDisk, TorrentsSavePath, RemoveCacheOnDrop, } = settings return (