iobroker.admin 7.1.2 → 7.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. package/README.md +7 -4
  2. package/adminWww/asset-manifest.json +13 -13
  3. package/adminWww/index.html +1 -1
  4. package/adminWww/static/css/{3210.f6c8a5fc.chunk.css → 4684.f5525d8f.chunk.css} +2 -2
  5. package/adminWww/static/css/4684.f5525d8f.chunk.css.map +1 -0
  6. package/adminWww/static/js/2534.89c71e34.chunk.js +2 -0
  7. package/adminWww/static/js/2534.89c71e34.chunk.js.map +1 -0
  8. package/adminWww/static/js/4684.e5f7632b.chunk.js +2 -0
  9. package/adminWww/static/js/4684.e5f7632b.chunk.js.map +1 -0
  10. package/adminWww/static/js/5056.9247882b.chunk.js +3 -0
  11. package/adminWww/static/js/5056.9247882b.chunk.js.map +1 -0
  12. package/adminWww/static/js/{8038.ae8b7862.chunk.js → 8038.64137a64.chunk.js} +2 -2
  13. package/adminWww/static/js/8038.64137a64.chunk.js.map +1 -0
  14. package/adminWww/static/js/{main.423e60b6.js → main.d3fd9aec.js} +2 -2
  15. package/adminWww/static/js/{main.423e60b6.js.map → main.d3fd9aec.js.map} +1 -1
  16. package/io-package.json +14 -14
  17. package/package.json +4 -13
  18. package/adminWww/static/css/3210.f6c8a5fc.chunk.css.map +0 -1
  19. package/adminWww/static/js/2534.d8fd195b.chunk.js +0 -2
  20. package/adminWww/static/js/2534.d8fd195b.chunk.js.map +0 -1
  21. package/adminWww/static/js/3210.1be726e7.chunk.js +0 -2
  22. package/adminWww/static/js/3210.1be726e7.chunk.js.map +0 -1
  23. package/adminWww/static/js/6539.0a444811.chunk.js +0 -3
  24. package/adminWww/static/js/6539.0a444811.chunk.js.map +0 -1
  25. package/adminWww/static/js/8038.ae8b7862.chunk.js.map +0 -1
  26. /package/adminWww/static/js/{6539.0a444811.chunk.js.LICENSE.txt → 5056.9247882b.chunk.js.LICENSE.txt} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"static/js/8038.ae8b7862.chunk.js","mappings":"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","sources":["dialogs/JsControllerUpdater.tsx","dialogs/JsControllerDialog.tsx","components/BaseSettings/BaseSettingsSystem.tsx","components/BaseSettings/BaseSettingsMultihost.tsx","components/BaseSettings/BaseSettingsObjects.tsx","components/BaseSettings/BaseSettingsStates.tsx","components/BaseSettings/BaseSettingsLog.tsx","components/BaseSettings/BaseSettingsPlugins.tsx","dialogs/BaseSettingsDialog.tsx","components/Hosts/HostEdit.tsx","components/Hosts/HostGeneric.tsx","components/Hosts/HostCard.tsx","components/Hosts/HostRow.tsx","tabs/Hosts.tsx"],"sourcesContent":["import React, { Component, type JSX } from 'react';\nimport ipaddr from 'ipaddr.js';\n\nimport { LinearProgress, Button, Dialog, DialogActions, DialogContent, DialogTitle } from '@mui/material';\n\nimport { Close as CloseIcon, Refresh as ReloadIcon } from '@mui/icons-material';\n\nimport { type AdminConnection, I18n, type ThemeType } from '@iobroker/adapter-react-v5';\n\ninterface NetworkInterface {\n address: string;\n netmask: string;\n family: string;\n mac: string;\n internal: boolean;\n cidr: string;\n}\n\ninterface ServerResponse {\n /** If the update is still running */\n running: boolean;\n stderr: string[];\n stdout: string[];\n /** if installation process succeeded */\n success?: boolean;\n}\n\ninterface JsControllerUpdaterProps {\n socket: AdminConnection;\n hostId: `system.host.${string}`;\n onClose: () => void;\n version: string;\n adminInstance: string;\n onUpdating: (updating: boolean) => void;\n themeType?: ThemeType;\n}\n\ninterface JsControllerUpdaterState {\n response: any;\n error: string | null;\n starting: boolean;\n}\n\nexport default class JsControllerUpdater extends Component<JsControllerUpdaterProps, JsControllerUpdaterState> {\n /** If update is currently in progress */\n private updating = false;\n\n /** Ref to the textarea element where the update information is shown to the user */\n private readonly textareaRef: React.RefObject<HTMLTextAreaElement> = React.createRef();\n\n /** The address of the server to get update information from with protocol and port */\n private link = `${window.location.protocol}//${window.location.host}/`;\n\n /** Interval to poll update status from server */\n private interval: ReturnType<typeof setTimeout> | null;\n\n /** Initial timeout to give server time to start without showing an error */\n private startTimeout: ReturnType<typeof setTimeout> | null;\n\n constructor(props: JsControllerUpdaterProps) {\n super(props);\n\n this.state = {\n response: null,\n error: null,\n starting: true,\n };\n }\n\n /**\n * Calls props.onUpdating if the updating state has changed\n *\n * @param updating target value true if update is in progress\n */\n setUpdating(updating: boolean): void {\n if (this.updating !== updating) {\n this.updating = updating;\n this.props.onUpdating(updating);\n }\n }\n\n /**\n * Determine the correct ip address of the server\n * If the current admin instance is running on the host to be updated, we take it from the browser, else we try to get information from the host object\n */\n async findIpAddress(): Promise<void> {\n // Controller to update: this.props.hostId\n // Current admin instance: this.props.adminInstance = 'admin.X'\n // read settings of admin.X\n const instanceObj: ioBroker.InstanceObject = (await this.props.socket.getObject(\n `system.adapter.${this.props.adminInstance}`,\n )) as any as ioBroker.InstanceObject;\n if (instanceObj.common.host === this.props.hostId) {\n return;\n }\n\n // we are updating some slave => try to find the common ip address\n const host = await this.props.socket.getObject(this.props.hostId);\n const settings = await this.props.socket.readBaseSettings(this.props.hostId);\n let hostIp = settings?.config?.objects?.host;\n\n if (!hostIp || hostIp === 'localhost') {\n return;\n }\n\n hostIp = ipaddr.parse(hostIp).toString();\n\n if (!host?.native?.hardware?.networkInterfaces) {\n return;\n }\n\n // find common ip address in host.native.hardware.networkInterfaces\n for (const networkInterface of Object.values(host.native.hardware.networkInterfaces)) {\n (networkInterface as NetworkInterface[]).find(addr => {\n // addr = {\n // \"address\": \"192.168.178.45\",\n // \"netmask\": \"255.255.255.0\",\n // \"family\": \"IPv4\",\n // \"mac\": \"00:2e:5c:68:15:e1\",\n // \"internal\": false,\n // \"cidr\": \"192.168.178.45/24\"\n // }\n try {\n const iIP = ipaddr.parseCIDR(addr.cidr).toString();\n if (addr.internal === false && hostIp.match(iIP)) {\n this.link = `${window.location.protocol}//${\n addr.family === 'IPv6' ? `[${addr.address}]` : addr.address\n }:${window.location.port}`;\n }\n } catch {\n // ignore\n }\n return false;\n });\n }\n }\n\n /**\n * Lifecycle hook called if component mounts\n * We try to get the correct ip address on mount and start the update immediately\n */\n async componentDidMount(): Promise<void> {\n try {\n await this.findIpAddress();\n } catch (e) {\n console.error(`Cannot find ip address: ${e.message}`);\n }\n\n try {\n // send update command to js-controller\n await this.props.socket.upgradeController(\n this.props.hostId,\n this.props.version,\n parseInt(this.props.adminInstance.split('.').pop(), 10),\n );\n } catch (e) {\n console.error(`Cannot update controller: ${e.message}`);\n this.setState({ error: I18n.t('Not updatable'), starting: false });\n this.setUpdating(false);\n return;\n }\n\n this.setUpdating(true);\n this.interval = setInterval(() => this.checkStatus(), 1_000); // poll every second\n\n this.startTimeout = setTimeout(() => {\n this.startTimeout = null;\n this.setState({ starting: false });\n }, 10_000); // give 10 seconds to controller to start update\n }\n\n /**\n * Lifecycle hook called if component will unmount\n * Clearing intervals and timers here\n */\n componentWillUnmount(): void {\n if (this.interval) {\n clearInterval(this.interval);\n this.interval = null;\n }\n\n if (this.startTimeout) {\n clearTimeout(this.startTimeout);\n this.startTimeout = null;\n }\n }\n\n /**\n * Request the current status from the server and show it in the textarea\n */\n async checkStatus(): Promise<void> {\n console.log(`Request update status from: ${this.link}`);\n\n try {\n const res = await fetch(this.link);\n\n const plainBody = await res.text();\n console.log(`Received status: ${plainBody}`);\n\n const response: ServerResponse = JSON.parse(plainBody);\n\n // sometimes stderr has only one empty string in it\n if (response?.stderr) {\n response.stderr = response.stderr.filter((line: string) => line.trim());\n }\n if (response && !response.running && response.success && response.stdout) {\n response.stdout.push('');\n response.stdout.push('---------------------------------------------------');\n response.stdout.push(I18n.t('%s was successfully updated to %s', 'js-controller', this.props.version));\n } else if (response?.stdout) {\n response.stdout.unshift('');\n response.stdout.unshift('---------------------------------------------------');\n response.stdout.unshift(I18n.t('updating %s to %s...', 'js-controller', this.props.version));\n }\n this.setState({ response, error: null }, () => {\n if (response && !response.running) {\n this.setUpdating(false);\n if (this.interval) {\n clearInterval(this.interval);\n this.interval = null;\n }\n } else if (response?.running) {\n this.setUpdating(true);\n }\n\n // scroll down\n if (this.textareaRef.current) {\n setTimeout(() => (this.textareaRef.current.scrollTop = this.textareaRef.current.scrollHeight), 100);\n }\n });\n } catch (e) {\n if (!this.state.starting) {\n this.setState({ error: e.toString() }, () => this.setUpdating(false));\n }\n }\n }\n\n /**\n * Render the UI\n */\n render(): JSX.Element {\n return (\n <Dialog\n onClose={(_e, reason) => {\n if (reason !== 'escapeKeyDown' && reason !== 'backdropClick') {\n this.props.onClose();\n }\n }}\n open={!0}\n maxWidth=\"lg\"\n fullWidth\n >\n <DialogTitle>{I18n.t('Updating %s...', 'js-controller')}</DialogTitle>\n <DialogContent style={{ height: 400, padding: '0 20px', overflow: 'hidden' }}>\n {(!this.state.response || this.state.response.running) && !this.state.error ? (\n <LinearProgress />\n ) : null}\n {this.state.response || this.state.error ? (\n <textarea\n ref={this.textareaRef}\n style={{\n width: '100%',\n height: '100%',\n resize: 'none',\n background: this.props.themeType === 'dark' ? '#000' : '#fff',\n color: this.props.themeType === 'dark' ? '#EEE' : '#111',\n boxSizing: 'border-box',\n fontFamily:\n 'Consolas,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New, monospace',\n border: this.state.response?.success\n ? '2px solid green'\n : this.state.error ||\n (this.state.response &&\n !this.state.response.running &&\n !this.state.response.success)\n ? '2px solid red'\n : undefined,\n }}\n value={\n this.state.error\n ? this.state.error\n : this.state.response.stderr && this.state.response.stderr.length\n ? this.state.response.stderr.join('\\n')\n : this.state.response.stdout.join('\\n')\n }\n readOnly\n />\n ) : null}\n </DialogContent>\n <DialogActions>\n <Button\n id=\"js-controller-updater-close\"\n variant=\"contained\"\n disabled={this.state.starting || (!this.state.error && this.state.response?.running)}\n onClick={() => {\n if (this.state.response?.success) {\n window.location.reload();\n }\n this.props.onClose();\n }}\n color={this.state.response?.success ? 'primary' : 'grey'}\n startIcon={this.state.response?.success ? <ReloadIcon /> : <CloseIcon />}\n >\n {this.state.response?.success ? I18n.t('Reload') : I18n.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n}\n","import React, { useState, useEffect, type JSX } from 'react';\nimport ReactMarkdown from 'react-markdown';\n\nimport {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n Card,\n DialogTitle,\n IconButton,\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n Box,\n} from '@mui/material';\n\nimport { ExpandMore as ExpandMoreIcon, Description as DescriptionIcon, Close as CloseIcon } from '@mui/icons-material';\n\nimport { I18n, Utils, IconCopy, type IobTheme } from '@iobroker/adapter-react-v5';\nimport { CONTROLLER_CHANGELOG_URL } from '@/helpers/utils';\n\nconst styles: Record<string, any> = {\n root: {\n // backgroundColor: theme.palette.background.paper,\n width: '100%',\n height: 'auto',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'auto',\n padding: 10,\n },\n paper: {\n maxWidth: 1000,\n },\n overflowHidden: {\n display: 'flex',\n overflow: 'hidden',\n },\n // pre: {\n // overflow: 'auto',\n // whiteSpace: 'pre-wrap',\n // margin: 0\n // },\n h1: {\n fontWeight: 500,\n fontSize: 35,\n margin: '10px 0',\n },\n h2: (theme: IobTheme) => ({\n p: '10px 7px',\n fontSize: 25,\n fontWeight: 300,\n borderRadius: '3px',\n background: '#4dabf5',\n color: theme.palette.mode === 'dark' ? 'black' : 'white',\n }),\n h22: (theme: IobTheme) => ({\n p: 0,\n m: 0,\n fontSize: 25,\n fontWeight: 300,\n borderRadius: '3px',\n background: '#4dabf5',\n color: theme.palette.mode === 'dark' ? 'black' : 'white',\n }),\n standardText: {\n fontSize: 15,\n margin: '10px 0',\n '& > a': {\n textDecoration: 'none',\n color: '#1e88e5',\n },\n },\n standardTextSmall: {\n fontSize: 12,\n color: 'black',\n },\n standardTextSmall2: {\n fontSize: 12,\n },\n pre: {\n whiteSpace: 'pre-wrap',\n background: '#e4e3e3',\n padding: 10,\n borderRadius: 3,\n position: 'relative',\n },\n copyButton: {\n color: 'black',\n position: 'absolute',\n right: 10,\n top: 4,\n },\n comment: {\n color: '#00000078',\n },\n accordionSummary: {\n background: '#4dabf5',\n borderRadius: '3px',\n '& .MuiAccordionSummary-content': {\n m: 0,\n },\n },\n accordionDetails: {\n display: 'flex',\n flexDirection: 'column',\n },\n code: (theme: IobTheme) => ({\n backgroundColor: theme.palette.mode === 'dark' ? '#123456' : '#93bbe7',\n p: '0 3px 0 3px',\n }),\n copyButtonSmall: {\n width: 31,\n height: 16,\n },\n};\n\nfunction removeChapter(text: string, remove: string, mustContain: string): string {\n const lines = text.split('\\n');\n const newLines = [];\n let found = false;\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i].toLowerCase();\n if (line.startsWith('##')) {\n found = line.includes(remove.toLowerCase()) && (!mustContain || !line.includes(mustContain.toLowerCase()));\n }\n\n if (!found) {\n newLines.push(lines[i]);\n }\n }\n\n return newLines.join('\\n');\n}\n\ninterface HostInfoShort {\n location: string;\n os: string;\n}\n\ninterface JsControllerDialogProps {\n socket: any;\n hostId: string;\n version: string;\n onClose: () => void;\n}\n\nconst JsControllerDialog = ({ socket, hostId, version, onClose }: JsControllerDialogProps): JSX.Element => {\n const [readme, setReadme] = useState<(string | JSX.Element)[] | null>(null);\n const [location, setLocation] = useState('');\n const [os, setOS] = useState('');\n\n const copyTextToClipboard = (text: string): void => {\n Utils.copyToClipboard(text);\n window.alert(I18n.t('Copied'));\n };\n\n useEffect((): void => {\n if (!hostId || typeof hostId !== 'string') {\n console.error(`Invalid hostId: \"${hostId}\" with type ${typeof hostId}`);\n }\n\n if ((!location || !os) && hostId && typeof hostId === 'string') {\n socket\n .getHostInfoShort(hostId)\n .then((data: HostInfoShort) => {\n if (data.location && data.location !== location) {\n setLocation(data.location);\n }\n // win32, linux, darwin, freebsd, android\n if (data.os && data.os !== os) {\n setOS(data.os);\n }\n\n void fetch(\n `https://raw.githubusercontent.com/ioBroker/ioBroker.docs/master/admin/${I18n.getLanguage()}/controller-upgrade.md`,\n )\n .then(response => response.text())\n .then(_readme => {\n const _os = data.os || os;\n const _location = (data.location || location).replace(/\\\\/g, '/');\n if (_os === 'win32') {\n _readme = removeChapter(_readme, 'linux', 'windows');\n } else {\n _readme = removeChapter(_readme, 'windows', 'linux');\n }\n _readme = _readme.replace(/cd \\/opt\\/iobroker/g, `cd ${_location}`);\n _readme = _readme.replace(/cd C:\\\\iobroker/g, `cd ${_location}`);\n _readme = _readme.replace(/x\\.y\\.z/g, version);\n const readmeLines = _readme.split('<!-- copy');\n\n const parts: (string | JSX.Element)[] = [];\n readmeLines.forEach(chapter => {\n if (chapter.includes('-->')) {\n const parts_ = chapter.split('-->');\n let button = parts_[0];\n const text = parts_[1];\n let small = false;\n if (button.startsWith(' small')) {\n button = button.replace(/^ {2}small /, '');\n small = true;\n }\n button = button.replace(/^\\n\\r/, '').replace(/^\\n/, '');\n if (small) {\n parts.push(\n <IconButton\n key={`b${parts.length}`}\n onClick={() => copyTextToClipboard(button)}\n >\n <IconCopy />\n </IconButton>,\n );\n } else {\n parts.push(\n <Button\n key={`b${parts.length}`}\n variant=\"contained\"\n onClick={() => copyTextToClipboard(button)}\n startIcon={<IconCopy />}\n >\n {I18n.t('Copy to clipboard')}\n </Button>,\n );\n }\n parts.push(text);\n } else {\n parts.push(chapter);\n }\n });\n\n setReadme(parts);\n });\n })\n .catch((e: string) => window.alert(`Cannot get information about host \"${hostId}\": ${e}`));\n }\n }, [location, os, socket, version, hostId]);\n\n const renderReadme = (): JSX.Element => (\n <>\n {readme.map((text, i) =>\n typeof text === 'object' ? (\n text\n ) : (\n <ReactMarkdown\n key={`t_${i}`}\n components={{\n em: ({ ...props }) => (\n <IconButton\n style={styles.copyButtonSmall}\n onClick={() => copyTextToClipboard((props.children as string[])[0].toString())}\n >\n <IconCopy />\n </IconButton>\n ),\n a: ({ children, ...props }) => (\n <a\n style={{ color: 'inherit' }}\n {...props}\n >\n {children}\n </a>\n ),\n code: ({ children, ref, ...props }) => (\n <Box\n component=\"code\"\n sx={styles.code}\n ref={ref as React.RefObject<HTMLElement>}\n {...props}\n >\n {children}\n </Box>\n ),\n }}\n >\n {text}\n </ReactMarkdown>\n ),\n )}\n </>\n );\n\n const renderText = (): JSX.Element => (\n <Card style={styles.root}>\n <Box\n component=\"div\"\n sx={styles.standardText}\n >\n {I18n.t(\n 'Due to the different hardware and platforms under which ioBroker runs, the js-controller has to be updated manually. Further details can be found in the appropriate section.',\n )}\n </Box>\n\n <Box\n component=\"h2\"\n sx={styles.h2}\n >\n {I18n.t('General information for all platforms')}\n </Box>\n <Box\n component=\"div\"\n sx={styles.standardText}\n >\n {I18n.t('For an update from js-controller 1.x to 2.x please always read the information at')}{' '}\n <a\n href=\"https://forum.iobroker.net/topic/26759/js-controller-2-jetzt-f%C3%BCr-alle-im-stable\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n forum\n </a>\n .\n </Box>\n <Box\n component=\"div\"\n sx={styles.standardText}\n >\n {I18n.t(\n 'Otherwise please update the slaves first with an update of master-slave systems and the master last!',\n )}\n </Box>\n {os !== 'win32' && (\n <>\n <Box\n component=\"h2\"\n sx={styles.h2}\n >\n {I18n.t('Linux/macOS (new installer)')}\n </Box>\n <Box\n component=\"div\"\n sx={styles.standardText}\n >\n {I18n.t('This is the recommended option')}\n </Box>\n\n <Box\n component=\"div\"\n sx={styles.standardText}\n >\n {I18n.t('Please execute the following commands in an SSH shell (console):')}\n </Box>\n <pre style={styles.pre}>\n <IconButton\n size=\"small\"\n onClick={() => {\n window.alert(I18n.t('Copied'));\n copyTextToClipboard(\n `iob backup\niob stop\niob update\niob upgrade self\niob start`,\n );\n }}\n style={styles.copyButton}\n >\n <IconCopy />\n </IconButton>\n <div style={styles.standardTextSmall}>iob backup</div>\n <div style={styles.standardTextSmall}>iob stop</div>\n <div style={styles.standardTextSmall}>iob update</div>\n <div style={styles.standardTextSmall}>iob fix</div>\n <div style={styles.standardTextSmall}>iob upgrade self</div>\n <div style={styles.standardTextSmall}>iob start</div>\n </pre>\n <div style={styles.standardTextSmall2}>\n {I18n.t(\n 'or reboot server, then ioBroker should restart and you can be sure that all old processes were finished.',\n )}\n </div>\n <div style={styles.standardTextSmall2}>\n {I18n.t(\n 'If the upgrade command displays Access Rights / Permission errors, then please use the install fixer',\n )}\n </div>\n <pre style={styles.pre}>\n <IconButton\n size=\"small\"\n onClick={() => {\n window.alert(I18n.t('Copied'));\n copyTextToClipboard('curl -sL https://iobroker.net/fix.sh | bash -');\n }}\n style={styles.copyButton}\n >\n <IconCopy />\n </IconButton>\n <div style={styles.standardTextSmall}>curl -sL https://iobroker.net/fix.sh | bash -</div>\n </pre>\n <div style={styles.standardTextSmall2}>\n {I18n.t('to fix these issues and upgrade command run again.')}\n </div>\n\n <Box\n component=\"h2\"\n sx={styles.h2}\n >\n {I18n.t('Linux/macOS (manually installed)')}\n </Box>\n <Box\n component=\"div\"\n sx={styles.standardText}\n >\n {I18n.t(\n 'A manual installation usually takes place under root as user and therefore a \"sudo\" is necessary before the commands.',\n )}\n </Box>\n\n <Box\n component=\"div\"\n sx={styles.standardText}\n >\n {I18n.t('Please execute the following commands in an SSH shell (console):')}\n </Box>\n <pre style={styles.pre}>\n <IconButton\n size=\"small\"\n onClick={() => {\n window.alert(I18n.t('Copied'));\n copyTextToClipboard(\n `cd ${location || '/opt/iobroker'}\niob backup\niob stop\niob update\niob fix\niob upgrade self\niob start\n`,\n );\n }}\n style={styles.copyButton}\n >\n <IconCopy />\n </IconButton>\n <div style={styles.standardTextSmall}>\n cd\n {location || '/opt/iobroker'}\n </div>\n <div style={styles.standardTextSmall}>iob backup</div>\n <div style={styles.standardTextSmall}>iob stop</div>\n <div style={styles.standardTextSmall}>iob fix</div>\n <div style={styles.standardTextSmall}>iob update</div>\n <div style={styles.standardTextSmall}>iob upgrade self</div>\n <div style={styles.standardTextSmall}>iob start</div>\n </pre>\n\n <div style={styles.standardTextSmall2}>\n {I18n.t(\n 'or reboot server, then ioBroker should restart and you can be sure that all old processes were finished.',\n )}\n </div>\n <div style={styles.standardTextSmall2}>\n {I18n.t(\n 'If the upgrade command displays permissions / permissions errors, fix them. Sometimes \"sudo\" is not enough and you have to run the installation as a real root (previously simply sudo su -).',\n )}\n </div>\n </>\n )}\n {os === 'win32' && (\n <>\n <Box\n component=\"h2\"\n sx={styles.h2}\n >\n {I18n.t('Windows')}\n </Box>\n <Box\n component=\"div\"\n sx={styles.standardText}\n >\n {I18n.t(\n 'For updating ioBroker on Windows, download the appropriate installer with the desired js-controller version from the download page ',\n )}\n <a\n rel=\"noreferrer\"\n href=\"https://www.iobroker.net/#en/download\"\n target=\"_blank\"\n >\n https://www.iobroker.net/#en/download\n </a>\n {I18n.t(\n ' and make the update with it. With the Windows Installer, previously manually installed servers or installations from other operating systems can be migrated to Windows and updated.',\n )}\n </Box>\n\n <Box\n component=\"h2\"\n sx={styles.h2}\n >\n {I18n.t('Windows (manually installed)')}\n </Box>\n <Box\n component=\"div\"\n sx={styles.standardText}\n >\n {I18n.t(\n 'A manual installation is done with administrator rights. Please start a cmd.exe command line window as an administrator (right-click on cmd.exe and execute as administrator) and execute the following commands:',\n )}\n </Box>\n <pre style={styles.pre}>\n <IconButton\n size=\"small\"\n onClick={() => {\n window.alert(I18n.t('Copied'));\n copyTextToClipboard(\n `cd ${(location || 'C:\\\\iobroker').replace(/\\//g, '\\\\')}\niob backup\niob stop\niob status\niob update\niob upgrade self\n`,\n );\n }}\n style={styles.copyButton}\n >\n <IconCopy />\n </IconButton>\n <div style={styles.standardTextSmall}>\n cd\n {(location || 'C:\\\\iobroker').replace(/\\//g, '\\\\')}{' '}\n {!location ? I18n.t('(or where ioBroker was installed)') : null}\n </div>\n <div style={styles.standardTextSmall}>iob backup</div>\n <div style={styles.standardTextSmall}>\n iob stop\n {I18n.t('to stop the ioBroker service')}\n </div>\n <div style={styles.standardTextSmall}>\n iob status\n {I18n.t('to check if ioBroker has finished')}\n </div>\n <div style={styles.standardTextSmall}>iob update</div>\n <div style={styles.standardTextSmall}>iob upgrade self</div>\n </pre>\n <div style={styles.standardTextSmall2}>\n {I18n.t(\n 'Start ioBroker service or reboot computer, then ioBroker should restart and you can be sure that all the old processes were finished.',\n )}\n </div>\n </>\n )}\n <Accordion style={{ paddingTop: 14 }}>\n <AccordionSummary\n sx={styles.accordionSummary}\n expandIcon={<ExpandMoreIcon />}\n >\n <Box\n component=\"h2\"\n sx={styles.h22}\n >\n {I18n.t('Emergency Linux / macOS / Windows')}\n </Box>\n </AccordionSummary>\n <AccordionDetails style={styles.accordionDetails}>\n <Box\n component=\"div\"\n sx={styles.standardText}\n >\n {I18n.t('(manual reinstallation, if somehow nothing works after the update)')}\n </Box>\n <Box\n component=\"div\"\n sx={styles.standardText}\n >\n {I18n.t(\n 'On Windows first please call in the start menu under \"ioBroker\" the command line of the relevant ioBroker instance. The correct directory is then set automatically. On Linux or macOS please go to the ioBroker directory.',\n )}\n </Box>\n\n <Box\n component=\"div\"\n sx={styles.standardText}\n >\n {I18n.t(\n 'Run npm install iobroker.js-controller there. A specific version can be installed using npm install iobroker.js-controller@x.y.z (replace x.y.z with the desired version).',\n )}\n </Box>\n\n <Box\n component=\"div\"\n sx={styles.standardText}\n >\n {I18n.t(\n 'If there are problems with access rights when running on Linux the command has to be changed slightly:',\n )}\n </Box>\n\n <div style={styles.standardTextSmall2}>\n {I18n.t('For systems created with the new Linux installer:')}\n </div>\n <pre style={styles.pre}>\n <IconButton\n size=\"small\"\n onClick={() => {\n window.alert(I18n.t('Copied'));\n copyTextToClipboard(\n `cd ${os === 'win32' ? (location || 'C:\\\\iobroker').replace(/\\//g, '\\\\') : location || '/opt/iobroker'}\nsudo -u iobroker -H npm install iobroker.js-controller`,\n );\n }}\n style={styles.copyButton}\n >\n <IconCopy />\n </IconButton>\n <div style={styles.standardTextSmall}>\n cd\n {os === 'win32'\n ? (location || 'C:\\\\iobroker').replace(/\\//g, '\\\\')\n : location || '/opt/iobroker'}\n </div>\n <div style={styles.standardTextSmall}>\n sudo -u iobroker -H npm install iobroker.js-controller\n </div>\n </pre>\n <div style={styles.standardTextSmall2}>\n {I18n.t('For systems installed manually under Linux, prefix sudo or run as root.')}\n </div>\n <Box\n component=\"div\"\n sx={styles.standardText}\n >\n {I18n.t(\n 'This way is only necessary in very few cases and please consult the forum beforehand!',\n )}\n </Box>\n </AccordionDetails>\n </Accordion>\n </Card>\n );\n\n return (\n <Dialog\n onClose={() => onClose()}\n open={!0}\n sx={{ '& .MuiDialog-paper': styles.paper }}\n >\n <DialogTitle>{I18n.t('js-controller upgrade instructions')}</DialogTitle>\n <DialogContent\n style={readme ? null : styles.overflowHidden}\n dividers\n >\n {readme ? renderReadme() : renderText()}\n </DialogContent>\n <DialogActions>\n <Button\n id=\"js-controller-dialog-changelog\"\n variant=\"contained\"\n onClick={() => {\n window.open(CONTROLLER_CHANGELOG_URL, '_blank');\n }}\n color=\"grey\"\n startIcon={<DescriptionIcon />}\n >\n {I18n.t('Show whole changelog')}\n </Button>\n <Button\n id=\"js-controller-dialog-ok\"\n variant=\"contained\"\n onClick={() => onClose()}\n color=\"primary\"\n startIcon={<CloseIcon />}\n >\n {I18n.t('Ok')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nexport default JsControllerDialog;\n","import React, { createRef, Component, type JSX } from 'react';\n\nimport { Grid2, FormControlLabel, Checkbox, TextField, Paper } from '@mui/material';\n\nimport { withWidth, type Translate } from '@iobroker/adapter-react-v5';\n\nconst styles: Record<string, any> = {\n paper: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n overflow: 'auto',\n padding: 8,\n },\n controlItem: {\n width: 'calc(100% - 16px)',\n marginBottom: 16,\n marginRight: 8,\n marginLeft: 8,\n },\n RAM: {\n width: 400,\n marginRight: 8,\n },\n};\n\nexport interface SystemSettings {\n memoryLimitMB?: number;\n hostname?: string;\n statisticsInterval?: number;\n checkDiskInterval?: number;\n instanceStartInterval?: number;\n compact?: boolean;\n allowShellCommands?: boolean;\n memLimitWarn?: number;\n memLimitError?: number;\n noChmod?: boolean;\n}\n\ninterface BaseSettingsSystemProps {\n t: Translate;\n onChange: (settings: SystemSettings) => void;\n settings: SystemSettings;\n currentHost: string;\n}\n\ninterface BaseSettingsSystemState {\n memoryLimitMB: number;\n hostname: string;\n statisticsInterval: number;\n checkDiskInterval: number;\n instanceStartInterval: number;\n compact: boolean;\n allowShellCommands: boolean;\n memLimitWarn: number;\n memLimitError: number;\n noChmod: boolean;\n}\n\nclass BaseSettingsSystem extends Component<BaseSettingsSystemProps, BaseSettingsSystemState> {\n private focusRef: React.RefObject<HTMLInputElement>;\n\n constructor(props: BaseSettingsSystemProps) {\n super(props);\n\n const settings: SystemSettings = this.props.settings || {};\n\n this.state = {\n memoryLimitMB: settings.memoryLimitMB || 0,\n hostname: settings.hostname || '',\n statisticsInterval: settings.statisticsInterval || 15_000,\n checkDiskInterval: settings.checkDiskInterval || 300_000,\n instanceStartInterval: settings.instanceStartInterval || 2_000,\n compact: settings.compact || false,\n allowShellCommands: settings.allowShellCommands || false,\n memLimitWarn: settings.memLimitWarn || 100,\n memLimitError: settings.memLimitError || 50,\n noChmod: settings.noChmod || false,\n };\n\n this.focusRef = createRef();\n }\n\n componentDidMount(): void {\n this.focusRef.current?.focus();\n }\n\n onChange(): void {\n this.props.onChange({\n memoryLimitMB: this.state.memoryLimitMB,\n hostname: this.state.hostname,\n statisticsInterval: this.state.statisticsInterval,\n checkDiskInterval: this.state.checkDiskInterval,\n noChmod: this.state.noChmod,\n instanceStartInterval: this.state.instanceStartInterval,\n compact: this.state.compact,\n allowShellCommands: this.state.allowShellCommands,\n memLimitWarn: this.state.memLimitWarn,\n memLimitError: this.state.memLimitError,\n });\n }\n\n render(): JSX.Element {\n return (\n <Paper style={styles.paper}>\n <Grid2 style={styles.gridSettings}>\n <Grid2\n container\n direction=\"column\"\n >\n <Grid2>\n <TextField\n variant=\"standard\"\n label={this.props.t('Host name')}\n style={styles.controlItem}\n value={this.state.hostname || this.props.currentHost.replace('system.host.', '')}\n onChange={e => this.setState({ hostname: e.target.value }, () => this.onChange())}\n helperText={this.props.t(\n 'You can change the host name, but be aware, that all instances must be assigned anew',\n )}\n />\n </Grid2>\n <Grid2>\n <TextField\n variant=\"standard\"\n label={this.props.t('Check disk space interval')}\n style={styles.controlItem}\n value={this.state.checkDiskInterval}\n type=\"number\"\n slotProps={{ htmlInput: { min: 1000 } }}\n onChange={e =>\n this.setState({ checkDiskInterval: parseInt(e.target.value, 10) }, () =>\n this.onChange(),\n )\n }\n helperText={this.props.t(\n 'How oft the disk will be checked. Do not set it to low, because it can affect system performance. Value is in ms',\n )}\n />\n </Grid2>\n <Grid2>\n <TextField\n variant=\"standard\"\n label={this.props.t('Instance statistics update interval')}\n style={styles.controlItem}\n value={this.state.statisticsInterval}\n type=\"number\"\n slotProps={{ htmlInput: { min: 5000 } }}\n onChange={e =>\n this.setState({ statisticsInterval: parseInt(e.target.value, 10) }, () =>\n this.onChange(),\n )\n }\n helperText={this.props.t(\n 'How oft the instance statistics will be updated. Used RAM, CPU and so on. Value is in ms',\n )}\n />\n </Grid2>\n <Grid2 style={styles.controlItem}>\n <FormControlLabel\n control={\n <Checkbox\n checked={this.state.compact}\n onChange={e =>\n this.setState({ compact: e.target.checked }, () => this.onChange())\n }\n />\n }\n label={this.props.t('Compact mode')}\n />\n <div>\n {this.props.t(\n 'When enabled adapter instances can run in one or few processes to save RAM usage.',\n )}\n </div>\n </Grid2>\n <Grid2 style={styles.controlItem}>\n <FormControlLabel\n control={\n <Checkbox\n checked={this.state.allowShellCommands}\n onChange={e =>\n this.setState({ allowShellCommands: e.target.checked }, () =>\n this.onChange(),\n )\n }\n />\n }\n label={this.props.t(\"Allow shell's commands\")}\n />\n <div>{this.props.t('Allow execution of sendToHost(\"shell\", \"cli command\")')}</div>\n </Grid2>\n <Grid2>\n <TextField\n variant=\"standard\"\n label={this.props.t('Limit RAM size for controller')}\n style={styles.controlItem}\n value={this.state.memoryLimitMB}\n type=\"number\"\n onChange={e =>\n this.setState({ memoryLimitMB: parseInt(e.target.value, 10) }, () =>\n this.onChange(),\n )\n }\n helperText={this.props.t('MB')}\n />\n </Grid2>\n <Grid2>\n <Grid2\n container\n direction=\"row\"\n style={styles.controlItem}\n >\n <Grid2>\n <TextField\n variant=\"standard\"\n label={this.props.t('Show warning im log if RAM less than')}\n style={styles.RAM}\n value={this.state.memLimitWarn}\n type=\"number\"\n onChange={e =>\n this.setState({ memLimitWarn: parseInt(e.target.value, 10) }, () =>\n this.onChange(),\n )\n }\n helperText={this.props.t('MB')}\n />\n </Grid2>\n <Grid2>\n <TextField\n variant=\"standard\"\n label={this.props.t('Show error in log if RAM less than')}\n style={styles.RAM}\n value={this.state.memLimitError}\n type=\"number\"\n onChange={e =>\n this.setState({ memLimitError: parseInt(e.target.value, 10) }, () =>\n this.onChange(),\n )\n }\n helperText={this.props.t('MB')}\n />\n </Grid2>\n </Grid2>\n </Grid2>\n </Grid2>\n </Grid2>\n </Paper>\n );\n }\n}\n\nexport default withWidth()(BaseSettingsSystem);\n","import React, { createRef, Component, type JSX } from 'react';\n\nimport { Grid2, FormControlLabel, Checkbox, TextField, Paper } from '@mui/material';\n\nimport { type AdminConnection, withWidth, type Translate } from '@iobroker/adapter-react-v5';\n\nconst styles: Record<string, React.CSSProperties> = {\n paper: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n overflow: 'auto',\n padding: 8,\n },\n controlItem: {\n width: 'calc(100% - 16px)',\n marginBottom: 16,\n marginRight: 8,\n marginLeft: 8,\n },\n RAM: {\n width: 400,\n marginRight: 8,\n },\n};\n\nexport interface MultihostSettings {\n enabled?: boolean;\n secure?: boolean;\n password?: string;\n}\n\ninterface BaseSettingsMultihostProps {\n t: Translate;\n onChange: (settings: MultihostSettings) => void;\n settings: MultihostSettings;\n socket: AdminConnection;\n}\n\ninterface BaseSettingsMultihostState {\n enabled: boolean;\n secure: boolean;\n password?: string;\n}\n\nclass BaseSettingsMultihost extends Component<BaseSettingsMultihostProps, BaseSettingsMultihostState> {\n private focusRef: React.RefObject<HTMLInputElement>;\n\n constructor(props: BaseSettingsMultihostProps) {\n super(props);\n\n const settings: MultihostSettings = this.props.settings || {};\n\n this.state = {\n enabled: settings.enabled || false,\n secure: settings.secure || true,\n password: '',\n };\n\n if (settings.password) {\n void this.props.socket\n .decrypt(settings.password)\n .then((plainPass: string) => this.setState({ password: plainPass }));\n }\n\n this.focusRef = createRef();\n }\n\n componentDidMount(): void {\n this.focusRef.current?.focus();\n }\n\n onChange(): void {\n const newState: BaseSettingsMultihostState = {\n enabled: this.state.enabled,\n secure: this.state.secure,\n };\n\n if (this.state.password) {\n void this.props.socket.encrypt(this.state.password).then((encodedPass: string) => {\n newState.password = encodedPass;\n this.props.onChange(newState);\n });\n } else {\n this.props.onChange(newState);\n }\n }\n\n render(): JSX.Element {\n return (\n <Paper style={styles.paper}>\n <form\n style={styles.form}\n noValidate\n autoComplete=\"off\"\n >\n <Grid2 style={styles.gridSettings}>\n <Grid2\n container\n direction=\"column\"\n >\n <Grid2 style={styles.controlItem}>\n <FormControlLabel\n control={\n <Checkbox\n checked={this.state.enabled}\n onChange={e =>\n this.setState({ enabled: e.target.checked }, () => this.onChange())\n }\n />\n }\n label={this.props.t('Allow slave connections')}\n />\n <div>\n {this.props.t(\n 'When activated this host can be discovered by other iobroker installations in your network to become the master of a multihost system.',\n )}\n </div>\n </Grid2>\n <Grid2 style={styles.controlItem}>\n <FormControlLabel\n control={\n <Checkbox\n checked={this.state.secure}\n onChange={e =>\n this.setState({ secure: e.target.checked }, () => this.onChange())\n }\n />\n }\n label={this.props.t('With password')}\n />\n <div>{this.props.t('Ask password by connection establishment')}</div>\n </Grid2>\n {this.state.secure ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n label={this.props.t('Multi-host password')}\n style={styles.controlItem}\n value={this.state.password}\n type=\"password\"\n slotProps={{\n input: {\n autoComplete: 'new-password',\n },\n htmlInput: {\n autoComplete: 'off',\n },\n }}\n autoComplete=\"off\"\n onChange={e =>\n this.setState({ password: e.target.value }, () => this.onChange())\n }\n />\n </Grid2>\n ) : null}\n </Grid2>\n </Grid2>\n </form>\n </Paper>\n );\n }\n}\n\nexport default withWidth()(BaseSettingsMultihost);\n","import React, { createRef, Component, type JSX } from 'react';\n\nimport {\n Grid2,\n InputLabel,\n FormControlLabel,\n Checkbox,\n Select,\n Tooltip,\n TextField,\n FormGroup,\n MenuItem,\n FormHelperText,\n FormControl,\n Paper,\n Switch,\n LinearProgress,\n Box,\n} from '@mui/material';\n\nimport { withWidth, Confirm as DialogConfirm, type IobTheme, type Translate } from '@iobroker/adapter-react-v5';\nimport { type AdminConnection } from '@iobroker/socket-client';\n\nconst styles: Record<string, any> = {\n paper: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n overflow: 'auto',\n padding: 8,\n },\n controlItem: {\n width: 400,\n marginBottom: 16,\n marginRight: 8,\n marginLeft: 8,\n },\n dangerZone: {\n backgroundColor: 'rgba(255, 165, 0, 0.05)',\n border: '2px solid rgba(255, 165, 0)',\n marginBottom: 8,\n },\n dangerZoneHeader: {\n background: 'rgba(255, 165, 0)',\n color: '#FFF',\n paddingLeft: 16,\n paddingTop: 4,\n paddingBottom: 4,\n marginTop: -1,\n marginLeft: -1,\n },\n warning: (theme: IobTheme) => ({\n p: 1,\n fontSize: 14,\n color: theme.palette.mode === 'dark' ? '#ffa500' : '#b17200',\n }),\n};\n\nconst DEFAULT_JSONL_OPTIONS = {\n autoCompress: {\n sizeFactor: 2,\n sizeFactorMinimumSize: 25000,\n },\n throttleFS: {\n intervalMs: 60000,\n maxBufferedCommands: 1000,\n },\n};\n\nexport interface SettingsObjects {\n type?: 'file' | 'jsonl' | 'redis';\n host?: string;\n port?: number;\n pass?: string;\n connectTimeout?: number;\n writeFileInterval?: number;\n dataDir?: string;\n options?: {\n auth_pass: string;\n retry_max_delay: number;\n retry_max_count: number;\n db: number;\n family: number;\n };\n backup?: {\n disabled: boolean;\n files: number;\n hours: number;\n period: number;\n path: string;\n };\n jsonlOptions?: {\n autoCompress: {\n sizeFactor: number;\n sizeFactorMinimumSize: number;\n };\n throttleFS: {\n intervalMs: number;\n maxBufferedCommands: number;\n };\n };\n noFileCache?: boolean;\n}\n\ninterface BaseSettingsObjectsProps {\n t: Translate;\n onChange: (settings: SettingsObjects) => void;\n settings: SettingsObjects;\n currentHost: string;\n socket: AdminConnection;\n}\n\ninterface BaseSettingsObjectsState {\n type: 'file' | 'jsonl' | 'redis';\n host: string;\n port: number | string;\n connectTimeout: number | string;\n writeFileInterval: number | string;\n dataDir: string;\n options_auth_pass: string;\n options_retry_max_delay: number | string;\n options_retry_max_count: number | string;\n options_db: number | string;\n options_family: number | string;\n backup_disabled: boolean;\n backup_files: number | string;\n backup_hours: number | string;\n backup_period: number | string;\n backup_path: string;\n jsonlOptions_autoCompress_sizeFactor: number | string;\n jsonlOptions_autoCompress_sizeFactorMinimumSize: number | string;\n jsonlOptions_throttleFS_intervalMs: number | string;\n jsonlOptions_throttleFS_maxBufferedCommands: number | string;\n textIP: boolean;\n IPs: string[];\n loading: boolean;\n showWarningDialog: boolean;\n toConfirmType: '' | 'file' | 'jsonl' | 'redis';\n originalDBType: 'file' | 'jsonl' | 'redis';\n noFileCache: boolean;\n}\n\nclass BaseSettingsObjects extends Component<BaseSettingsObjectsProps, BaseSettingsObjectsState> {\n private focusRef: React.RefObject<HTMLInputElement>;\n\n constructor(props: BaseSettingsObjectsProps) {\n super(props);\n\n const settings: SettingsObjects = this.props.settings || {};\n settings.options = settings.options || {\n auth_pass: '',\n retry_max_delay: 2000,\n retry_max_count: 19,\n db: 0,\n family: 0,\n };\n settings.backup = settings.backup || {\n disabled: false,\n files: 24,\n hours: 48,\n period: 120,\n path: '',\n };\n settings.jsonlOptions = settings.jsonlOptions || DEFAULT_JSONL_OPTIONS;\n settings.jsonlOptions.autoCompress = settings.jsonlOptions.autoCompress || DEFAULT_JSONL_OPTIONS.autoCompress;\n settings.jsonlOptions.throttleFS = settings.jsonlOptions.throttleFS || DEFAULT_JSONL_OPTIONS.throttleFS;\n\n this.state = {\n type: settings.type || 'file',\n host: Array.isArray(settings.host) ? settings.host.join(',') : settings.host || '127.0.0.1',\n port: settings.port || 9001,\n noFileCache: settings.noFileCache || false,\n dataDir: settings.dataDir || '',\n connectTimeout: settings.connectTimeout || 2000,\n writeFileInterval: settings.writeFileInterval || 5000,\n options_auth_pass: settings.options.auth_pass || settings.pass || '',\n options_retry_max_delay: settings.options.retry_max_delay || 2000,\n options_retry_max_count: settings.options.retry_max_count || 19,\n options_db: settings.options.db || 0,\n options_family: settings.options.family || 0,\n backup_disabled: settings.backup.disabled || false,\n backup_files: settings.backup.files || 24,\n backup_hours: settings.backup.hours || 48,\n backup_period: settings.backup.period || 120,\n backup_path: settings.backup.path || '',\n jsonlOptions_autoCompress_sizeFactor: settings.jsonlOptions.autoCompress.sizeFactor || 2,\n jsonlOptions_autoCompress_sizeFactorMinimumSize:\n settings.jsonlOptions.autoCompress.sizeFactorMinimumSize || 25000,\n jsonlOptions_throttleFS_intervalMs: settings.jsonlOptions.throttleFS.intervalMs || 60000,\n jsonlOptions_throttleFS_maxBufferedCommands: settings.jsonlOptions.throttleFS.maxBufferedCommands || 100,\n textIP:\n Array.isArray(settings.host) ||\n !!(settings.host || '').match(/[^.\\d]/) ||\n (settings.host || '').includes(','),\n\n IPs: ['0.0.0.0', '127.0.0.1'],\n loading: true,\n showWarningDialog: false,\n toConfirmType: '',\n originalDBType: settings.type || 'file',\n };\n\n this.focusRef = createRef();\n }\n\n componentDidMount(): void {\n void this.props.socket.getIpAddresses(this.props.currentHost).then(_IPs => {\n const IPs = [..._IPs];\n if (!IPs.includes('0.0.0.0')) {\n IPs.push('0.0.0.0');\n }\n if (!IPs.includes('127.0.0.1')) {\n IPs.push('127.0.0.1');\n }\n let textIP: boolean = !!this.state.host.match(/[^.\\d]/) || (this.state.host || '').includes(',');\n if (!textIP && !IPs.includes(this.state.host)) {\n textIP = true;\n }\n this.setState(\n { IPs, loading: false, textIP },\n () => this.focusRef.current && this.focusRef.current.focus(),\n );\n });\n }\n\n onChange(): void {\n const settings = {\n type: this.state.type,\n host: this.state.host,\n port: parseInt(this.state.port as string, 10),\n noFileCache: this.state.noFileCache,\n connectTimeout: parseInt(this.state.connectTimeout as string, 10),\n writeFileInterval: parseInt(this.state.writeFileInterval as string, 10),\n dataDir: this.state.dataDir,\n options: {\n auth_pass: this.state.options_auth_pass || null,\n retry_max_delay: parseInt(this.state.options_retry_max_delay as string, 10),\n retry_max_count: parseInt(this.state.options_retry_max_count as string, 10),\n db: parseInt(this.state.options_db as string, 10),\n family: parseInt(this.state.options_family as string, 10),\n },\n backup: {\n disabled: this.state.backup_disabled,\n files: parseInt(this.state.backup_files as string, 10),\n hours: parseInt(this.state.backup_hours as string, 10),\n period: parseInt(this.state.backup_period as string, 10),\n path: this.state.backup_path,\n },\n jsonlOptions: {\n autoCompress: {\n sizeFactor: parseInt(this.state.jsonlOptions_autoCompress_sizeFactor as string, 10),\n sizeFactorMinimumSize: parseInt(\n this.state.jsonlOptions_autoCompress_sizeFactorMinimumSize as string,\n 10,\n ),\n },\n throttleFS: {\n intervalMs: parseInt(this.state.jsonlOptions_throttleFS_intervalMs as string, 10),\n maxBufferedCommands: parseInt(this.state.jsonlOptions_throttleFS_maxBufferedCommands as string, 10),\n },\n },\n };\n\n if (settings.jsonlOptions.autoCompress.sizeFactor < 2) {\n settings.jsonlOptions.autoCompress.sizeFactor = 2;\n }\n\n if (settings.jsonlOptions.autoCompress.sizeFactorMinimumSize < 0) {\n settings.jsonlOptions.autoCompress.sizeFactorMinimumSize = 0;\n }\n\n if (settings.jsonlOptions.throttleFS.intervalMs < 0) {\n settings.jsonlOptions.throttleFS.intervalMs = 0;\n }\n\n if (settings.jsonlOptions.throttleFS.maxBufferedCommands < 0) {\n settings.jsonlOptions.throttleFS.maxBufferedCommands = 0;\n }\n\n this.props.onChange(settings);\n }\n\n renderWarning(): JSX.Element | null {\n if (this.state.showWarningDialog) {\n return (\n <DialogConfirm\n title={this.props.t('Please confirm')}\n text={this.props.t('switch_db_note')}\n onClose={result => {\n if (result) {\n let port;\n\n if (this.state.toConfirmType === 'redis') {\n port = 6379;\n } else {\n port = 9001;\n }\n this.setState(\n { type: this.state.toConfirmType || 'file', showWarningDialog: false, port },\n () => this.onChange(),\n );\n } else {\n this.setState({ showWarningDialog: false });\n }\n }}\n />\n );\n }\n return null;\n }\n\n render(): JSX.Element {\n return (\n <Paper style={styles.paper}>\n {this.state.loading ? <LinearProgress /> : null}\n {this.renderWarning()}\n <Grid2 style={{ ...styles.gridSettings, ...styles.dangerZone }}>\n <h3\n style={styles.dangerZoneHeader}\n title={this.props.t('Invalid settings in these fields could lead to dead host')}\n >\n {this.props.t('Danger zone')}\n </h3>\n <Box\n component=\"p\"\n sx={styles.warning}\n >\n {this.props.t('base_settings_hint')}\n </Box>\n <Grid2\n container\n direction=\"column\"\n >\n <Grid2>\n <Tooltip\n title={this.props.t('switch_db_note')}\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\n <FormControl\n style={styles.controlItem}\n variant=\"standard\"\n >\n <InputLabel>{this.props.t('Type')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.type}\n onChange={e => {\n if (e.target.value !== this.state.originalDBType) {\n this.setState({\n toConfirmType: e.target.value as '' | 'file' | 'jsonl' | 'redis',\n showWarningDialog: true,\n });\n } else {\n let port;\n\n if (e.target.value === 'redis') {\n port = 6379;\n } else {\n port = 9001;\n }\n this.setState({ type: e.target.value, port }, () => this.onChange());\n }\n }}\n >\n <MenuItem value=\"jsonl\">JSON Lines</MenuItem>\n <MenuItem value=\"file\">{this.props.t('File')}</MenuItem>\n <MenuItem value=\"redis\">Redis</MenuItem>\n </Select>\n </FormControl>\n </Tooltip>\n </Grid2>\n\n <Grid2 style={{ paddingLeft: 8 }}>\n <FormControlLabel\n control={\n <Switch\n checked={this.state.textIP}\n onChange={e =>\n this.setState({ textIP: e.target.checked }, () => this.onChange())\n }\n />\n }\n label={this.props.t('IP is domain or more than one address')}\n />\n </Grid2>\n\n <Grid2>\n {this.state.textIP ? (\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.host}\n type=\"text\"\n onChange={e => this.setState({ host: e.target.value }, () => this.onChange())}\n label={this.props.t('Bind IP address')}\n helperText={this.props.t('You can enter more than one address divided by comma')}\n />\n ) : (\n <FormControl\n style={styles.controlItem}\n variant=\"standard\"\n >\n <InputLabel>{this.props.t('Bind IP address')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.host}\n onChange={e => this.setState({ host: e.target.value }, () => this.onChange())}\n >\n {this.state.IPs.map(ip => (\n <MenuItem\n key={ip}\n value={ip}\n >\n {ip === '0.0.0.0' ? `0.0.0.0 [${this.props.t('All addresses')}]` : ip}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n )}\n </Grid2>\n\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.port}\n type=\"number\"\n slotProps={{\n htmlInput: {\n min: 1,\n max: 65535,\n },\n }}\n onChange={e => this.setState({ port: e.target.value }, () => this.onChange())}\n label={this.props.t('Port')}\n />\n </Grid2>\n\n {this.state.type === 'file' || this.state.type === 'jsonl' ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.dataDir}\n helperText={this.props.t('Optional. Always relative to iobroker.js-controller/')}\n onChange={e => this.setState({ dataDir: e.target.value }, () => this.onChange())}\n label={this.props.t('Directory path')}\n />\n </Grid2>\n ) : null}\n\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.options_auth_pass}\n type=\"password\"\n helperText={this.props.t('Optional')}\n slotProps={{\n input: {\n autoComplete: 'new-password',\n },\n htmlInput: {\n autoComplete: 'off',\n },\n }}\n autoComplete=\"off\"\n onChange={e =>\n this.setState({ options_auth_pass: e.target.value }, () => this.onChange())\n }\n label={\n this.state.type === 'redis'\n ? this.props.t('Redis password')\n : this.props.t('Connection password')\n }\n />\n </Grid2>\n </Grid2>\n </Grid2>\n <Grid2 style={styles.gridSettings}>\n <Grid2\n container\n direction=\"column\"\n >\n {this.state.type === 'file' || this.state.type === 'jsonl' ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.connectTimeout}\n helperText={this.props.t('ms')}\n type=\"number\"\n slotProps={{\n htmlInput: {\n min: 200,\n },\n }}\n onChange={e =>\n this.setState({ connectTimeout: e.target.value }, () => this.onChange())\n }\n label={this.props.t('Connect timeout')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'file' || this.state.type === 'jsonl' ? (\n <Grid2>\n <FormControl\n component=\"fieldset\"\n variant=\"standard\"\n style={styles.controlItem}\n >\n <FormGroup>\n <FormControlLabel\n control={\n <Checkbox\n checked={this.state.noFileCache}\n onChange={e =>\n this.setState({ noFileCache: e.target.checked }, () =>\n this.onChange(),\n )\n }\n />\n }\n label={this.props.t('No file cache')}\n />\n </FormGroup>\n <FormHelperText>\n {this.props.t(\n 'Always read files from disk and do not cache them in RAM. Used for debugging.',\n )}\n </FormHelperText>\n </FormControl>\n </Grid2>\n ) : null}\n\n {this.state.type === 'file' ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.writeFileInterval}\n helperText={this.props.t('How often the data from RAM will be saved on disk in ms')}\n type=\"number\"\n slotProps={{\n htmlInput: {\n min: 200,\n },\n }}\n onChange={e =>\n this.setState({ writeFileInterval: e.target.value }, () => this.onChange())\n }\n label={this.props.t('Store file interval')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'redis' ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.options_retry_max_delay}\n type=\"number\"\n helperText={this.props.t('Maximum delay between connection attempts')}\n onChange={e =>\n this.setState({ options_retry_max_delay: e.target.value }, () =>\n this.onChange(),\n )\n }\n label={this.props.t('Retry maximum delay')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'redis' ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.options_retry_max_count}\n type=\"number\"\n helperText={this.props.t('Maximum number of connection retries')}\n onChange={e =>\n this.setState({ options_retry_max_count: e.target.value }, () =>\n this.onChange(),\n )\n }\n label={this.props.t('Retry maximum count')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'redis' ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.options_db}\n type=\"number\"\n helperText={this.props.t('Used for sentinels')}\n onChange={e => this.setState({ options_db: e.target.value }, () => this.onChange())}\n label={this.props.t('DB number')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'redis' ? (\n <Grid2>\n <FormControl\n style={styles.controlItem}\n variant=\"standard\"\n >\n <InputLabel>{this.props.t('Family number')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.options_family}\n onChange={e =>\n this.setState({ options_family: e.target.value }, () => this.onChange())\n }\n >\n <MenuItem value={0}>auto</MenuItem>\n <MenuItem value={4}>IPv4</MenuItem>\n <MenuItem value={6}>IPv6</MenuItem>\n </Select>\n <FormHelperText>{this.props.t('Used for sentinels')}</FormHelperText>\n </FormControl>\n </Grid2>\n ) : null}\n\n {this.state.type === 'jsonl' ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.jsonlOptions_autoCompress_sizeFactor}\n type=\"number\"\n slotProps={{ htmlInput: { min: 2 } }}\n helperText={this.props.t(\n 'The JSONL DB is append-only and will contain unnecessary entries after a while.',\n )}\n onChange={e =>\n this.setState({ jsonlOptions_autoCompress_sizeFactor: e.target.value }, () =>\n this.onChange(),\n )\n }\n label={this.props.t('Auto-compress size factor')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'jsonl' ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.jsonlOptions_autoCompress_sizeFactorMinimumSize}\n type=\"number\"\n slotProps={{ htmlInput: { min: 0 } }}\n helperText={this.props.t(\n 'It will be compressed when the uncompressed size is >= size * sizeFactor AND >= sizeFactorMinimumSize',\n )}\n onChange={e =>\n this.setState(\n { jsonlOptions_autoCompress_sizeFactorMinimumSize: e.target.value },\n () => this.onChange(),\n )\n }\n label={this.props.t('Auto-compress size factor minimum size')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'jsonl' ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.jsonlOptions_throttleFS_intervalMs}\n type=\"number\"\n slotProps={{ htmlInput: { min: 0 } }}\n helperText={this.props.t(\n 'Write to the database file no more than every X milliseconds',\n )}\n onChange={e =>\n this.setState({ jsonlOptions_throttleFS_intervalMs: e.target.value }, () =>\n this.onChange(),\n )\n }\n label={this.props.t('Minimal write interval')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'jsonl' ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.jsonlOptions_throttleFS_maxBufferedCommands}\n type=\"number\"\n slotProps={{ htmlInput: { min: 0 } }}\n helperText={this.props.t(\n 'Force writing after this many changes have been buffered. This reduces memory consumption and data loss in case of a crash',\n )}\n onChange={e =>\n this.setState(\n { jsonlOptions_throttleFS_maxBufferedCommands: e.target.value },\n () => this.onChange(),\n )\n }\n label={this.props.t('Maximum changes before write')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'file' || this.state.type === 'jsonl' ? (\n <Grid2>\n <FormControl\n component=\"fieldset\"\n variant=\"standard\"\n style={styles.controlItem}\n >\n <FormGroup>\n <FormControlLabel\n control={\n <Checkbox\n checked={this.state.backup_disabled}\n onChange={e =>\n this.setState({ backup_disabled: e.target.checked }, () =>\n this.onChange(),\n )\n }\n />\n }\n label={this.props.t('No on-the-fly backup')}\n />\n </FormGroup>\n <FormHelperText>\n {this.props.t('By every write the backup of object.json will be created.')}\n </FormHelperText>\n </FormControl>\n </Grid2>\n ) : null}\n\n {(this.state.type === 'file' || this.state.type === 'jsonl') && !this.state.backup_disabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.backup_files}\n type=\"number\"\n helperText={this.props.t(\n 'Minimal number of backup files, after the deletion will be executed according to the backup time settings',\n )}\n onChange={e =>\n this.setState({ backup_files: e.target.value }, () => this.onChange())\n }\n label={this.props.t('Number of files')}\n />\n </Grid2>\n ) : null}\n\n {(this.state.type === 'file' || this.state.type === 'jsonl') && !this.state.backup_disabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.backup_hours}\n type=\"number\"\n helperText={this.props.t(\n 'All backups older than these hours will be deleted, but only if the number of files is greater than of the files number',\n )}\n onChange={e =>\n this.setState({ backup_hours: e.target.value }, () => this.onChange())\n }\n label={this.props.t('Backup hours')}\n />\n </Grid2>\n ) : null}\n\n {(this.state.type === 'file' || this.state.type === 'jsonl') && !this.state.backup_disabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.backup_period}\n type=\"number\"\n helperText={this.props.t(\n 'By default the backup is every 2 hours. Time is in minutes. To disable backup set the value to 0',\n )}\n onChange={e =>\n this.setState({ backup_period: e.target.value }, () => this.onChange())\n }\n label={this.props.t('How often')}\n />\n </Grid2>\n ) : null}\n\n {(this.state.type === 'file' || this.state.type === 'jsonl') && !this.state.backup_disabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.backup_path}\n helperText={this.props.t(\n 'Absolute path to backup directory or empty to backup in data directory. Leave it empty for default storage place.',\n )}\n onChange={e =>\n this.setState({ backup_path: e.target.value }, () => this.onChange())\n }\n label={this.props.t('Path')}\n />\n </Grid2>\n ) : null}\n </Grid2>\n </Grid2>\n </Paper>\n );\n }\n}\n\nexport default withWidth()(BaseSettingsObjects);\n","import React, { createRef, Component, type JSX } from 'react';\n\nimport {\n Grid2,\n FormControlLabel,\n Checkbox,\n TextField,\n Paper,\n FormControl,\n InputLabel,\n Select,\n MenuItem,\n Tooltip,\n FormHelperText,\n FormGroup,\n Switch,\n LinearProgress,\n Box,\n} from '@mui/material';\n\nimport { Confirm as DialogConfirm, withWidth, type IobTheme, type Translate } from '@iobroker/adapter-react-v5';\n\nimport { type AdminConnection } from '@iobroker/socket-client';\n\nconst styles: Record<string, any> = {\n paper: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n overflow: 'auto',\n padding: 8,\n },\n controlItem: {\n width: 400,\n marginBottom: 16,\n marginRight: 8,\n marginLeft: 8,\n },\n dangerZone: {\n backgroundColor: 'rgba(255, 165, 0, 0.05)',\n border: '2px solid rgba(255, 165, 0)',\n marginBottom: 8,\n },\n dangerZoneHeader: {\n background: 'rgba(255, 165, 0)',\n color: '#FFF',\n paddingLeft: 16,\n paddingTop: 4,\n paddingBottom: 4,\n marginTop: -1,\n marginLeft: -1,\n },\n warning: (theme: IobTheme) => ({\n p: 1,\n fontSize: 14,\n color: theme.palette.mode === 'dark' ? '#ffa500' : '#b17200',\n }),\n};\n\nconst DEFAULT_JSONL_OPTIONS = {\n autoCompress: {\n sizeFactor: 2,\n sizeFactorMinimumSize: 25000,\n },\n throttleFS: {\n intervalMs: 60000,\n maxBufferedCommands: 1000,\n },\n};\n\nexport interface SettingsStates {\n type?: 'file' | 'jsonl' | 'redis';\n host?: string;\n port?: number;\n pass?: string;\n connectTimeout?: number;\n writeFileInterval?: number;\n dataDir?: string;\n options?: {\n auth_pass: string;\n retry_max_delay: number;\n retry_max_count: number;\n db: number;\n family: number;\n };\n backup?: {\n disabled: boolean;\n files: number;\n hours: number;\n period: number;\n path: string;\n };\n jsonlOptions?: {\n autoCompress: {\n sizeFactor: number;\n sizeFactorMinimumSize: number;\n };\n throttleFS: {\n intervalMs: number;\n maxBufferedCommands: number;\n };\n };\n noFileCache?: boolean;\n}\n\ninterface BaseSettingsStatesProps {\n t: Translate;\n onChange: (settings: SettingsStates) => void;\n settings: SettingsStates;\n currentHost: string;\n socket: AdminConnection;\n}\n\ninterface BaseSettingsStatesState {\n type: 'file' | 'jsonl' | 'redis';\n host: string;\n port: number | string;\n connectTimeout: number | string;\n writeFileInterval: number | string;\n dataDir: string;\n options_auth_pass: string;\n options_retry_max_delay: number | string;\n options_retry_max_count: number | string;\n options_db: number | string;\n options_family: number | string;\n backup_disabled: boolean;\n backup_files: number | string;\n backup_hours: number | string;\n backup_period: number | string;\n backup_path: string;\n jsonlOptions_autoCompress_sizeFactor: number | string;\n jsonlOptions_autoCompress_sizeFactorMinimumSize: number | string;\n jsonlOptions_throttleFS_intervalMs: number | string;\n jsonlOptions_throttleFS_maxBufferedCommands: number | string;\n textIP: boolean;\n IPs: string[];\n loading: boolean;\n showWarningDialog: boolean;\n toConfirmType: '' | 'file' | 'jsonl' | 'redis';\n originalDBType: 'file' | 'jsonl' | 'redis';\n noFileCache: boolean;\n}\n\nclass BaseSettingsStates extends Component<BaseSettingsStatesProps, BaseSettingsStatesState> {\n private focusRef: React.RefObject<HTMLInputElement>;\n\n constructor(props: BaseSettingsStatesProps) {\n super(props);\n\n const settings: SettingsStates = this.props.settings || {};\n settings.options = settings.options || {\n auth_pass: '',\n retry_max_delay: 2000,\n retry_max_count: 19,\n db: 0,\n family: 0,\n };\n settings.backup = settings.backup || {\n disabled: false,\n files: 24,\n hours: 48,\n period: 120,\n path: '',\n };\n settings.jsonlOptions = settings.jsonlOptions || DEFAULT_JSONL_OPTIONS;\n settings.jsonlOptions.autoCompress = settings.jsonlOptions.autoCompress || DEFAULT_JSONL_OPTIONS.autoCompress;\n settings.jsonlOptions.throttleFS = settings.jsonlOptions.throttleFS || DEFAULT_JSONL_OPTIONS.throttleFS;\n\n this.state = {\n type: settings.type || 'file',\n host: Array.isArray(settings.host) ? settings.host.join(',') : settings.host || '127.0.0.1',\n port: settings.port || 9000,\n connectTimeout: settings.connectTimeout || 2000,\n writeFileInterval: settings.writeFileInterval || 5000,\n dataDir: settings.dataDir || '',\n options_auth_pass: settings.options.auth_pass || settings.pass || '',\n options_retry_max_delay: settings.options.retry_max_delay || 2000,\n options_retry_max_count: settings.options.retry_max_count || 19,\n options_db: settings.options.db || 0,\n options_family: settings.options.family || 0,\n backup_disabled: settings.backup.disabled || false,\n backup_files: settings.backup.files || 24,\n backup_hours: settings.backup.hours || 48,\n backup_period: settings.backup.period || 120,\n backup_path: settings.backup.path || '',\n jsonlOptions_autoCompress_sizeFactor: settings.jsonlOptions.autoCompress.sizeFactor || 2,\n jsonlOptions_autoCompress_sizeFactorMinimumSize:\n settings.jsonlOptions.autoCompress.sizeFactorMinimumSize || 25000,\n jsonlOptions_throttleFS_intervalMs: settings.jsonlOptions.throttleFS.intervalMs || 60000,\n jsonlOptions_throttleFS_maxBufferedCommands: settings.jsonlOptions.throttleFS.maxBufferedCommands || 100,\n textIP:\n Array.isArray(settings.host) ||\n !!(settings.host || '').match(/[^.\\d]/) ||\n (settings.host || '').includes(','),\n\n IPs: ['0.0.0.0', '127.0.0.1'],\n loading: true,\n showWarningDialog: false,\n toConfirmType: '',\n originalDBType: settings.type || 'file',\n noFileCache: settings.noFileCache || false,\n };\n\n this.focusRef = createRef();\n }\n\n componentDidMount(): void {\n void this.props.socket.getIpAddresses(this.props.currentHost).then(_IPs => {\n const IPs = [..._IPs];\n if (!IPs.includes('0.0.0.0')) {\n IPs.push('0.0.0.0');\n }\n if (!IPs.includes('127.0.0.1')) {\n IPs.push('127.0.0.1');\n }\n let textIP: boolean = !!this.state.host.match(/[^.\\d]/) || (this.state.host || '').includes(',');\n if (!textIP && !IPs.includes(this.state.host)) {\n textIP = true;\n }\n this.setState(\n { IPs, loading: false, textIP },\n () => this.focusRef.current && this.focusRef.current.focus(),\n );\n });\n }\n\n onChange(): void {\n const settings = {\n type: this.state.type,\n host: this.state.host,\n port: parseInt(this.state.port as string, 10),\n noFileCache: this.state.noFileCache,\n connectTimeout: parseInt(this.state.connectTimeout as string, 10),\n writeFileInterval: parseInt(this.state.writeFileInterval as string, 10),\n dataDir: this.state.dataDir,\n options: {\n auth_pass: this.state.options_auth_pass || null,\n retry_max_delay: parseInt(this.state.options_retry_max_delay as string, 10),\n retry_max_count: parseInt(this.state.options_retry_max_count as string, 10),\n db: parseInt(this.state.options_db as string, 10),\n family: parseInt(this.state.options_family as string, 10),\n },\n backup: {\n disabled: this.state.backup_disabled,\n files: parseInt(this.state.backup_files as string, 10),\n hours: parseInt(this.state.backup_hours as string, 10),\n period: parseInt(this.state.backup_period as string, 10),\n path: this.state.backup_path,\n },\n jsonlOptions: {\n autoCompress: {\n sizeFactor: parseInt(this.state.jsonlOptions_autoCompress_sizeFactor as string, 10),\n sizeFactorMinimumSize: parseInt(\n this.state.jsonlOptions_autoCompress_sizeFactorMinimumSize as string,\n 10,\n ),\n },\n throttleFS: {\n intervalMs: parseInt(this.state.jsonlOptions_throttleFS_intervalMs as string, 10),\n maxBufferedCommands: parseInt(this.state.jsonlOptions_throttleFS_maxBufferedCommands as string, 10),\n },\n },\n };\n\n if (settings.jsonlOptions.autoCompress.sizeFactor < 2) {\n settings.jsonlOptions.autoCompress.sizeFactor = 2;\n }\n\n if (settings.jsonlOptions.autoCompress.sizeFactorMinimumSize < 0) {\n settings.jsonlOptions.autoCompress.sizeFactorMinimumSize = 0;\n }\n\n if (settings.jsonlOptions.throttleFS.intervalMs < 0) {\n settings.jsonlOptions.throttleFS.intervalMs = 0;\n }\n\n if (settings.jsonlOptions.throttleFS.maxBufferedCommands < 0) {\n settings.jsonlOptions.throttleFS.maxBufferedCommands = 0;\n }\n\n this.props.onChange(settings);\n }\n\n renderWarning(): JSX.Element | null {\n if (this.state.showWarningDialog) {\n return (\n <DialogConfirm\n title={this.props.t('Please confirm')}\n text={this.props.t('switch_db_note')}\n onClose={result => {\n if (result) {\n let port;\n\n if (this.state.toConfirmType === 'redis') {\n port = 6379;\n } else {\n port = 9000;\n }\n this.setState(\n { type: this.state.toConfirmType || 'file', showWarningDialog: false, port },\n () => this.onChange(),\n );\n } else {\n this.setState({ showWarningDialog: false });\n }\n }}\n />\n );\n }\n return null;\n }\n\n render(): JSX.Element {\n return (\n <Paper style={styles.paper}>\n {this.state.loading ? <LinearProgress /> : null}\n {this.renderWarning()}\n <Grid2 style={{ ...styles.gridSettings, ...styles.dangerZone }}>\n <h3\n style={styles.dangerZoneHeader}\n title={this.props.t('Invalid settings in these fields could lead to dead host')}\n >\n {this.props.t('Danger zone')}\n </h3>\n <Box\n component=\"p\"\n sx={styles.warning}\n >\n {this.props.t('base_settings_hint')}\n </Box>\n <Grid2\n container\n direction=\"column\"\n >\n <Grid2>\n <Tooltip\n title={this.props.t('switch_db_note')}\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\n <FormControl\n style={styles.controlItem}\n variant=\"standard\"\n >\n <InputLabel>{this.props.t('Type')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.type}\n onChange={e => {\n if (e.target.value !== this.state.originalDBType) {\n this.setState({\n toConfirmType: e.target.value as '' | 'file' | 'jsonl' | 'redis',\n showWarningDialog: true,\n });\n } else {\n let port;\n\n if (e.target.value === 'redis') {\n port = 6379;\n } else {\n port = 9000;\n }\n this.setState({ type: e.target.value, port }, () => this.onChange());\n }\n }}\n >\n <MenuItem value=\"jsonl\">JSON Lines</MenuItem>\n <MenuItem value=\"file\">{this.props.t('File')}</MenuItem>\n <MenuItem value=\"redis\">Redis</MenuItem>\n </Select>\n </FormControl>\n </Tooltip>\n </Grid2>\n\n <Grid2 style={{ paddingLeft: 8 }}>\n <FormControlLabel\n control={\n <Switch\n checked={this.state.textIP}\n onChange={e =>\n this.setState({ textIP: e.target.checked }, () => this.onChange())\n }\n />\n }\n label={this.props.t('IP is domain or more than one address')}\n />\n </Grid2>\n\n <Grid2>\n {this.state.textIP ? (\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.host}\n type=\"text\"\n onChange={e => this.setState({ host: e.target.value }, () => this.onChange())}\n label={this.props.t('Bind IP address')}\n helperText={this.props.t('You can enter more than one address divided by comma')}\n />\n ) : (\n <FormControl\n style={styles.controlItem}\n variant=\"standard\"\n >\n <InputLabel>{this.props.t('Bind IP address')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.host}\n onChange={e => this.setState({ host: e.target.value }, () => this.onChange())}\n >\n {this.state.IPs.map(ip => (\n <MenuItem\n key={ip}\n value={ip}\n >\n {ip === '0.0.0.0' ? `0.0.0.0 [${this.props.t('All addresses')}]` : ip}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n )}\n </Grid2>\n\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.port}\n type=\"number\"\n slotProps={{ htmlInput: { min: 1, max: 65535 } }}\n onChange={e => this.setState({ port: e.target.value }, () => this.onChange())}\n label={this.props.t('Port')}\n />\n </Grid2>\n\n {this.state.type === 'file' ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.dataDir}\n helperText={this.props.t('Optional. Always relative to iobroker.js-controller/')}\n onChange={e => this.setState({ dataDir: e.target.value }, () => this.onChange())}\n label={this.props.t('Directory path')}\n />\n </Grid2>\n ) : null}\n\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.options_auth_pass}\n type=\"password\"\n helperText={this.props.t('Optional')}\n slotProps={{\n input: {\n autoComplete: 'new-password',\n },\n htmlInput: {\n autoComplete: 'off',\n },\n }}\n autoComplete=\"off\"\n onChange={e =>\n this.setState({ options_auth_pass: e.target.value }, () => this.onChange())\n }\n label={\n this.state.type === 'redis'\n ? this.props.t('Redis password')\n : this.props.t('Connection password')\n }\n />\n </Grid2>\n </Grid2>\n </Grid2>\n <Grid2 style={styles.gridSettings}>\n <Grid2\n container\n direction=\"column\"\n >\n {this.state.type === 'file' || this.state.type === 'jsonl' ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.connectTimeout}\n helperText={this.props.t('ms')}\n type=\"number\"\n slotProps={{ htmlInput: { min: 200 } }}\n onChange={e =>\n this.setState({ connectTimeout: e.target.value }, () => this.onChange())\n }\n label={this.props.t('Connect timeout')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'file' ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.writeFileInterval}\n helperText={this.props.t('How often the data from RAM will be saved on disk in ms')}\n type=\"number\"\n slotProps={{ htmlInput: { min: 200 } }}\n onChange={e =>\n this.setState({ writeFileInterval: e.target.value }, () => this.onChange())\n }\n label={this.props.t('Store file interval')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'redis' ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.options_retry_max_delay}\n type=\"number\"\n helperText={this.props.t('Maximum delay between connection attempts')}\n onChange={e =>\n this.setState({ options_retry_max_delay: e.target.value }, () =>\n this.onChange(),\n )\n }\n label={this.props.t('Retry maximum delay')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'redis' ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.options_retry_max_count}\n type=\"number\"\n helperText={this.props.t('Maximum number of connection retries')}\n onChange={e =>\n this.setState({ options_retry_max_count: e.target.value }, () =>\n this.onChange(),\n )\n }\n label={this.props.t('Retry maximum count')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'redis' ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.options_db}\n type=\"number\"\n helperText={this.props.t('Used for sentinels')}\n onChange={e => this.setState({ options_db: e.target.value }, () => this.onChange())}\n label={this.props.t('DB number')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'redis' ? (\n <Grid2>\n <FormControl\n style={styles.controlItem}\n variant=\"standard\"\n >\n <InputLabel>{this.props.t('Family number')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.options_family}\n onChange={e =>\n this.setState({ options_family: e.target.value }, () => this.onChange())\n }\n >\n <MenuItem value={0}>auto</MenuItem>\n <MenuItem value={4}>IPv4</MenuItem>\n <MenuItem value={6}>IPv6</MenuItem>\n </Select>\n <FormHelperText>{this.props.t('Used for sentinels')}</FormHelperText>\n </FormControl>\n </Grid2>\n ) : null}\n\n {this.state.type === 'jsonl' ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.jsonlOptions_autoCompress_sizeFactor}\n type=\"number\"\n slotProps={{ htmlInput: { min: 2 } }}\n helperText={this.props.t(\n 'The JSONL DB is append-only and will contain unnecessary entries after a while.',\n )}\n onChange={e =>\n this.setState({ jsonlOptions_autoCompress_sizeFactor: e.target.value }, () =>\n this.onChange(),\n )\n }\n label={this.props.t('Auto-compress size factor')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'jsonl' ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.jsonlOptions_autoCompress_sizeFactorMinimumSize}\n type=\"number\"\n slotProps={{ htmlInput: { min: 0 } }}\n helperText={this.props.t(\n 'It will be compressed when the uncompressed size is >= size * sizeFactor AND >= sizeFactorMinimumSize',\n )}\n onChange={e =>\n this.setState(\n { jsonlOptions_autoCompress_sizeFactorMinimumSize: e.target.value },\n () => this.onChange(),\n )\n }\n label={this.props.t('Auto-compress size factor minimum size')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'jsonl' ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.jsonlOptions_throttleFS_intervalMs}\n type=\"number\"\n slotProps={{ htmlInput: { min: 0 } }}\n helperText={this.props.t(\n 'Write to the database file no more than every X milliseconds',\n )}\n onChange={e =>\n this.setState({ jsonlOptions_throttleFS_intervalMs: e.target.value }, () =>\n this.onChange(),\n )\n }\n label={this.props.t('Minimal write interval')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'jsonl' ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.jsonlOptions_throttleFS_maxBufferedCommands}\n type=\"number\"\n slotProps={{ htmlInput: { min: 0 } }}\n helperText={this.props.t(\n 'Force writing after this many changes have been buffered. This reduces memory consumption and data loss in case of a crash',\n )}\n onChange={e =>\n this.setState(\n { jsonlOptions_throttleFS_maxBufferedCommands: e.target.value },\n () => this.onChange(),\n )\n }\n label={this.props.t('Maximum changes before write')}\n />\n </Grid2>\n ) : null}\n\n {this.state.type === 'file' || this.state.type === 'jsonl' ? (\n <Grid2>\n <FormControl\n component=\"fieldset\"\n style={styles.controlItem}\n variant=\"standard\"\n >\n <FormGroup>\n <FormControlLabel\n control={\n <Checkbox\n checked={this.state.backup_disabled}\n onChange={e =>\n this.setState({ backup_disabled: e.target.checked }, () =>\n this.onChange(),\n )\n }\n />\n }\n label={this.props.t('No on-the-fly backup')}\n />\n </FormGroup>\n <FormHelperText>\n {this.props.t('By every write the backup of object.json will be created.')}\n </FormHelperText>\n </FormControl>\n </Grid2>\n ) : null}\n\n {(this.state.type === 'file' || this.state.type === 'jsonl') && !this.state.backup_disabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.backup_files}\n type=\"number\"\n helperText={this.props.t(\n 'Minimal number of backup files, after the deletion will be executed according to the backup time settings',\n )}\n onChange={e =>\n this.setState({ backup_files: e.target.value }, () => this.onChange())\n }\n label={this.props.t('Number of files')}\n />\n </Grid2>\n ) : null}\n\n {(this.state.type === 'file' || this.state.type === 'jsonl') && !this.state.backup_disabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.backup_hours}\n type=\"number\"\n helperText={this.props.t(\n 'All backups older than these hours will be deleted, but only if the number of files is greater than of the files number',\n )}\n onChange={e =>\n this.setState({ backup_hours: e.target.value }, () => this.onChange())\n }\n label={this.props.t('Backup hours')}\n />\n </Grid2>\n ) : null}\n\n {(this.state.type === 'file' || this.state.type === 'jsonl') && !this.state.backup_disabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.backup_period}\n type=\"number\"\n helperText={this.props.t(\n 'By default the backup is every 2 hours. Time is in minutes. To disable backup set the value to 0',\n )}\n onChange={e =>\n this.setState({ backup_period: e.target.value }, () => this.onChange())\n }\n label={this.props.t('How often')}\n />\n </Grid2>\n ) : null}\n\n {(this.state.type === 'file' || this.state.type === 'jsonl') && !this.state.backup_disabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.backup_path}\n helperText={this.props.t(\n 'Absolute path to backup directory or empty to backup in data directory. Leave it empty for default storage place.',\n )}\n onChange={e =>\n this.setState({ backup_path: e.target.value }, () => this.onChange())\n }\n label={this.props.t('Path')}\n />\n </Grid2>\n ) : null}\n </Grid2>\n </Grid2>\n </Paper>\n );\n }\n}\n\nexport default withWidth()(BaseSettingsStates);\n","import React, { createRef, Component, type JSX } from 'react';\n\nimport {\n Grid2,\n InputLabel,\n FormControlLabel,\n Checkbox,\n Select,\n TextField,\n FormHelperText,\n Button,\n MenuItem,\n Toolbar,\n FormControl,\n Paper,\n Accordion,\n AccordionDetails,\n AccordionSummary,\n Typography,\n Fab,\n} from '@mui/material';\n\n// Icons\nimport {\n ExpandMore as ExpandMoreIcon,\n Add as IconPlus,\n Delete as IconDelete,\n Language as IconHttp,\n InsertDriveFile as IconFile,\n Computer as IconSyslog,\n Send as IconStream,\n} from '@mui/icons-material';\nimport { withWidth, type IobTheme, type Translate } from '@iobroker/adapter-react-v5';\nimport IconSeq from '../../assets/seq.png';\n\nconst styles: Record<string, any> = {\n paper: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n overflow: 'hidden',\n padding: 8,\n },\n gridSettings: (theme: IobTheme) => ({\n height: `calc(100% - ${theme.mixins.toolbar.minHeight}px)`,\n width: '100%',\n overflow: 'auto',\n }),\n controlItem: {\n width: 400,\n marginBottom: 16,\n marginRight: 8,\n marginLeft: 8,\n },\n delButton: {\n position: 'absolute',\n top: 2,\n right: 48,\n },\n addButton: {\n marginRight: 8,\n },\n buttonIcon: {\n height: 24,\n },\n headingIcon: {\n height: 24,\n marginRight: 8,\n },\n};\n\ninterface TransportSettings {\n type: string;\n enabled: boolean;\n level?: string;\n host?: string;\n port?: number | string;\n protocol?: string;\n path?: string;\n facility?: string;\n localhost?: string;\n sysLogType?: string;\n app_name?: string;\n eol?: string;\n filename?: string;\n fileext?: string;\n maxSize?: number | string;\n maxFiles?: number | string;\n stream?: string;\n silent?: boolean;\n serverUrl?: string;\n apiKey?: string;\n auth?: string;\n ssl?: boolean;\n}\n\nexport interface SettingsLog {\n transport?: Record<string, TransportSettings>;\n level?: string;\n maxDays?: number;\n noStdout?: boolean;\n}\n\ninterface BaseSettingsLogProps {\n t: Translate;\n onChange: (settings: SettingsLog) => void;\n settings: SettingsLog;\n}\n\ninterface BaseSettingsLogState {\n level: string;\n maxDays: number | string;\n noStdout: boolean;\n transport: Record<string, TransportSettings>;\n expanded: string[];\n}\n\nclass BaseSettingsLog extends Component<BaseSettingsLogProps, BaseSettingsLogState> {\n private focusRef: React.RefObject<HTMLInputElement>;\n\n constructor(props: BaseSettingsLogProps) {\n super(props);\n\n const settings: SettingsLog = this.props.settings || {};\n settings.transport = settings.transport || {};\n Object.keys(settings.transport).forEach(id => {\n if (settings.transport[id].type === 'file') {\n const multiplier =\n typeof settings.transport[id].maxSize === 'string'\n ? settings.transport[id].maxSize.includes('k')\n ? 0.1\n : settings.transport[id].maxSize.includes('g')\n ? 10\n : 1\n : 1;\n settings.transport[id].maxSize =\n (parseInt(settings.transport[id].maxSize as string, 10) || 0) * multiplier;\n settings.transport[id].level = settings.transport[id].level || '';\n settings.transport[id].maxFiles = settings.transport[id].maxFiles || 0;\n } else if (settings.transport[id].type === 'syslog') {\n settings.transport[id].level = settings.transport[id].level || '';\n settings.transport[id].host = settings.transport[id].host || '';\n settings.transport[id].port = settings.transport[id].port || 0;\n settings.transport[id].path = settings.transport[id].path || '';\n settings.transport[id].facility = settings.transport[id].facility || '';\n settings.transport[id].sysLogType = settings.transport[id].sysLogType || '';\n settings.transport[id].app_name = settings.transport[id].app_name || '';\n settings.transport[id].eol = settings.transport[id].eol || '';\n } else if (settings.transport[id].type === 'http') {\n settings.transport[id].level = settings.transport[id].level || '';\n settings.transport[id].host = settings.transport[id].host || '';\n settings.transport[id].port = settings.transport[id].port || 0;\n settings.transport[id].path = settings.transport[id].path || '/';\n settings.transport[id].auth = settings.transport[id].auth || 'None';\n settings.transport[id].ssl = settings.transport[id].ssl || false;\n } else if (settings.transport[id].type === 'stream') {\n settings.transport[id].stream = settings.transport[id].stream || '';\n settings.transport[id].level = settings.transport[id].level || '';\n settings.transport[id].silent = settings.transport[id].silent || false;\n settings.transport[id].eol = settings.transport[id].eol || '';\n } else if (settings.transport[id].type === 'seq') {\n settings.transport[id].level = settings.transport[id].level || '';\n settings.transport[id].serverUrl = settings.transport[id].serverUrl || '';\n settings.transport[id].apiKey = settings.transport[id].apiKey || '';\n settings.transport[id].eol = settings.transport[id].eol || '';\n }\n });\n\n this.state = {\n level: settings.level || 'info',\n maxDays: settings.maxDays || 7,\n noStdout: settings.noStdout || true,\n transport: settings.transport || {},\n expanded: [],\n };\n\n this.focusRef = createRef();\n }\n\n componentDidMount(): void {\n this.focusRef.current?.focus();\n }\n\n onChange(): void {\n const settings: SettingsLog = {\n level: this.state.level,\n maxDays: parseInt(this.state.maxDays as string, 10),\n noStdout: this.state.noStdout,\n transport: {},\n };\n\n Object.keys(this.state.transport).forEach(id => {\n settings.transport[id] = JSON.parse(JSON.stringify(this.state.transport[id])) as TransportSettings;\n\n if (this.state.transport[id].type === 'file') {\n settings.transport[id].maxSize = parseInt(settings.transport[id].maxSize as string, 10) || null;\n if (settings.transport[id].maxSize) {\n // 'k', 'm', or 'g'\n settings.transport[id].maxSize = `${settings.transport[id].maxSize.toString()}m`;\n }\n settings.transport[id].maxFiles = parseInt(settings.transport[id].maxFiles as string, 10) || null;\n } else if (this.state.transport[id].type === 'syslog') {\n if (!settings.transport[id].port) {\n delete settings.transport[id].port;\n }\n if (!settings.transport[id].path) {\n delete settings.transport[id].path;\n }\n if (!settings.transport[id].sysLogType) {\n delete settings.transport[id].sysLogType;\n }\n if (!settings.transport[id].app_name) {\n delete settings.transport[id].app_name;\n }\n if (!settings.transport[id].eol) {\n delete settings.transport[id].eol;\n }\n } else if (this.state.transport[id].type === 'http') {\n settings.transport[id].host = settings.transport[id].host || '';\n settings.transport[id].port = parseInt(settings.transport[id].port as string, 10) || 80;\n settings.transport[id].path = settings.transport[id].path || '/';\n settings.transport[id].auth = settings.transport[id].auth || '';\n settings.transport[id].ssl = settings.transport[id].ssl || false;\n } else if (this.state.transport[id].type === 'stream') {\n settings.transport[id].stream = settings.transport[id].stream || '';\n settings.transport[id].level = settings.transport[id].level || 'info';\n settings.transport[id].silent = settings.transport[id].silent || false;\n settings.transport[id].eol = settings.transport[id].eol || '';\n }\n });\n\n this.props.onChange(settings);\n }\n\n onDelete(id: string): void {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n delete transport[id];\n this.setState({ transport }, () => this.onChange());\n }\n\n renderEnabled(name: string): JSX.Element {\n return (\n <Grid2>\n <FormControlLabel\n style={styles.controlItem}\n control={\n <Checkbox\n checked={this.state.transport[name].enabled}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].enabled = e.target.checked;\n this.setState({ transport }, () => this.onChange());\n }}\n />\n }\n label={this.props.t('Enabled')}\n />\n </Grid2>\n );\n }\n\n renderLogLevel(name: string): JSX.Element | null {\n return this.state.transport[name].enabled ? (\n <Grid2>\n <FormControl\n style={styles.controlItem}\n variant=\"standard\"\n >\n <InputLabel>{this.props.t('Level')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.transport[name].level || '_'}\n renderValue={() => this.state.transport[name].level || this.props.t('default')}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].level = e.target.value === '_' ? '' : e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n >\n <MenuItem value=\"_\">{this.props.t('default')}</MenuItem>\n <MenuItem value=\"silly\">silly</MenuItem>\n <MenuItem value=\"debug\">debug</MenuItem>\n <MenuItem value=\"info\">info</MenuItem>\n <MenuItem value=\"warn\">warn</MenuItem>\n <MenuItem value=\"error\">error</MenuItem>\n </Select>\n <FormHelperText>\n {this.props.t(\n 'Level of messages that this transport should log (default: level set on parent logger)',\n )}\n </FormHelperText>\n </FormControl>\n </Grid2>\n ) : null;\n }\n\n renderSyslog(name: string): JSX.Element {\n return (\n <Accordion\n key={name}\n expanded={this.state.expanded.includes(name)}\n onChange={() => {\n const expanded = [...this.state.expanded];\n const pos = expanded.indexOf(name);\n if (pos === -1) {\n expanded.push(name);\n } else {\n expanded.splice(pos, 1);\n }\n\n this.setState({ expanded });\n }}\n >\n <AccordionSummary\n expandIcon={<ExpandMoreIcon />}\n style={{ position: 'relative', background: 'rgba(128, 128, 128, 0.3)' }}\n >\n <IconSyslog style={styles.headingIcon} />\n <Typography style={styles.heading}>{name}</Typography>\n <Fab\n size=\"small\"\n style={styles.delButton}\n onClick={() => this.onDelete(name)}\n >\n <IconDelete />\n </Fab>\n </AccordionSummary>\n <AccordionDetails>\n <Grid2\n container\n direction=\"column\"\n >\n {this.renderEnabled(name)}\n {this.renderLogLevel(name)}\n {this.state.transport[name].enabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].host}\n helperText={this.props.t('The host running syslogd, defaults to localhost')}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].host = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n label={this.props.t('File name')}\n />\n </Grid2>\n ) : null}\n {this.state.transport[name].enabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].port}\n type=\"number\"\n helperText={this.props.t(\n \"The port on the host that syslog is running on, defaults to syslogd's default port(514/UDP).\",\n )}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].port = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n label={this.props.t('Port')}\n />\n </Grid2>\n ) : null}\n {this.state.transport[name].enabled ? (\n <Grid2>\n <FormControl\n style={styles.controlItem}\n variant=\"standard\"\n >\n <InputLabel>{this.props.t('Protocol')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.transport[name].protocol}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].protocol = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n >\n <MenuItem value=\"udp4\">udp4</MenuItem>\n <MenuItem value=\"tcp4\">tcp4</MenuItem>\n <MenuItem value=\"unix\">unix</MenuItem>\n <MenuItem value=\"unix-connect\">unix-connect</MenuItem>\n </Select>\n </FormControl>\n </Grid2>\n ) : null}\n {this.state.transport[name].enabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].path}\n helperText={this.props.t(\n 'The path to the syslog dgram socket (i.e. /dev/log or /var/run/syslog for OS X).',\n )}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].path = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n label={this.props.t('Path')}\n />\n </Grid2>\n ) : null}\n {this.state.transport[name].enabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].facility}\n helperText={this.props.t('Syslog facility to use (Default: local0).')}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].facility = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n label={this.props.t('Facility')}\n />\n </Grid2>\n ) : null}\n {this.state.transport[name].enabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].localhost}\n helperText={this.props.t(\n 'Host to indicate that log messages are coming from (Default: localhost).',\n )}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].localhost = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n label={this.props.t('Log name')}\n />\n </Grid2>\n ) : null}\n {this.state.transport[name].enabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].sysLogType}\n helperText={this.props.t('The type of the syslog protocol to use (Default: BSD).')}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].sysLogType = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n label={this.props.t('SysLog Type')}\n />\n </Grid2>\n ) : null}\n {this.state.transport[name].enabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].app_name}\n helperText={this.props.t('The name of the application (Default: process.title).')}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].app_name = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n label={this.props.t('Application name')}\n />\n </Grid2>\n ) : null}\n {this.state.transport[name].enabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].eol}\n helperText={this.props.t(\n 'The end of line character to be added to the end of the message (Default: Message without modifications).',\n )}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].eol = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n label={this.props.t('End of line char')}\n />\n </Grid2>\n ) : null}\n </Grid2>\n </AccordionDetails>\n </Accordion>\n );\n }\n\n renderFile(name: string): JSX.Element {\n return (\n <Accordion\n key={name}\n expanded={this.state.expanded.includes(name)}\n onChange={() => {\n const expanded = [...this.state.expanded];\n const pos = expanded.indexOf(name);\n if (pos === -1) {\n expanded.push(name);\n } else {\n expanded.splice(pos, 1);\n }\n\n this.setState({ expanded });\n }}\n >\n <AccordionSummary\n style={{ background: 'rgba(128, 128, 128, 0.3)' }}\n expandIcon={<ExpandMoreIcon />}\n >\n <IconFile style={styles.headingIcon} />\n <Typography style={styles.heading}>{name}</Typography>\n <Fab\n size=\"small\"\n style={styles.delButton}\n onClick={() => this.onDelete(name)}\n >\n <IconDelete />\n </Fab>\n </AccordionSummary>\n <AccordionDetails>\n <Grid2\n container\n direction=\"column\"\n >\n {this.renderEnabled(name)}\n {this.renderLogLevel(name)}\n {this.state.transport[name].enabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].filename}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].filename = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n label={this.props.t('File name')}\n />\n </Grid2>\n ) : null}\n\n {this.state.transport[name].enabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].fileext}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].fileext = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n label={this.props.t('File extension')}\n />\n </Grid2>\n ) : null}\n\n {this.state.transport[name].enabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].maxSize}\n type=\"number\"\n helperText={this.props.t('MB')}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].maxSize = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n label={this.props.t('Maximal size of one file')}\n />\n </Grid2>\n ) : null}\n\n {this.state.transport[name].enabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].maxFiles}\n type=\"number\"\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].maxFiles = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n label={this.props.t('Maximal number of files')}\n />\n </Grid2>\n ) : null}\n </Grid2>\n </AccordionDetails>\n </Accordion>\n );\n }\n\n renderHttp(name: string): JSX.Element {\n return (\n <Accordion\n key={name}\n expanded={this.state.expanded.includes(name)}\n onChange={() => {\n const expanded = [...this.state.expanded];\n const pos = expanded.indexOf(name);\n if (pos === -1) {\n expanded.push(name);\n } else {\n expanded.splice(pos, 1);\n }\n\n this.setState({ expanded });\n }}\n >\n <AccordionSummary\n expandIcon={<ExpandMoreIcon />}\n style={{ position: 'relative', background: 'rgba(128, 128, 128, 0.3)' }}\n >\n <IconHttp style={styles.headingIcon} />\n <Typography style={styles.heading}>{name}</Typography>\n <Fab\n size=\"small\"\n style={styles.delButton}\n onClick={() => this.onDelete(name)}\n >\n <IconDelete />\n </Fab>\n </AccordionSummary>\n <AccordionDetails>\n <Grid2\n container\n direction=\"column\"\n >\n {this.renderEnabled(name)}\n {this.renderLogLevel(name)}\n {this.state.transport[name].enabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].host}\n helperText={this.props.t('Remote host of the HTTP logging endpoint')}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].host = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n label={this.props.t('Host')}\n />\n </Grid2>\n ) : null}\n {this.state.transport[name].enabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].port}\n type=\"number\"\n helperText={this.props.t('Remote port of the HTTP logging endpoint')}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].port = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n label={this.props.t('Port')}\n />\n </Grid2>\n ) : null}\n {this.state.transport[name].enabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].path}\n helperText={this.props.t('Remote URI of the HTTP logging endpoint')}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].path = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n label={this.props.t('Path')}\n />\n </Grid2>\n ) : null}\n {this.state.transport[name].enabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].auth}\n helperText={this.props.t(\n 'An object representing the username and password for HTTP Basic Auth',\n )}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].auth = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n label={this.props.t('Auth')}\n />\n </Grid2>\n ) : null}\n {this.state.transport[name].enabled ? (\n <Grid2>\n <FormControlLabel\n style={styles.controlItem}\n control={\n <Checkbox\n checked={this.state.transport[name].ssl}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].ssl = e.target.checked;\n this.setState({ transport }, () => this.onChange());\n }}\n />\n }\n label={this.props.t('SSL')}\n />\n </Grid2>\n ) : null}\n </Grid2>\n </AccordionDetails>\n </Accordion>\n );\n }\n\n renderStream(name: string): JSX.Element {\n return (\n <Accordion\n key={name}\n expanded={this.state.expanded.includes(name)}\n onChange={() => {\n const expanded = [...this.state.expanded];\n const pos = expanded.indexOf(name);\n if (pos === -1) {\n expanded.push(name);\n } else {\n expanded.splice(pos, 1);\n }\n\n this.setState({ expanded });\n }}\n >\n <AccordionSummary\n expandIcon={<ExpandMoreIcon />}\n style={{ position: 'relative', background: 'rgba(128, 128, 128, 0.3)' }}\n >\n <IconStream style={styles.headingIcon} />\n <Typography style={styles.heading}>{name}</Typography>\n <Fab\n size=\"small\"\n style={styles.delButton}\n onClick={() => this.onDelete(name)}\n >\n <IconDelete />\n </Fab>\n </AccordionSummary>\n <AccordionDetails>\n <Grid2\n container\n direction=\"column\"\n >\n {this.renderEnabled(name)}\n {this.state.transport[name].enabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].stream}\n helperText={this.props.t(\n 'any Node.js stream. If an objectMode stream is provided then the entire info object will be written. Otherwise info[MESSAGE] will be written',\n )}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].stream = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n label={this.props.t('File name')}\n />\n </Grid2>\n ) : null}\n {this.state.transport[name].enabled ? (\n <Grid2>\n <FormControlLabel\n style={styles.controlItem}\n control={\n <Checkbox\n checked={this.state.transport[name].silent}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].silent = e.target.checked;\n this.setState({ transport }, () => this.onChange());\n }}\n />\n }\n label={this.props.t('Silent')}\n />\n </Grid2>\n ) : null}\n {this.state.transport[name].enabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].eol}\n helperText={this.props.t('Line-ending character to use. (default: os.EOL).)')}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].eol = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n label={this.props.t('EOL')}\n />\n </Grid2>\n ) : null}\n </Grid2>\n </AccordionDetails>\n </Accordion>\n );\n }\n\n renderSEQ(name: string): JSX.Element {\n return (\n <Accordion\n key={name}\n expanded={this.state.expanded.includes(name)}\n onChange={() => {\n const expanded = [...this.state.expanded];\n const pos = expanded.indexOf(name);\n if (pos === -1) {\n expanded.push(name);\n } else {\n expanded.splice(pos, 1);\n }\n\n this.setState({ expanded });\n }}\n >\n <AccordionSummary\n expandIcon={<ExpandMoreIcon />}\n style={{ position: 'relative', background: 'rgba(128, 128, 128, 0.3)' }}\n >\n <img\n style={styles.headingIcon}\n src={IconSeq}\n alt=\"seq\"\n />\n <Typography style={styles.heading}>{name}</Typography>\n <Fab\n size=\"small\"\n style={styles.delButton}\n onClick={() => this.onDelete(name)}\n >\n <IconDelete />\n </Fab>\n </AccordionSummary>\n <AccordionDetails>\n <Grid2\n container\n direction=\"column\"\n >\n {this.renderEnabled(name)}\n {this.renderLogLevel(name)}\n {this.state.transport[name].enabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].serverUrl}\n helperText={this.props.t(\n 'The http(s) URL including port of the seq server. If you use HTTPS a real certificate is needed; self signed certs are ot accepted.',\n )}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].serverUrl = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n label={this.props.t('Server URL')}\n />\n </Grid2>\n ) : null}\n {this.state.transport[name].enabled ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.transport[name].apiKey}\n helperText={this.props.t('The apiKey of the seq system')}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].apiKey = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n label={this.props.t('API key')}\n />\n </Grid2>\n ) : null}\n </Grid2>\n </AccordionDetails>\n </Accordion>\n );\n }\n\n findFreeName(type: string): string {\n for (let i = 1; ; i++) {\n if (!Object.keys(this.state.transport).find(id => id === type + i)) {\n return type + i;\n }\n }\n }\n\n add(type: string): void {\n if (type === 'file') {\n const name = this.findFreeName(type);\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name] = {\n type,\n enabled: true,\n filename: 'log/iobroker',\n fileext: '.log',\n maxSize: 0,\n maxFiles: 0,\n };\n this.setState({ transport }, () => this.onChange());\n } else if (type === 'syslog') {\n const name = this.findFreeName(type);\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name] = {\n type,\n enabled: true,\n\n host: '127.0.0.1',\n port: 0,\n protocol: 'udp4',\n path: '',\n facility: '',\n localhost: 'iobroker',\n sysLogType: '',\n app_name: '',\n eol: '',\n };\n this.setState({ transport }, () => this.onChange());\n } else if (type === 'http') {\n const name = this.findFreeName(type);\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name] = {\n type,\n enabled: true,\n\n host: '127.0.0.1',\n port: 80,\n path: '/',\n auth: 'None',\n ssl: false,\n };\n this.setState({ transport }, () => this.onChange());\n } else if (type === 'stream') {\n const name = this.findFreeName(type);\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name] = {\n type,\n enabled: true,\n\n stream: '/dev/null',\n level: 'info',\n silent: false,\n eol: '',\n };\n this.setState({ transport }, () => this.onChange());\n } else if (type === 'seq') {\n const name = this.findFreeName(type);\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name] = {\n type,\n enabled: true,\n\n level: 'info',\n serverUrl: 'http://IP:PORT',\n apiKey: '',\n };\n this.setState({ transport }, () => this.onChange());\n }\n }\n\n render(): JSX.Element {\n return (\n <Paper style={styles.paper}>\n <Grid2 sx={styles.gridSettings}>\n <Grid2\n container\n direction=\"column\"\n >\n <Grid2>\n <FormControl\n style={styles.controlItem}\n variant=\"standard\"\n >\n <InputLabel>{this.props.t('Level')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.level}\n onChange={e => this.setState({ level: e.target.value }, () => this.onChange())}\n >\n <MenuItem value=\"silly\">silly</MenuItem>\n <MenuItem value=\"debug\">debug</MenuItem>\n <MenuItem value=\"info\">info</MenuItem>\n <MenuItem value=\"warn\">warn</MenuItem>\n <MenuItem value=\"error\">error</MenuItem>\n </Select>\n </FormControl>\n </Grid2>\n <Grid2>\n <TextField\n variant=\"standard\"\n style={styles.controlItem}\n value={this.state.maxDays}\n helperText={this.props.t('Every day one file')}\n type=\"number\"\n onChange={e => this.setState({ maxDays: e.target.value }, () => this.onChange())}\n label={this.props.t('Maximum number of days')}\n />\n </Grid2>\n <Grid2>\n <FormControlLabel\n style={styles.controlItem}\n control={\n <Checkbox\n checked={this.state.noStdout}\n onChange={e =>\n this.setState({ noStdout: e.target.checked }, () => this.onChange())\n }\n />\n }\n label={this.props.t('No stdout outputs')}\n />\n </Grid2>\n {Object.keys(this.state.transport).map(id => {\n switch (this.state.transport[id].type) {\n case 'syslog':\n return this.renderSyslog(id);\n\n case 'file':\n return this.renderFile(id);\n\n case 'http':\n return this.renderHttp(id);\n\n case 'stream':\n return this.renderStream(id);\n\n case 'seq':\n return this.renderSEQ(id);\n\n default:\n return null;\n }\n })}\n </Grid2>\n </Grid2>\n <Toolbar>\n <Button\n color=\"grey\"\n style={styles.addButton}\n variant=\"contained\"\n onClick={() => this.add('file')}\n startIcon={<IconPlus />}\n >\n <IconFile style={styles.buttonIcon} />\n {this.props.t('File log')}\n </Button>\n <Button\n color=\"grey\"\n style={styles.addButton}\n variant=\"contained\"\n onClick={() => this.add('syslog')}\n startIcon={<IconPlus />}\n >\n <IconSyslog style={styles.buttonIcon} />\n {this.props.t('Syslog')}\n </Button>\n <Button\n color=\"grey\"\n style={styles.addButton}\n variant=\"contained\"\n onClick={() => this.add('http')}\n startIcon={<IconPlus />}\n >\n <IconHttp style={styles.buttonIcon} />\n {this.props.t('HTTP log')}\n </Button>\n <Button\n color=\"grey\"\n style={styles.addButton}\n variant=\"contained\"\n onClick={() => this.add('stream')}\n startIcon={<IconPlus />}\n >\n <IconStream style={styles.buttonIcon} />\n {this.props.t('Stream log')}\n </Button>\n <Button\n color=\"grey\"\n style={styles.addButton}\n variant=\"contained\"\n onClick={() => this.add('seq')}\n startIcon={<IconPlus />}\n >\n <img\n src={IconSeq}\n style={styles.buttonIcon}\n alt=\"seq\"\n />\n {this.props.t('SEQ log')}\n </Button>\n </Toolbar>\n </Paper>\n );\n }\n}\n\nexport default withWidth()(BaseSettingsLog);\n","import React, { Component, type JSX } from 'react';\n\nimport { Paper } from '@mui/material';\n\nimport { withWidth, type ThemeType, type Translate } from '@iobroker/adapter-react-v5';\n\nimport Editor from '../Editor';\n\nconst styles: Record<string, any> = {\n paper: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n overflow: 'auto',\n padding: 8,\n },\n title: {\n width: '100%',\n height: 32,\n },\n divWithoutTitle: {\n width: '100%',\n height: 'calc(100% - 32px)',\n border: '2px solid #00000000',\n },\n error: {\n border: '2px solid #FF0000',\n },\n};\n\nexport interface PluginsSettings {\n [key: string]: any;\n}\n\ninterface BaseSettingsPluginsProps {\n t: Translate;\n onChange: (settings: PluginsSettings) => void;\n settings: PluginsSettings;\n themeType: ThemeType;\n}\ninterface BaseSettingsPluginsState {\n settings: string;\n error?: boolean;\n}\n\nclass BaseSettingsPlugins extends Component<BaseSettingsPluginsProps, BaseSettingsPluginsState> {\n constructor(props: BaseSettingsPluginsProps) {\n super(props);\n\n this.state = {\n settings: JSON.stringify(this.props.settings || {}, null, 2),\n error: false,\n };\n }\n\n onChange(value: string): void {\n const newState: BaseSettingsPluginsState = { settings: value };\n try {\n const settings = JSON.parse(value);\n\n if (this.state.error) {\n newState.error = false;\n }\n\n this.setState(newState, () => this.props.onChange(settings));\n } catch {\n newState.error = true;\n this.setState(newState);\n }\n }\n\n render(): JSX.Element {\n return (\n <Paper style={styles.paper}>\n <div style={styles.title}>{this.props.t('For future use')}</div>\n <div style={{ ...styles.divWithoutTitle, ...(this.state.error ? styles.error : undefined) }}>\n <Editor\n // mode=\"json\"\n themeType={this.props.themeType}\n value={this.state.settings}\n onChange={newValue => this.onChange(newValue)}\n />\n </div>\n </Paper>\n );\n }\n}\n\nexport default withWidth()(BaseSettingsPlugins);\n","import React, { Component, type JSX } from 'react';\n\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n AppBar,\n Tab,\n Tabs,\n Button,\n LinearProgress,\n Box,\n} from '@mui/material';\n\nimport { Check as CheckIcon, Close as CloseIcon } from '@mui/icons-material';\n\nimport {\n type AdminConnection,\n Confirm as ConfirmDialog,\n withWidth,\n type ThemeType,\n type IobTheme,\n type Translate,\n} from '@iobroker/adapter-react-v5';\n\nimport BaseSettingsSystem, { type SystemSettings } from '../components/BaseSettings/BaseSettingsSystem';\nimport BaseSettingsMultihost, { type MultihostSettings } from '../components/BaseSettings/BaseSettingsMultihost';\nimport BaseSettingsObjects, { type SettingsObjects } from '../components/BaseSettings/BaseSettingsObjects';\nimport BaseSettingsStates, { type SettingsStates } from '../components/BaseSettings/BaseSettingsStates';\nimport BaseSettingsLog, { type SettingsLog } from '../components/BaseSettings/BaseSettingsLog';\nimport BaseSettingsPlugins, { type PluginsSettings } from '../components/BaseSettings/BaseSettingsPlugins';\nimport AdminUtils from '@/AdminUtils';\n\n// icons\n\nconst styles: Record<string, any> = {\n content: {\n height: 500,\n overflow: 'hidden',\n },\n tabPanel: (theme: IobTheme) => ({\n width: '100%',\n height: `calc(100% - ${theme.mixins.toolbar.minHeight}px)`,\n overflow: 'auto',\n }),\n selected: (theme: IobTheme) => ({\n color: theme.palette.mode === 'dark' ? '#FFF !important' : '#222 !important',\n }),\n};\n\ninterface BaseSettingsDialogProps {\n t: Translate;\n currentHost: string;\n currentHostName: string;\n socket: AdminConnection;\n themeType: ThemeType;\n onClose: () => void;\n}\n\ninterface BaseSettingsDialogState {\n currentTab: number;\n hasChanges: string[];\n currentHost: string;\n loading: boolean;\n confirmExit: boolean;\n showRestart: boolean;\n system: SystemSettings;\n multihostService?: MultihostSettings;\n objects?: SettingsObjects;\n states: SettingsStates;\n log: SettingsLog;\n plugins: PluginsSettings;\n dnsResolution: 'verbatim' | 'ipv4first';\n dataDir: string;\n saving: boolean;\n}\n\nclass BaseSettingsDialog extends Component<BaseSettingsDialogProps, BaseSettingsDialogState> {\n originalSettings: any;\n\n constructor(props: BaseSettingsDialogProps) {\n super(props);\n this.state = {\n currentTab: 0,\n hasChanges: [],\n currentHost: this.props.currentHost,\n loading: true,\n confirmExit: false,\n showRestart: false,\n\n system: null,\n multihostService: null,\n objects: null,\n states: null,\n log: null,\n plugins: null,\n dnsResolution: 'ipv4first',\n dataDir: '',\n saving: false,\n };\n }\n\n async componentDidMount(): Promise<void> {\n await this.getSettings(this.state.currentHost);\n }\n\n renderConfirmDialog(): JSX.Element | null {\n if (this.state.confirmExit) {\n return (\n <ConfirmDialog\n text={this.props.t('Discard unsaved changes?')}\n onClose={result => this.setState({ confirmExit: false }, () => result && this.props.onClose())}\n />\n );\n }\n return null;\n }\n\n renderRestartDialog(): JSX.Element | null {\n if (this.state.showRestart) {\n return (\n <ConfirmDialog\n title={this.props.t('Please confirm')}\n text={\n <>\n <div>{this.props.t('Restart works only if controller started as system service.')}</div>\n <div>\n {this.props.t(\n 'Would you like to restart the controller for your changes to take effect?',\n )}\n </div>\n </>\n }\n ok={this.props.t('Restart')}\n cancel={this.props.t('No restart')}\n onClose={result =>\n this.setState({ showRestart: false }, () => {\n if (result) {\n this.props.socket\n .restartController(this.props.currentHost)\n .then(() =>\n setTimeout(\n () =>\n // reload admin\n window.location.reload(),\n 500,\n ),\n )\n .catch(e => window.alert(`Cannot restart: ${e}`));\n }\n\n this.props.onClose();\n })\n }\n />\n );\n }\n return null;\n }\n\n async getSettings(host: string): Promise<void> {\n const settings = await this.props.socket.readBaseSettings(host || this.state.currentHost);\n const answer = settings as { config?: ioBroker.IoBrokerJson; isActive?: boolean };\n\n if (answer?.config) {\n this.originalSettings = AdminUtils.clone(answer.config);\n this.setState({\n loading: false,\n system: answer.config.system,\n multihostService: answer.config.multihostService,\n objects: answer.config.objects,\n states: answer.config.states,\n log: answer.config.log,\n plugins: answer.config.plugins,\n dnsResolution: answer.config.dnsResolution || 'ipv4first',\n dataDir: answer.config.dataDir,\n });\n }\n }\n\n onSave(host?: string): void {\n const settings = {\n system: this.state.system,\n multihostService: this.state.multihostService,\n objects: this.state.objects,\n states: this.state.states,\n log: this.state.log,\n plugins: this.state.plugins,\n };\n\n // merge with some new settings, that may be not yet supported by Admin\n const newSettings = { ...this.originalSettings, ...settings };\n\n this.setState({ saving: true }, () => {\n this.props.socket\n .writeBaseSettings(host || this.state.currentHost, newSettings)\n .then(() => {\n this.originalSettings = JSON.parse(JSON.stringify(settings));\n // ask about restart\n this.setState({ hasChanges: [], showRestart: true, saving: false });\n })\n .catch(error => {\n window.alert(`Cannot save settings: ${error}`);\n this.setState({ saving: false });\n });\n });\n }\n\n updateSettings(name: keyof BaseSettingsDialogState, settings: any): void {\n const hasChanges = [...this.state.hasChanges];\n const changed = JSON.stringify(this.originalSettings[name]) !== JSON.stringify(settings);\n\n const pos = hasChanges.indexOf(name);\n if (changed && pos === -1) {\n hasChanges.push(name);\n } else if (!changed && pos !== -1) {\n hasChanges.splice(pos, 1);\n }\n\n this.setState({ [name]: settings, hasChanges } as any);\n }\n\n renderSystem(): JSX.Element {\n const name = 'system';\n return (\n <BaseSettingsSystem\n settings={this.state[name]}\n t={this.props.t}\n currentHost={this.props.currentHost}\n onChange={(settings: any) => this.updateSettings(name, settings)}\n />\n );\n }\n\n renderMultihost(): JSX.Element {\n const name = 'multihostService';\n return (\n <BaseSettingsMultihost\n settings={this.state[name]}\n t={this.props.t}\n socket={this.props.socket}\n currentHost={this.props.currentHost}\n onChange={(settings: any) => this.updateSettings(name, settings)}\n />\n );\n }\n\n renderObjects(): JSX.Element {\n const name = 'objects';\n return (\n <BaseSettingsObjects\n settings={this.state[name]}\n t={this.props.t}\n socket={this.props.socket}\n currentHost={this.props.currentHost}\n onChange={(settings: any) => this.updateSettings(name, settings)}\n />\n );\n }\n\n renderStates(): JSX.Element {\n const name = 'states';\n return (\n <BaseSettingsStates\n settings={this.state[name]}\n t={this.props.t}\n socket={this.props.socket}\n currentHost={this.props.currentHost}\n onChange={(settings: any) => this.updateSettings(name, settings)}\n />\n );\n }\n\n renderLog(): JSX.Element {\n const name = 'log';\n return (\n <BaseSettingsLog\n settings={this.state[name]}\n t={this.props.t}\n socket={this.props.socket}\n currentHost={this.props.currentHost}\n onChange={(settings: any) => this.updateSettings(name, settings)}\n />\n );\n }\n\n renderPlugins(): JSX.Element {\n const name = 'plugins';\n return (\n <BaseSettingsPlugins\n settings={this.state[name]}\n t={this.props.t}\n themeType={this.props.themeType}\n onChange={(settings: any) => this.updateSettings(name, settings)}\n />\n );\n }\n\n render(): JSX.Element {\n return (\n <Dialog\n style={styles.dialog}\n open={!0}\n onClose={() => false}\n fullWidth\n maxWidth=\"xl\"\n aria-labelledby=\"base-settings-dialog-title\"\n >\n <DialogTitle id=\"base-settings-dialog-title\">\n {this.props.t('Host Base Settings')}: {this.props.currentHostName || this.props.currentHost}\n </DialogTitle>\n <DialogContent style={styles.content}>\n <AppBar position=\"static\">\n <Tabs\n value={this.state.currentTab}\n onChange={(_event, newTab) => this.setState({ currentTab: newTab })}\n aria-label=\"system tabs\"\n indicatorColor=\"secondary\"\n >\n <Tab\n label={this.props.t('System')}\n id=\"system-tab\"\n aria-controls=\"simple-tabpanel-0\"\n sx={{ '&.Mui-selected': styles.selected }}\n />\n <Tab\n label={this.props.t('Multi-host')}\n id=\"multihost-tab\"\n sx={{ '&.Mui-selected': styles.selected }}\n aria-controls=\"simple-tabpanel-1\"\n />\n <Tab\n label={this.props.t('Objects')}\n id=\"objects-tab\"\n aria-controls=\"simple-tabpanel-3\"\n sx={{ '&.Mui-selected': styles.selected }}\n />\n <Tab\n label={this.props.t('States')}\n id=\"states-tab\"\n aria-controls=\"simple-tabpanel-4\"\n sx={{ '&.Mui-selected': styles.selected }}\n />\n <Tab\n label={this.props.t('Log')}\n id=\"log-tab\"\n aria-controls=\"simple-tabpanel-5\"\n sx={{ '&.Mui-selected': styles.selected }}\n />\n <Tab\n label={this.props.t('Plugins')}\n id=\"plugins-tab\"\n aria-controls=\"simple-tabpanel-6\"\n sx={{ '&.Mui-selected': styles.selected }}\n />\n </Tabs>\n </AppBar>\n {this.state.loading ? <LinearProgress /> : null}\n {!this.state.loading && this.state.currentTab === 0 ? (\n <Box\n component=\"div\"\n sx={styles.tabPanel}\n >\n {this.renderSystem()}\n </Box>\n ) : null}\n {!this.state.loading && this.state.currentTab === 1 ? (\n <Box\n component=\"div\"\n sx={styles.tabPanel}\n >\n {this.renderMultihost()}\n </Box>\n ) : null}\n {!this.state.loading && this.state.currentTab === 2 ? (\n <Box\n component=\"div\"\n sx={styles.tabPanel}\n >\n {this.renderObjects()}\n </Box>\n ) : null}\n {!this.state.loading && this.state.currentTab === 3 ? (\n <Box\n component=\"div\"\n sx={styles.tabPanel}\n >\n {this.renderStates()}\n </Box>\n ) : null}\n {!this.state.loading && this.state.currentTab === 4 ? (\n <Box\n component=\"div\"\n sx={styles.tabPanel}\n >\n {this.renderLog()}\n </Box>\n ) : null}\n {!this.state.loading && this.state.currentTab === 5 ? (\n <Box\n component=\"div\"\n sx={styles.tabPanel}\n >\n {this.renderPlugins()}\n </Box>\n ) : null}\n {this.renderConfirmDialog()}\n {this.renderRestartDialog()}\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n disabled={!this.state.hasChanges.length || this.state.saving}\n onClick={() => this.onSave()}\n color=\"primary\"\n startIcon={<CheckIcon />}\n >\n {this.props.t('Save & Close')}\n </Button>\n <Button\n variant=\"contained\"\n color=\"grey\"\n disabled={this.state.saving}\n onClick={() =>\n this.state.hasChanges.length ? this.setState({ confirmExit: true }) : this.props.onClose()\n }\n startIcon={<CloseIcon />}\n >\n {this.state.hasChanges.length ? this.props.t('Cancel') : this.props.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n}\n\nexport default withWidth()(BaseSettingsDialog);\n","import React, { Component, type JSX } from 'react';\n\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Button,\n TextField,\n Tooltip,\n InputAdornment,\n IconButton,\n Box,\n} from '@mui/material';\n\nimport { Close as IconClose, Check as IconCheck, Add as IconAdd, Close as CloseIcon } from '@mui/icons-material';\n\nimport { UploadImage, type Translate } from '@iobroker/adapter-react-v5';\n\nconst styles: Record<string, any> = {\n error: {\n border: '2px solid #FF0000',\n },\n id: {\n fontStyle: 'italic',\n },\n dialog: {\n height: 'calc(100% - 64px)',\n },\n button: {\n marginTop: 20,\n marginLeft: 8,\n },\n funcDivEdit: {\n width: '100%',\n },\n funcEditName: {\n display: 'inline-block',\n width: 85,\n },\n funcEdit: {\n width: 400,\n },\n marginTop: {\n marginTop: 20,\n },\n commonTabWrapper: {\n flexFlow: 'wrap',\n display: 'flex',\n },\n commonWrapper: {\n width: 500,\n minWidth: 300,\n },\n flexDrop: {\n width: '100%',\n maxWidth: 500,\n margin: 'auto',\n display: 'flex',\n },\n marginBlock: {\n marginTop: 20,\n },\n buttonAdd: {\n minWidth: 150,\n },\n textField: {\n width: '100%',\n },\n flex: {\n display: 'flex',\n },\n close: {\n width: '20px',\n height: '20px',\n opacity: '0.9',\n cursor: 'pointer',\n position: 'relative',\n top: 20,\n transition: 'all 0.6s ease',\n '&:hover': {\n transform: 'rotate(90deg)',\n },\n '&:before': {\n position: 'absolute',\n left: '9px',\n content: '\"\"',\n height: '20px',\n width: '3px',\n backgroundColor: '#ff4f4f',\n transform: 'rotate(45deg)',\n },\n '&:after': {\n position: 'absolute',\n left: '9px',\n content: '\"\"',\n height: '20px',\n width: '3px',\n backgroundColor: '#ff4f4f',\n transform: 'rotate(-45deg)',\n },\n },\n color: {\n width: 70,\n },\n buttonRemoveWrapper: {\n position: 'absolute',\n zIndex: 222,\n right: 0,\n },\n tabsPadding: {\n padding: '0px 24px',\n },\n};\n\ninterface HostEditProps {\n obj: ioBroker.HostObject;\n onClose: (newObj?: ioBroker.HostObject) => void;\n t: Translate;\n}\n\ninterface HostEditState {\n text: string;\n error: boolean;\n changed: boolean;\n}\n\nclass HostEdit extends Component<HostEditProps, HostEditState> {\n private readonly originalObj: string;\n\n constructor(props: HostEditProps) {\n super(props);\n\n this.state = {\n text: JSON.stringify(this.props.obj, null, 2),\n error: false,\n changed: false,\n };\n\n this.originalObj = JSON.stringify(this.props.obj, null, 2);\n }\n\n prepareObject(value: string): ioBroker.HostObject | null {\n value = value || this.state.text;\n try {\n const obj: ioBroker.HostObject = JSON.parse(value) as ioBroker.HostObject;\n obj._id = this.props.obj._id; // do not allow change of id\n return obj;\n } catch {\n return null;\n }\n }\n\n onChange(value: string): void {\n const newState: Partial<HostEditState> = { text: value };\n const json = this.prepareObject(value);\n if (json) {\n newState.changed = this.originalObj !== JSON.stringify(json, null, 2);\n if (this.state.error) {\n newState.error = false;\n }\n } else {\n newState.error = true;\n }\n this.setState(newState as HostEditState);\n }\n\n onUpdate(): void {\n try {\n const obj = JSON.parse(this.state.text) as ioBroker.HostObject;\n obj._id = this.props.obj._id; // do not allow change of id\n this.props.onClose(obj);\n } catch {\n // ignore\n }\n }\n\n setCommonItem(json: ioBroker.HostObject, name: string, value: any): void {\n (json.common as Record<string, any>)[name] = value;\n this.onChange(JSON.stringify(json, null, 2));\n }\n\n removeCommonItem(json: ioBroker.HostObject, name: string): void {\n delete (json.common as Record<string, any>).common[name];\n this.onChange(JSON.stringify(json, null, 2));\n }\n\n buttonAddKey(nameKey: string, cb: () => void): JSX.Element {\n const { t } = this.props;\n return (\n <div style={styles.marginBlock}>\n <Button\n style={styles.buttonAdd}\n variant=\"contained\"\n color=\"secondary\"\n onClick={cb}\n startIcon={<IconAdd />}\n >\n {t(`Add ${nameKey}`)}\n </Button>\n </div>\n );\n }\n\n buttonRemoveKey(nameKey: string, cb: () => void): JSX.Element {\n const { t } = this.props;\n return (\n <Tooltip\n title={t(`Remove ${nameKey}`)}\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\n <Box\n component=\"div\"\n sx={styles.close}\n onClick={cb}\n />\n </Tooltip>\n );\n }\n\n renderCommonEdit(): JSX.Element {\n try {\n const json = JSON.parse(this.state.text);\n const disabled = false;\n const { t } = this.props;\n return (\n <div style={styles.commonTabWrapper}>\n <div style={styles.commonWrapper}>\n {typeof json.common.title !== 'undefined' ? (\n <TextField\n variant=\"standard\"\n disabled={disabled}\n label={t('title')}\n style={{ ...styles.marginBlock, ...styles.textField }}\n fullWidth\n value={json.common.title}\n onChange={el => this.setCommonItem(json, 'title', el.target.value)}\n slotProps={{\n input: {\n endAdornment: json.common.title ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.setCommonItem(json, 'title', '')}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n ) : (\n this.buttonAddKey('title', () => this.setCommonItem(json, 'title', ''))\n )}\n {typeof json.common.color !== 'undefined' ? (\n <div style={styles.flex}>\n <TextField\n variant=\"standard\"\n disabled={disabled}\n style={{ ...styles.marginBlock, ...styles.color }}\n label={t('Color')}\n type=\"color\"\n value={json.common.color}\n onChange={el => this.setCommonItem(json, 'color', el.target.value)}\n slotProps={{\n input: {\n endAdornment: json.common.color ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.setCommonItem(json, 'color', '')}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n {this.buttonRemoveKey('color', () => this.removeCommonItem(json, 'color'))}\n </div>\n ) : (\n this.buttonAddKey('color', () => this.setCommonItem(json, 'color', ''))\n )}\n </div>\n {typeof json.common.icon !== 'undefined' ? (\n <div style={styles.flexDrop}>\n <UploadImage\n disabled={disabled}\n crop\n maxSize={256 * 1024}\n icon={json.common.icon}\n removeIconFunc={() => this.setCommonItem(json, 'icon', '')}\n onChange={base64 => this.setCommonItem(json, 'icon', base64)}\n />\n {this.buttonRemoveKey('icon', () => this.removeCommonItem(json, 'icon'))}\n </div>\n ) : (\n <div style={styles.flexDrop}>\n {this.buttonAddKey('icon', () => this.setCommonItem(json, 'icon', ''))}\n </div>\n )}\n </div>\n );\n } catch {\n return <div>{this.props.t('Cannot parse JSON!')}</div>;\n }\n }\n\n render(): JSX.Element {\n return (\n <Dialog\n sx={{ '& .MuiDialog-paper': styles.dialog }}\n open={!0}\n maxWidth=\"lg\"\n fullWidth\n fullScreen={false}\n onClose={() => this.props.onClose()}\n aria-labelledby=\"edit-value-dialog-title\"\n aria-describedby=\"edit-value-dialog-description\"\n >\n <DialogTitle id=\"edit-value-dialog-title\">\n {this.props.t('Edit host settings')}:<span style={styles.id}>{this.props.obj._id}</span>\n </DialogTitle>\n <DialogContent>{this.renderCommonEdit()}</DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n disabled={this.state.error || !this.state.changed}\n onClick={() => this.onUpdate()}\n color=\"primary\"\n startIcon={<IconCheck />}\n >\n {this.props.t('Write')}\n </Button>\n <Button\n variant=\"contained\"\n onClick={() => this.props.onClose()}\n color=\"grey\"\n startIcon={<IconClose />}\n >\n {this.props.t('Cancel')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n}\n\nexport default HostEdit;\n","import React, { Component, type JSX } from 'react';\nimport semver from 'semver';\n\nimport {\n Avatar,\n Badge,\n Box,\n FormControl,\n FormHelperText,\n IconButton,\n InputLabel,\n MenuItem,\n Select,\n Tooltip,\n} from '@mui/material';\n\nimport {\n Refresh as RefreshIcon,\n Delete as DeleteIcon,\n Cached as CachedIcon,\n Build as BuildIcon,\n Edit as EditIcon,\n BugReport as BugReportIcon,\n Info as InfoIcon,\n Warning as WarningIcon,\n Error as ErrorIcon,\n} from '@mui/icons-material';\n\nimport { BiChevronDown, BiChevronUp } from 'react-icons/bi';\n\nimport { amber, blue, green, grey, red } from '@mui/material/colors';\n\nimport {\n Utils,\n IconCopy,\n type AdminConnection,\n type IobTheme,\n type ThemeType,\n type Translate,\n} from '@iobroker/adapter-react-v5';\n\nimport type HostsWorker from '@/Workers/HostsWorker';\nimport { type NotificationAnswer } from '@/Workers/HostsWorker';\nimport AdapterUpdateDialog, { type News } from '@/dialogs/AdapterUpdateDialog';\nimport JsControllerUpdater from '@/dialogs/JsControllerUpdater';\nimport JsControllerDialog from '@/dialogs/JsControllerDialog';\nimport BaseSettingsDialog from '@/dialogs/BaseSettingsDialog';\nimport { CONTROLLER_CHANGELOG_URL } from '@/helpers/utils';\nimport type { RepoAdapterObject } from '@/components/Adapters/Utils';\nimport AdminUtils from '../../AdminUtils';\nimport HostEdit from './HostEdit';\nimport CustomModal from '../CustomModal';\n\nexport const boxShadow =\n '0 2px 2px 0 rgba(0, 0, 0, .14),0 3px 1px -2px rgba(0, 0, 0, .12),0 1px 5px 0 rgba(0, 0, 0, .2)';\nexport const boxShadowHover = '0 8px 17px 0 rgba(0, 0, 0, .2),0 6px 20px 0 rgba(0, 0, 0, .19)';\n\nexport const blinkClasses = `\n @keyframes newValueAnimationHostDark {\n 0% {\n color: #00f900;\n }\n 80% {\n color: #008000;\n }\n 100% {\n color: #fff;\n }\n }\n @keyframes newValueAnimationHostLight {\n 0% {\n color: #00f900;\n }\n 80% {\n color: #008000;\n }\n 100% {\n color: #fff;\n }\n }\n .newValueHost-dark {\n animation: newValueAnimationHostDark 2s ease-in-out;\n }\n .newValueHost-light {\n animation: newValueAnimationHostLight 2s ease-in-out;\n }\n @keyframes colors {\n 0% {\n left: -51px;\n }\n 100% {\n left: 101%;\n }\n }\n @keyframes warning {\n 0% {\n opacity: 1;\n }\n 100% {\n opacity: 0.7;\n }\n }\n @keyframes red {\n 0% {\n opacity: 1;\n }\n 100% {\n opacity: 0.8;\n }\n }\n @keyframes onBlink-keys-dark {\n 0% {\n color: #264d72;\n }\n 80% {\n color: #3679be;\n }\n 100% {\n color: #fff;\n }\n }\n @keyframes onBlink-keys-light {\n 0% {\n color: #3679be;\n }\n 80% {\n color: #264d72;\n }\n 100% {\n color: #000;\n }\n }\n .onBlick-light {\n animation: onBlink-keys-light 2s ease-in-out;\n animation-iteration-count: 2;\n font-size: 12px;\n margin-left: 4px;\n }\n .onBlick-dark {\n animation: onBlink-keys-dark 2s ease-in-out;\n animation-iteration-count: 2;\n font-size: 12px;\n margin-left: 4px;\n }\n @keyframes height {\n 0% {\n height: 0;\n },\n 100% {\n height: 160px;\n }\n }\n`;\n\nexport const genericStyles: Record<string, any> = {\n img: {\n width: 45,\n height: 45,\n margin: 'auto 0',\n position: 'relative',\n '&:after': {\n content: '\"\"',\n position: 'absolute',\n zIndex: 2,\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n background: 'url(\"img/no-image.png\") 100% 100% no-repeat',\n backgroundSize: 'cover',\n backgroundColor: '#fff',\n },\n },\n collapseOff: {\n height: 0,\n },\n footerBlock: (theme: IobTheme) => ({\n background: theme.palette.background.default,\n p: '10px',\n display: 'flex',\n justifyContent: 'space-between',\n }),\n hidden: {\n display: 'none',\n },\n\n emptyButton: {\n width: 48,\n },\n greenText: (theme: IobTheme) => ({\n color: theme.palette.success.dark,\n }),\n wrapperAvailable: {\n display: 'flex',\n alignItems: 'center',\n },\n buttonUpdate: {\n border: `1px solid ${green[700]}`,\n padding: '2px 7px',\n borderRadius: '5px',\n display: 'flex',\n alignItems: 'center',\n cursor: 'pointer',\n transition: 'background 0.5s',\n '&:hover': {\n background: '#00800026',\n },\n },\n buttonUpdateIcon: {\n height: 20,\n width: 20,\n marginRight: 10,\n },\n debug: {\n backgroundColor: grey[700],\n },\n info: {\n backgroundColor: blue[700],\n },\n warn: {\n backgroundColor: amber[700],\n },\n error: {\n backgroundColor: red[700],\n },\n smallAvatar: {\n width: 24,\n height: 24,\n },\n formControl: {\n display: 'flex',\n },\n baseSettingsButton: {\n transform: 'rotate(45deg)',\n },\n tooltip: {\n pointerEvents: 'none',\n },\n};\n\nconst arrayLogLevel = ['silly', 'debug', 'info', 'warn', 'error'];\n\nfunction toggleClassName(el: HTMLElement, name: string): void {\n const classNames = el.className.split(' ');\n const pos = classNames.indexOf(name);\n if (pos !== -1) {\n classNames.splice(pos, 1);\n el.className = classNames.join(' ');\n }\n classNames.push(name);\n // el.className = classNames.join(' ');\n setTimeout(_classNames => (el.className = _classNames), 100, classNames.join(' '));\n}\n\nfunction getLogLevelIcon(level: ioBroker.LogLevel | ''): JSX.Element | null {\n if (level === 'debug') {\n return <BugReportIcon />;\n }\n if (level === 'info') {\n return <InfoIcon />;\n }\n if (level === 'warn') {\n return <WarningIcon />;\n }\n if (level === 'error') {\n return <ErrorIcon />;\n }\n return null;\n}\n\nexport interface HostGenericProps {\n adminInstance: string;\n alive: boolean;\n available: string;\n executeCommandRemove: () => void;\n expertMode: boolean;\n hostData: Record<string, any> | string;\n hostId: `system.host.${string}`;\n host: ioBroker.HostObject;\n hostsWorker: HostsWorker;\n isCurrentHost: boolean;\n jsControllerInfo: RepoAdapterObject;\n lang: ioBroker.Languages;\n noTranslation: boolean;\n onUpdating: (isUpdating: boolean) => void;\n showAdaptersWarning: (notifications: Record<string, NotificationAnswer>, hostId: string) => void;\n socket: AdminConnection;\n systemConfig: ioBroker.SystemConfigObject;\n t: Translate;\n theme: IobTheme;\n themeType: ThemeType;\n toggleTranslation: () => void;\n}\n\nexport interface HostGenericState {\n logLevel: ioBroker.LogLevel | '';\n logLevelSelect: ioBroker.LogLevel | '';\n errorHost: { notifications: NotificationAnswer | null; count: number };\n openDialogLogLevel: boolean;\n hostUpdateDialog: boolean;\n updateAvailable: boolean;\n instructionDialog: boolean;\n updateDialog: boolean;\n baseSettingsDialog: boolean;\n editDialog: boolean;\n changeLog: string | null;\n}\n\nexport default abstract class HostGeneric<\n TProps extends HostGenericProps,\n TState extends HostGenericState,\n> extends Component<TProps, TState> {\n static formatInfo: Record<string, (value: any, t: Translate) => string> = {\n Uptime: AdminUtils.formatSeconds,\n 'System uptime': AdminUtils.formatSeconds,\n RAM: AdminUtils.formatRam,\n Speed: AdminUtils.formatSpeed,\n 'Disk size': AdminUtils.formatBytes,\n 'Disk free': AdminUtils.formatBytes,\n };\n\n protected readonly refEvents = React.createRef<HTMLDivElement>();\n\n protected readonly refWarning = React.createRef<HTMLDivElement>();\n\n protected readonly refCpu = React.createRef<HTMLDivElement>();\n\n protected readonly refMem = React.createRef<HTMLDivElement>();\n\n protected readonly refUptime = React.createRef<HTMLDivElement>();\n\n private outputCache = '-';\n\n private inputCache = '-';\n\n private cpuCache = '- %';\n\n private memCache = '- %';\n\n private uptimeCache = '-';\n\n private diskFreeCache = 1;\n\n private diskSizeCache = 1;\n\n private diskWarningCache = 1;\n\n constructor(props: TProps) {\n super(props);\n this.state = {\n logLevel: '',\n logLevelSelect: '',\n errorHost: { notifications: null, count: 0 },\n openDialogLogLevel: false,\n hostUpdateDialog: false,\n updateAvailable: false,\n instructionDialog: false,\n updateDialog: false,\n baseSettingsDialog: false,\n editDialog: false,\n changeLog: null,\n } as TState;\n }\n\n /**\n * Get the initial disk states to show problems with disk usage\n */\n async getInitialDiskStates(): Promise<void> {\n const diskWarningState = await this.props.socket.getState(`${this.props.hostId}.diskWarning`);\n this.diskWarningCache = (diskWarningState?.val as number) ?? this.diskWarningCache;\n\n const diskFreeState = await this.props.socket.getState(`${this.props.hostId}.diskFree`);\n this.diskFreeCache = (diskFreeState?.val as number) ?? this.diskFreeCache;\n\n const diskSizeState = await this.props.socket.getState(`${this.props.hostId}.diskSize`);\n this.diskSizeCache = (diskSizeState?.val as number) ?? this.diskSizeCache;\n }\n\n notificationHandler = (notifications: Record<string, NotificationAnswer>): void =>\n notifications &&\n notifications[this.props.hostId] &&\n this.setState({\n errorHost: {\n notifications: notifications[this.props.hostId],\n count: HostGeneric.calculateWarning(notifications[this.props.hostId]),\n },\n });\n\n readChangeLog(): void {\n if (!this.state.changeLog) {\n fetch(CONTROLLER_CHANGELOG_URL.replace('github.com', 'raw.githubusercontent.com').replace('/blob/', '/'))\n .then(response => response.text())\n .then(data => this.setState({ changeLog: data }))\n .catch(e => console.error(`Cannot read changelog: ${e}`));\n }\n }\n\n componentDidMount(): void {\n this.props.hostsWorker.registerNotificationHandler(this.notificationHandler);\n\n void this.props.hostsWorker\n .getNotifications(this.props.hostId)\n .then(notifications => this.notificationHandler(notifications));\n\n void this.props.socket.subscribeState(`${this.props.hostId}.inputCount`, this.eventsInputFunc);\n void this.props.socket.subscribeState(`${this.props.hostId}.outputCount`, this.eventsOutputFunc);\n\n void this.props.socket.subscribeState(`${this.props.hostId}.cpu`, this.cpuFunc);\n void this.props.socket.subscribeState(`${this.props.hostId}.mem`, this.memFunc);\n void this.props.socket.subscribeState(`${this.props.hostId}.uptime`, this.uptimeFunc);\n\n void this.getInitialDiskStates().finally(async () => {\n await this.props.socket.subscribeState(`${this.props.hostId}.diskFree`, this.warningFunc);\n await this.props.socket.subscribeState(`${this.props.hostId}.diskSize`, this.warningFunc);\n await this.props.socket.subscribeState(`${this.props.hostId}.diskWarning`, this.warningFunc);\n });\n\n void this.props.socket.subscribeState(`${this.props.hostId}.logLevel`, this.logLevelFunc);\n }\n\n componentWillUnmount(): void {\n this.props.hostsWorker.unregisterNotificationHandler(this.notificationHandler);\n this.props.socket.unsubscribeState(`${this.props.hostId}.inputCount`, this.eventsInputFunc);\n this.props.socket.unsubscribeState(`${this.props.hostId}.outputCount`, this.eventsOutputFunc);\n\n this.props.socket.unsubscribeState(`${this.props.hostId}.cpu`, this.cpuFunc);\n this.props.socket.unsubscribeState(`${this.props.hostId}.mem`, this.memFunc);\n this.props.socket.unsubscribeState(`${this.props.hostId}.uptime`, this.uptimeFunc);\n\n this.props.socket.unsubscribeState(`${this.props.hostId}.diskFree`, this.warningFunc);\n this.props.socket.unsubscribeState(`${this.props.hostId}.diskSize`, this.warningFunc);\n this.props.socket.unsubscribeState(`${this.props.hostId}.diskWarning`, this.warningFunc);\n\n this.props.socket.unsubscribeState(`${this.props.hostId}.logLevel`, this.logLevelFunc);\n }\n\n eventsInputFunc = (_id: string, input: ioBroker.State): void => {\n this.inputCache = input && input.val !== null ? `⇥${input.val}` : '-';\n if (this.refEvents.current) {\n this.refEvents.current.innerHTML = `${this.inputCache} / ${this.outputCache}`;\n toggleClassName(this.refEvents.current, `newValueHost-${this.props.themeType || 'light'}`);\n }\n };\n\n eventsOutputFunc = (_id: string, output: ioBroker.State): void => {\n this.outputCache = output && output.val !== null ? `↦${output.val}` : '-';\n if (this.refEvents.current) {\n this.refEvents.current.innerHTML = `${this.inputCache} / ${this.outputCache}`;\n toggleClassName(this.refEvents.current, `newValueHost-${this.props.themeType || 'light'}`);\n }\n };\n\n warningFunc = (name_: string, state: ioBroker.State): void => {\n if (name_.endsWith('diskFree')) {\n this.diskFreeCache = (state?.val as number) || 0;\n } else if (name_.endsWith('diskSize')) {\n this.diskSizeCache = (state?.val as number) || 0;\n } else if (name_.endsWith('diskWarning')) {\n this.diskWarningCache = (state?.val as number) || 0;\n }\n const warning = (this.diskFreeCache / this.diskSizeCache) * 100 <= this.diskWarningCache;\n if (this.refWarning.current) {\n if (warning) {\n this.refWarning.current.setAttribute('title', this.props.t('Warning: Free space on disk is low'));\n this.refWarning.current.classList.add('warning');\n } else {\n this.refWarning.current.removeAttribute('title');\n this.refWarning.current.classList.remove('warning');\n }\n }\n };\n\n cpuFunc = (_id: string, state: ioBroker.State): void => {\n this.cpuCache = this.formatValue(state, '%');\n if (this.refCpu.current) {\n this.refCpu.current.innerHTML = this.cpuCache;\n toggleClassName(this.refCpu.current, `newValueHost-${this.props.themeType || 'light'}`);\n }\n };\n\n memFunc = (_id: string, state: ioBroker.State): void => {\n this.memCache = this.formatValue(state, '%');\n if (this.refMem.current) {\n this.refMem.current.innerHTML = this.memCache;\n toggleClassName(this.refMem.current, `newValueHost-${this.props.themeType || 'light'}`);\n }\n };\n\n uptimeFunc = (_id: string, state: ioBroker.State): void => {\n if (state?.val) {\n const d = Math.floor((state.val as number) / (3600 * 24));\n const h = Math.floor(((state.val as number) % (3600 * 24)) / 3600);\n this.uptimeCache = d ? `${d}d${h}h` : `${h}h`; // TODO translate\n }\n if (this.refUptime.current) {\n this.refUptime.current.innerHTML = this.uptimeCache;\n toggleClassName(this.refUptime.current, `newValueHost-${this.props.themeType || 'light'}`);\n }\n };\n\n static calculateWarning(notifications: NotificationAnswer | null): number {\n if (!notifications) {\n return 0;\n }\n const { result } = notifications;\n let count = 0;\n if (!result || !result.system) {\n return count;\n }\n if (Object.keys(result.system.categories).length) {\n const obj = result.system.categories;\n Object.keys(obj).forEach(nameTab => Object.keys(obj[nameTab].instances).forEach(() => count++));\n }\n return count;\n }\n\n formatValue(state: ioBroker.State, unit: string): string {\n if (!state || state.val === null || state.val === undefined) {\n return `-${unit ? ` ${unit}` : ''}`;\n }\n if (this.props.systemConfig.common.isFloatComma) {\n return state.val.toString().replace('.', ',') + (unit ? ` ${unit}` : '');\n }\n return state.val + (unit ? ` ${unit}` : '');\n }\n\n logLevelFunc = (_id: string, state: ioBroker.State): void => {\n if (state) {\n this.setState({ logLevel: state.val as ioBroker.LogLevel, logLevelSelect: state.val as ioBroker.LogLevel });\n }\n };\n\n renderDialogLogLevel(): JSX.Element | null {\n if (!this.state.openDialogLogLevel) {\n return null;\n }\n return (\n <CustomModal\n theme={this.props.theme}\n title={this.props.t('Edit log level rule for %s', this.props.host.common.name)}\n onApply={() => {\n this.props.socket\n .setState(`${this.props.hostId}.logLevel`, this.state.logLevelSelect)\n .catch(e => window.alert(`Cannot set log level: ${e}`));\n this.setState({ openDialogLogLevel: false });\n }}\n onClose={() => this.setState({ openDialogLogLevel: false, logLevelSelect: this.state.logLevel })}\n >\n <FormControl\n style={{ ...genericStyles.formControl, marginTop: 8 }}\n variant=\"outlined\"\n >\n <InputLabel>{this.props.t('log level')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.logLevelSelect}\n fullWidth\n onChange={el => this.setState({ logLevelSelect: el.target.value as ioBroker.LogLevel })}\n >\n {arrayLogLevel.map(el => (\n <MenuItem\n key={el}\n value={el}\n >\n {this.props.t(el)}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n <FormControl\n style={genericStyles.formControl}\n variant=\"outlined\"\n >\n <FormHelperText>\n {this.props.t('Log level will be reset to the saved level after the restart of the controller')}\n </FormHelperText>\n <FormHelperText>\n {this.props.t('You can set the log level permanently in the base host settings')}\n <BuildIcon style={genericStyles.baseSettingsButton} />\n </FormHelperText>\n </FormControl>\n </CustomModal>\n );\n }\n\n onCopy(): void {\n const text = [];\n if (this.refCpu.current) {\n text.push(`CPU: ${this.refCpu.current.innerHTML}`);\n }\n if (this.refMem.current) {\n text.push(`RAM: ${this.refMem.current.innerHTML}`);\n }\n if (this.refUptime.current) {\n text.push(`${this.props.t('Uptime')}: ${this.refUptime.current.innerHTML}`);\n }\n text.push(`${this.props.t('Available')}: ${this.props.available}`);\n text.push(`${this.props.t('Installed')}: ${this.props.host.common.installedVersion}`);\n if (this.refEvents.current) {\n text.push(`${this.props.t('Events')}: ${this.refEvents.current.innerHTML}`);\n }\n\n if (this.props.hostData && typeof this.props.hostData === 'object') {\n const data: Record<string, any> = this.props.hostData;\n Object.keys(data).map(value =>\n text.push(\n `${this.props.t(value)}: ${HostGeneric.formatInfo[value] ? HostGeneric.formatInfo[value](data[value], this.props.t) : data[value] || '--'}`,\n ),\n );\n }\n\n Utils.copyToClipboard(text.join('\\n'));\n window.alert(this.props.t('Copied'));\n }\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n renderUpdateButton(upgradeAvailable: boolean, style?: React.CSSProperties): JSX.Element {\n return upgradeAvailable ? (\n <Tooltip\n title={this.props.t('Update')}\n slotProps={{ popper: { sx: genericStyles.tooltip } }}\n >\n <Box\n component=\"div\"\n onClick={event => {\n event.stopPropagation();\n void this.openHostUpdateDialog();\n }}\n sx={genericStyles.buttonUpdate}\n >\n <IconButton\n style={genericStyles.buttonUpdateIcon}\n size=\"small\"\n >\n <RefreshIcon />\n </IconButton>\n <span style={{ color: green[700] }}>{this.props.available}</span>\n </Box>\n </Tooltip>\n ) : (\n <span style={style}>{this.props.available}</span>\n );\n }\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n renderHostBaseEdit(): JSX.Element | null {\n return this.props.expertMode ? (\n <Tooltip\n title={this.props.t('Host Base Settings')}\n slotProps={{ popper: { sx: genericStyles.tooltip } }}\n >\n <div>\n <IconButton\n size=\"large\"\n disabled={!this.props.alive}\n onClick={e => {\n e.stopPropagation();\n this.setState({ baseSettingsDialog: true });\n }}\n >\n <BuildIcon style={genericStyles.baseSettingsButton} />\n </IconButton>\n </div>\n </Tooltip>\n ) : null;\n }\n\n /**\n * Render a button to extend the component in general the component can be extended by clicking anywhere on it\n * However, it is used as an additional indicator that it is expandable\n */\n // eslint-disable-next-line react/no-unused-class-component-methods\n renderExtendButton(\n /** if host is expanded */\n open: boolean,\n ): JSX.Element {\n return (\n <Tooltip\n title={this.props.t(open ? 'collapse' : 'Expand')}\n slotProps={{ popper: { sx: genericStyles.tooltip } }}\n >\n <div>\n <IconButton size=\"large\">{open ? <BiChevronUp /> : <BiChevronDown />}</IconButton>\n </div>\n </Tooltip>\n );\n }\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n renderRestartButton(): JSX.Element {\n return (\n <Tooltip\n title={this.props.t('Restart host')}\n slotProps={{ popper: { sx: genericStyles.tooltip } }}\n >\n <div>\n <IconButton\n size=\"large\"\n disabled={!this.props.alive}\n onClick={event => {\n event.stopPropagation();\n this.props.socket\n .restartController(this.props.hostId)\n .catch((err: string) => window.alert(`Cannot restart: ${err}`));\n }}\n >\n <CachedIcon />\n </IconButton>\n </div>\n </Tooltip>\n );\n }\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n renderEditButton(): JSX.Element {\n return (\n <IconButton\n size=\"large\"\n onClick={event => {\n event.stopPropagation();\n this.setState({ editDialog: true });\n }}\n >\n <EditIcon />\n </IconButton>\n );\n }\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n renderRemoveButton(): JSX.Element {\n return !this.props.alive && !this.props.isCurrentHost ? (\n <Tooltip\n title={\n this.props.alive || this.props.isCurrentHost\n ? this.props.t('You cannot delete host, when it is alive')\n : this.props.t('Remove')\n }\n slotProps={{ popper: { sx: genericStyles.tooltip } }}\n >\n <IconButton\n size=\"large\"\n onClick={event => {\n event.stopPropagation();\n this.props.executeCommandRemove();\n }}\n >\n <DeleteIcon />\n </IconButton>\n </Tooltip>\n ) : (\n <div style={genericStyles.emptyButton} />\n );\n }\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n renderCopyButton(style?: React.CSSProperties): JSX.Element {\n return (\n <Tooltip\n title={this.props.t('Copy')}\n slotProps={{ popper: { sx: genericStyles.tooltip } }}\n >\n <IconButton\n size=\"large\"\n onClick={() => this.onCopy()}\n style={style}\n >\n <IconCopy />\n </IconButton>\n </Tooltip>\n );\n }\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n renderLogLevel(): JSX.Element {\n return (\n <Tooltip\n title={`${this.props.t('loglevel')} ${this.state.logLevel}`}\n slotProps={{ popper: { sx: genericStyles.tooltip } }}\n >\n <IconButton\n size=\"large\"\n onClick={event => {\n event.stopPropagation();\n this.setState({ openDialogLogLevel: true });\n }}\n >\n <Avatar style={{ ...genericStyles.smallAvatar, ...genericStyles[this.state.logLevel] }}>\n {getLogLevelIcon(this.state.logLevel)}\n </Avatar>\n </IconButton>\n </Tooltip>\n );\n }\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n renderNotificationsBadge(children?: React.ReactNode, styled?: boolean): JSX.Element {\n return (\n <Badge\n sx={\n styled\n ? {\n right: -3,\n top: 13,\n padding: '0 4px',\n }\n : undefined\n }\n title={this.props.t('Hosts notifications')}\n badgeContent={this.state.errorHost.count}\n style={genericStyles.badge}\n color=\"error\"\n onClick={e => {\n e.stopPropagation();\n this.props.showAdaptersWarning(\n { [this.props.hostId]: this.state.errorHost.notifications },\n this.props.hostId,\n );\n }}\n >\n {children}\n </Badge>\n );\n }\n\n async openHostUpdateDialog(): Promise<void> {\n const updateAvailable = await this.props.socket.checkFeatureSupported('CONTROLLER_UI_UPGRADE');\n\n this.setState({\n hostUpdateDialog: true,\n updateAvailable,\n });\n\n this.readChangeLog();\n }\n\n renderHostUpdateDialog(): JSX.Element | null {\n if (!this.state.hostUpdateDialog) {\n return null;\n }\n\n return (\n <AdapterUpdateDialog\n adapter={this.props.host.common.name}\n adapterObject={this.props.jsControllerInfo}\n t={this.props.t}\n textUpdate={\n this.state.updateAvailable ? this.props.t('Start update') : this.props.t('Show instructions')\n }\n textInstruction={this.props.t('Show whole changelog')}\n rightDependencies\n news={this.getNews()}\n toggleTranslation={this.props.toggleTranslation}\n noTranslation={this.props.noTranslation}\n onUpdate={(): void => {\n if (this.state.updateAvailable) {\n this.setState({ hostUpdateDialog: false, updateDialog: true });\n } else {\n this.setState({ hostUpdateDialog: false, instructionDialog: true });\n }\n }}\n theme={this.props.theme}\n installedVersion={this.props.host.common.installedVersion}\n onInstruction={() => {\n window.open(CONTROLLER_CHANGELOG_URL, '_blank');\n }}\n onClose={() => this.setState({ hostUpdateDialog: false })}\n />\n );\n }\n\n renderUpdateDialog(): JSX.Element | null {\n if (this.state.updateAvailable && this.state.updateDialog) {\n return (\n <JsControllerUpdater\n socket={this.props.socket}\n hostId={this.props.hostId}\n version={this.props.jsControllerInfo.version}\n onClose={() => this.setState({ updateDialog: false })}\n adminInstance={this.props.adminInstance}\n onUpdating={(isUpdating: boolean) => this.props.onUpdating(isUpdating)}\n themeType={this.props.themeType}\n />\n );\n }\n\n if (this.state.instructionDialog) {\n return (\n <JsControllerDialog\n socket={this.props.socket}\n hostId={this.props.hostId}\n version={this.props.jsControllerInfo.version}\n onClose={() => this.setState({ instructionDialog: false })}\n />\n );\n }\n\n return null;\n }\n\n static extractNews(changelog: string, version: string): string {\n const lines = changelog.split('\\n');\n let news = '';\n let started = false;\n for (let i = 0; i < lines.length; i++) {\n if (lines[i].startsWith('## ')) {\n if (started) {\n break;\n }\n if (lines[i].startsWith(`## ${version}`)) {\n started = true;\n }\n } else if (started) {\n news += `${lines[i].replace(/^\\*\\s*/, '').replace(/^\\(\\w+\\)\\s*/, '')}\\n`;\n }\n }\n return news;\n }\n\n getNews(all?: boolean): News[] {\n const adapter = this.props.jsControllerInfo;\n const installed = this.props.host.common.installedVersion;\n const news: News[] = [];\n\n if (installed && adapter?.news) {\n Object.keys(adapter.news).forEach(version => {\n try {\n if (semver.gt(version, installed) || all) {\n let downloaded = false;\n let newsText: string = this.props.noTranslation\n ? adapter.news[version].en\n : adapter.news[version][this.props.lang] || adapter.news[version].en;\n\n if (adapter.news[version].en === 'see CHANGELOG.md' && this.state.changeLog) {\n // try to find news in CHANGELOG\n const found = HostGeneric.extractNews(this.state.changeLog, version);\n if (found) {\n newsText = found;\n downloaded = true;\n }\n }\n\n news.push({\n version,\n news: newsText,\n downloaded,\n });\n }\n } catch {\n // ignore it\n console.warn(`Cannot compare \"${version}\" and \"${installed}\"`);\n }\n });\n }\n\n return news;\n }\n\n baseSettingsSettingsDialog(): JSX.Element | null {\n if (!this.state.baseSettingsDialog) {\n return null;\n }\n\n return (\n <BaseSettingsDialog\n key=\"base\"\n currentHost={this.props.hostId}\n themeType={this.props.themeType}\n currentHostName={this.props.host.common.name}\n onClose={() => this.setState({ baseSettingsDialog: false })}\n lang={this.props.lang}\n socket={this.props.socket}\n t={this.props.t}\n />\n );\n }\n\n renderEditObjectDialog(): JSX.Element | null {\n if (!this.state.editDialog) {\n return null;\n }\n\n return (\n <HostEdit\n obj={this.props.host}\n t={this.props.t}\n onClose={obj =>\n this.setState({ editDialog: false }, () => {\n if (obj) {\n this.props.socket\n .setObject(obj._id, obj)\n .then(() => this.forceUpdate())\n .catch(e => alert(`Cannot write object: ${e}`));\n }\n })\n }\n />\n );\n }\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n renderDialogs(): JSX.Element {\n return (\n <>\n {this.renderDialogLogLevel()}\n {this.renderHostUpdateDialog()}\n {this.renderUpdateDialog()}\n {this.renderEditObjectDialog()}\n {this.baseSettingsSettingsDialog()}\n </>\n );\n }\n}\n","import React, { type JSX } from 'react';\n\nimport { Box, Card, CardContent, CardMedia, Fab, Skeleton, Typography } from '@mui/material';\n\nimport { MoreVert as MoreVertIcon } from '@mui/icons-material';\n\nimport { Utils, type IobTheme } from '@iobroker/adapter-react-v5';\n\nimport AdminUtils from '@/AdminUtils';\nimport HostGeneric, {\n boxShadow,\n boxShadowHover,\n genericStyles,\n type HostGenericProps,\n type HostGenericState,\n} from './HostGeneric';\n\nexport const styles: Record<string, any> = {\n ...genericStyles,\n root: (theme: IobTheme) => ({\n position: 'relative',\n m: '10px',\n width: 300,\n minHeight: 200,\n background: theme.palette.background.default,\n boxShadow,\n display: 'flex',\n flexDirection: 'column',\n transition: 'box-shadow 0.5s',\n '&:hover': {\n boxShadow: boxShadowHover,\n },\n '& .warning': {\n backgroundColor: '#de0000 !important',\n '&:before': {\n position: 'absolute',\n right: 0,\n top: -5,\n content: '\"\\u26A0\"',\n fontSize: 25,\n height: '30px',\n width: '30px',\n color: 'black',\n },\n animation: '$warning 2.5s ease-in-out infinite alternate',\n },\n }),\n imageBlock: {\n minHeight: 60,\n display: 'flex',\n padding: '0 10px 0 10px',\n position: 'relative',\n justifyContent: 'space-between',\n transition: 'background 0.5s',\n },\n fab: {\n position: 'absolute',\n bottom: -20,\n width: 40,\n height: 40,\n right: 20,\n },\n\n collapse: {\n height: '100%',\n position: 'absolute',\n width: '100%',\n zIndex: 3,\n marginTop: 'auto',\n bottom: 0,\n transition: 'height 0.3s',\n justifyContent: 'space-between',\n display: 'flex',\n flexDirection: 'column',\n },\n collapseOff: {\n height: 0,\n },\n close: {\n width: 20,\n height: 20,\n opacity: 0.9,\n cursor: 'pointer',\n position: 'relative',\n ml: 'auto',\n mb: '10px',\n transition: 'all 0.6s ease',\n '&:hover': {\n transform: 'rotate(90deg)',\n },\n '&:before': {\n position: 'absolute',\n left: 9,\n content: '\"\"',\n height: 20,\n width: 3,\n backgroundColor: '#ff4f4f',\n transform: 'rotate(45deg)',\n },\n '&:after': {\n position: 'absolute',\n left: 9,\n content: '\"\"',\n height: 20,\n width: 3,\n backgroundColor: '#ff4f4f',\n transform: 'rotate(-45deg)',\n },\n },\n onOffLine: {\n alignSelf: 'center',\n width: '100%',\n height: 4,\n // borderRadius: 20,\n },\n adapter: (theme: IobTheme) => ({\n width: '100%',\n fontWeight: 'bold',\n fontSize: 16,\n verticalAlign: 'middle',\n pl: 1,\n pt: 2,\n color: theme.palette.mode === 'dark' ? '#333' : '#555',\n }),\n cardContentInfo: (theme: IobTheme) => ({\n overflow: 'auto',\n paddingTop: 0,\n backgroundColor: theme.palette.background.paper,\n color: theme.palette.mode === 'dark' ? '#EEE' : '#111',\n }),\n cardContentH5: {\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'space-between',\n paddingBottom: '10px !important',\n },\n marginTop10: {\n marginTop: 10,\n },\n displayFlex: {\n display: 'flex',\n },\n marginLeft5: {\n marginLeft: 5,\n },\n enableButton: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n instanceStateNotAlive1: {\n backgroundColor: 'rgba(192, 192, 192, 0.4)',\n },\n green: {\n background: '#00ce00',\n // border: '1px solid #014a00',\n position: 'relative',\n },\n red: {\n background: '#da0000',\n // border: '1px solid #440202',,\n // animation: '$red 3s ease-in-out infinite alternate'\n },\n dotLine: {\n width: 50,\n height: '100%',\n background:\n 'linear-gradient(90deg, rgba(0,206,0,0.7497373949579832) 0%, rgba(31,255,1,1) 50%, rgba(0,206,0,0.7805497198879552) 100%)',\n zIndex: 2,\n position: 'absolute',\n left: -11,\n // boxShadow: '12px 29px 81px 0px rgb(0 0 0 / 75%)',\n // animation: '$colors 3s ease-in-out infinite'\n },\n\n versionDate: {\n alignSelf: 'center',\n },\n\n cardContentDiv: {\n position: 'sticky',\n right: 0,\n top: 0,\n paddingTop: 10,\n },\n badge: {\n cursor: 'pointer',\n },\n curdContentFlexCenter: {\n display: 'flex',\n alignItems: 'center',\n ml: '4px',\n },\n marginRight: {\n marginRight: 'auto',\n },\n ul: {\n paddingTop: 0,\n paddingBottom: 0,\n paddingLeft: 16,\n paddingRight: 8,\n },\n value: {\n marginLeft: 5,\n },\n label: {\n fontWeight: 'bold',\n },\n};\n\ninterface HostCardProps extends HostGenericProps {\n hidden?: boolean;\n}\n\ninterface HostCardState extends HostGenericState {\n openCollapse?: boolean;\n}\n\nclass HostCard extends HostGeneric<HostCardProps, HostCardState> {\n getHostDescriptionAll(): JSX.Element | string {\n if (!this.props.hostData) {\n return <Skeleton />;\n }\n\n if (typeof this.props.hostData === 'string') {\n return this.props.hostData;\n }\n\n if (!this.props.hostData || typeof this.props.hostData !== 'object') {\n return (\n <ul\n key=\"ul\"\n style={styles.ul}\n >\n <Skeleton />\n </ul>\n );\n }\n\n return (\n <ul\n key=\"ul\"\n style={styles.ul}\n >\n {Object.keys(this.props.hostData).map(value => (\n <li key={value}>\n <span style={styles.black}>\n <span style={styles.label}>{this.props.t(value)}: </span>\n <span style={styles.value}>\n {HostGeneric.formatInfo[value]\n ? HostGeneric.formatInfo[value](\n (this.props.hostData as Record<string, any>)[value],\n this.props.t,\n )\n : (this.props.hostData as Record<string, any>)[value] || '--'}\n </span>\n </span>\n </li>\n ))}\n </ul>\n );\n }\n\n render(): JSX.Element {\n const upgradeAvailable =\n (this.props.isCurrentHost || this.props.alive) &&\n AdminUtils.updateAvailable(this.props.host.common.installedVersion, this.props.available);\n const description = this.getHostDescriptionAll();\n\n return (\n <Card\n key={this.props.hostId}\n sx={Utils.getStyle(this.props.theme, styles.root, this.props.hidden && styles.hidden)}\n >\n {this.renderDialogs()}\n {this.state.openCollapse && (\n <div style={{ ...styles.collapse, ...(!this.state.openCollapse ? styles.collapseOff : undefined) }}>\n <CardContent sx={styles.cardContentInfo}>\n <div\n style={styles.cardContentDiv}\n onClick={() => this.setState({ openCollapse: false })}\n >\n <Box\n component=\"div\"\n sx={styles.close}\n onClick={() => this.setState({ openCollapse: false })}\n />\n </div>\n {description}\n </CardContent>\n <Box\n component=\"div\"\n sx={styles.footerBlock}\n />\n </div>\n )}\n <div style={{ ...styles.onOffLine, ...(this.props.alive ? styles.green : styles.red) }}>\n {this.props.alive && <div style={styles.dotLine} />}\n </div>\n <div\n ref={this.refWarning}\n style={{\n ...styles.imageBlock,\n ...(!this.props.alive ? styles.instanceStateNotAlive1 : undefined),\n background: this.props.host.common.color || 'inherit',\n }}\n >\n <CardMedia\n sx={styles.img}\n component=\"img\"\n image={this.props.host.common.icon || 'img/no-image.png'}\n />\n <Box\n component=\"div\"\n style={Utils.getStyle(this.props.theme, styles.adapter, {\n color:\n (this.props.host.common.color &&\n Utils.invertColor(this.props.host.common.color, true)) ||\n 'inherit',\n })}\n >\n {this.renderNotificationsBadge(this.props.host.common.name, true)}\n </Box>\n {!this.state.openCollapse ? (\n <Fab\n disabled={typeof description === 'string'}\n onClick={() => this.setState({ openCollapse: true })}\n style={styles.fab}\n color=\"primary\"\n aria-label=\"add\"\n title={this.props.t('Click for more')}\n >\n <MoreVertIcon />\n </Fab>\n ) : null}\n </div>\n <CardContent style={styles.cardContentH5}>\n <Typography\n variant=\"body2\"\n color=\"textSecondary\"\n component=\"div\"\n >\n <div style={styles.displayFlex}>\n <span style={styles.label}>CPU:</span>\n <div\n ref={this.refCpu}\n style={styles.value}\n >\n - %\n </div>\n </div>\n </Typography>\n <Typography\n variant=\"body2\"\n color=\"textSecondary\"\n component=\"div\"\n >\n <div style={styles.displayFlex}>\n <span style={styles.label}>RAM:</span>\n <div\n ref={this.refMem}\n style={styles.value}\n >\n - %\n </div>\n </div>\n </Typography>\n <Typography\n variant=\"body2\"\n color=\"textSecondary\"\n component=\"div\"\n >\n <div style={styles.displayFlex}>\n <span style={styles.label}>{this.props.t('Uptime')}:</span>\n <div\n ref={this.refUptime}\n style={styles.value}\n >\n -d -h\n </div>\n </div>\n </Typography>\n <Typography\n variant=\"body2\"\n color=\"textSecondary\"\n component=\"div\"\n style={styles.wrapperAvailable}\n >\n <span style={styles.label}>{this.props.t('Available')} js-controller:</span>\n <Box\n component=\"div\"\n sx={{\n ...(upgradeAvailable ? styles.greenText : undefined),\n ...styles.curdContentFlexCenter,\n }}\n >\n {this.renderUpdateButton(upgradeAvailable)}\n </Box>\n </Typography>\n <Typography\n variant=\"body2\"\n color=\"textSecondary\"\n component=\"p\"\n >\n <span style={styles.label}>{this.props.t('Installed')} js-controller:</span>\n <span style={styles.value}>{this.props.host.common.installedVersion}</span>\n </Typography>\n <Typography\n variant=\"body2\"\n color=\"textSecondary\"\n component=\"div\"\n >\n <div style={styles.displayFlex}>\n <span style={styles.label}>{this.props.t('Events')}:</span>\n <div\n ref={this.refEvents}\n style={styles.value}\n >\n - / -\n </div>\n </div>\n </Typography>\n <div style={styles.marginTop10}>\n <Typography\n component=\"span\"\n style={styles.enableButton}\n >\n {this.renderEditButton()}\n {this.renderHostBaseEdit()}\n {this.renderRestartButton()}\n {this.props.expertMode && this.state.logLevel && this.renderLogLevel()}\n {this.renderRemoveButton()}\n {this.renderCopyButton()}\n </Typography>\n </div>\n </CardContent>\n </Card>\n );\n }\n}\n\nexport default HostCard;\n","import React, { type JSX } from 'react';\n\nimport { Box, CardContent, CardMedia, Skeleton, Typography } from '@mui/material';\n\nimport { Utils, type IobTheme } from '@iobroker/adapter-react-v5';\n\nimport AdminUtils from '@/AdminUtils';\nimport HostGeneric, {\n boxShadow,\n boxShadowHover,\n genericStyles,\n type HostGenericProps,\n type HostGenericState,\n} from './HostGeneric';\n\nconst styles: Record<string, any> = {\n ...genericStyles,\n root: (theme: IobTheme) => ({\n position: 'relative',\n m: '7px',\n background: theme.palette.background.default,\n boxShadow,\n // display: 'flex',\n overflow: 'hidden',\n transition: 'box-shadow 0.5s,height 0.3s',\n '&:hover': {\n boxShadow: boxShadowHover,\n },\n }),\n imageBlock: {\n marginRight: 6,\n minHeight: 60,\n width: '100%',\n maxWidth: 300,\n display: 'flex',\n padding: '0 10px 0 10px',\n position: 'relative',\n justifyContent: 'space-between',\n transition: 'background 0.5s',\n alignItems: 'baseline',\n },\n collapse: {\n height: 200,\n backgroundColor: 'rgba(128, 128, 128, 0.1)',\n // position: 'absolute',\n width: '100%',\n zIndex: 3,\n marginTop: 'auto',\n bottom: 0,\n transition: 'height 0.3s',\n justifyContent: 'space-between',\n display: 'flex',\n flexDirection: 'column',\n },\n collapseOn: {\n animation: 'height 1s',\n },\n onOff: {\n alignSelf: 'center',\n width: 4,\n height: '100%',\n // borderRadius: 20,\n // position: 'absolute',\n // top: 5,\n // right: 5,\n },\n host: (theme: IobTheme) => ({\n width: '100%',\n fontWeight: 'bold',\n fontSize: 16,\n paddingLeft: '8px',\n alignSelf: 'center',\n color: theme.palette.mode === 'dark' ? '#ddd' : '#222',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }),\n cardContentH5: {\n height: '100%',\n display: 'flex',\n width: '100%',\n justifyContent: 'space-between',\n padding: '10px !important',\n alignItems: 'center',\n },\n marginTop10: {\n // marginTop: 10\n marginLeft: 'auto',\n display: 'flex',\n },\n enableButton: {\n display: 'flex',\n justifyContent: 'space-between',\n },\n green: {\n background: '#00ce00',\n position: 'relative',\n overflow: 'hidden',\n },\n dotLine: {\n width: 10,\n height: 20,\n background:\n 'linear-gradient( rgba(0,206,0,0.7497373949579832) 0%, rgba(31,255,1,1) 50%, rgba(0,206,0,0.7805497198879552) 100%)',\n zIndex: 2,\n position: 'absolute',\n top: -21,\n // animation: '$colors 3s ease-in-out infinite'\n },\n red: {\n background: '#da0000',\n // animation: '$red 3s ease-in-out infinite alternate'\n },\n\n flex: {\n flex: 1,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n cardContentInfo: {\n overflow: 'auto',\n paddingTop: 0,\n justifyContent: 'center',\n display: 'flex',\n height: '100%',\n position: 'relative',\n // alignItems: 'center'\n },\n cursorNoDrop: {\n cursor: 'no-drop !important',\n },\n wrapperFlex: {\n display: 'flex',\n cursor: 'pointer',\n '& .warning': {\n backgroundColor: '#de0000 !important',\n '&:before': {\n position: 'absolute',\n right: 0,\n top: -5,\n content: '\"\\u26A0\"',\n fontSize: 25,\n height: '30px',\n width: '30px',\n color: 'black',\n },\n animation: '$warning 2.5s ease-in-out infinite alternate',\n },\n '@media screen and (max-width: 500px)': {\n flexDirection: 'column',\n },\n },\n wrapperColor: {\n position: 'relative',\n overflow: 'hidden',\n },\n hidden1100: {\n '@media screen and (max-width: 1100px)': {\n display: 'none !important',\n },\n },\n hidden800: {\n '@media screen and (max-width: 800px)': {\n display: 'none !important',\n },\n },\n hidden600: {\n '@media screen and (max-width: 600px)': {\n display: 'none !important',\n },\n },\n badge: {\n top: 14,\n },\n curdContentFlexCenter: {\n display: 'flex',\n alignItems: 'center',\n },\n wrapperInfo: {\n display: 'flex',\n flexFlow: 'wrap',\n width: '100%',\n justifyContent: 'space-around',\n },\n wrapperBlockItem: {\n display: 'flex',\n flexFlow: 'nowrap',\n whiteSpace: 'nowrap',\n margin: 10,\n },\n bold: {\n fontWeight: 'bold',\n },\n nowrap: {\n display: 'flex',\n flexFlow: 'nowrap',\n flex: 1,\n whiteSpace: 'nowrap',\n marginRight: 5,\n },\n cell: {\n // paddingLeft: 6,\n },\n};\n\ninterface HostRowProps extends HostGenericProps {\n hidden?: boolean;\n}\n\ninterface HostRowState extends HostGenericState {\n openCollapse?: boolean;\n}\n\nclass HostRow extends HostGeneric<HostRowProps, HostRowState> {\n renderValue(value: string): JSX.Element | null {\n if (typeof this.props.hostData !== 'object') {\n return null;\n }\n return (\n <div\n style={styles.wrapperBlockItem}\n key={value}\n >\n <span style={{ ...styles.bold, ...styles.nowrap }}>{this.props.t(value)}: </span>\n {HostGeneric.formatInfo[value]\n ? HostGeneric.formatInfo[value](this.props.hostData[value], this.props.t)\n : this.props.hostData[value] || '--'}\n </div>\n );\n }\n\n getHostDescriptionAll(): JSX.Element | string {\n if (!this.props.hostData) {\n return <Skeleton />;\n }\n\n if (typeof this.props.hostData === 'string') {\n return this.props.hostData;\n }\n\n return (\n <div style={styles.wrapperInfo}>\n <div style={styles.marginRight}>\n {this.props.hostData && typeof this.props.hostData === 'object' ? (\n Object.keys(this.props.hostData).map((value, idx) => idx < 5 && this.renderValue(value))\n ) : (\n <Skeleton />\n )}\n </div>\n <div style={styles.marginRight}>\n {this.props.hostData && typeof this.props.hostData === 'object' ? (\n Object.keys(this.props.hostData).map(\n (value, idx) => idx > 4 && idx < 10 && this.renderValue(value),\n )\n ) : (\n <Skeleton />\n )}\n </div>\n <div style={styles.marginRight}>\n {this.props.hostData &&\n typeof this.props.hostData === 'object' &&\n Object.keys(this.props.hostData).map((value, idx) => idx > 10 && this.renderValue(value))}\n </div>\n </div>\n );\n }\n\n render(): JSX.Element {\n const upgradeAvailable =\n (this.props.isCurrentHost || this.props.alive) &&\n AdminUtils.updateAvailable(this.props.host.common.installedVersion, this.props.available);\n const description = this.getHostDescriptionAll();\n\n return (\n <Box\n component=\"div\"\n sx={Utils.getStyle(this.props.theme, styles.root, this.props.hidden && styles.hidden, {\n border: `2px solid ${this.props.host.common.color || 'inherit'}`,\n borderRadius: '5px',\n })}\n key={this.props.hostId}\n >\n {this.renderDialogs()}\n <Box\n component=\"div\"\n sx={{ ...styles.wrapperFlex, ...(!this.props.alive ? styles.cursorNoDrop : undefined) }}\n onClick={\n this.state.openDialogLogLevel\n ? null\n : () => this.setState({ openCollapse: !this.state.openCollapse })\n }\n >\n <div style={styles.wrapperColor}>\n <div style={{ ...styles.onOff, ...(this.props.alive ? styles.green : styles.red) }} />\n {this.props.alive && <div style={styles.dotLine} />}\n </div>\n <div\n ref={this.refWarning}\n style={{ ...styles.imageBlock, background: this.props.host.common.color || 'inherit' }}\n >\n {this.renderNotificationsBadge(\n <CardMedia\n sx={styles.img}\n component=\"img\"\n image={this.props.host.common.icon || 'img/no-image.png'}\n />,\n true,\n )}\n <div\n style={Utils.getStyle(this.props.theme, styles.host, {\n color:\n (this.props.host.common.color &&\n Utils.invertColor(this.props.host.common.color, true)) ||\n 'inherit',\n })}\n >\n {this.props.host.common.name}\n </div>\n </div>\n <CardContent sx={{ '&.MuiCardContent-root': styles.cardContentH5 }}>\n <Typography\n sx={{ ...styles.flex, ...styles.hidden800, ...styles.cell }}\n variant=\"body2\"\n color=\"textSecondary\"\n component=\"div\"\n >\n <div ref={this.refCpu}>- %</div>\n </Typography>\n <Typography\n sx={{ ...styles.flex, ...styles.hidden800, ...styles.cell }}\n variant=\"body2\"\n color=\"textSecondary\"\n component=\"div\"\n >\n <div ref={this.refMem}>- %</div>\n </Typography>\n <Typography\n sx={{ ...styles.flex, ...styles.hidden800, ...styles.cell }}\n variant=\"body2\"\n color=\"textSecondary\"\n component=\"div\"\n >\n <div ref={this.refUptime}>-/-</div>\n </Typography>\n <Typography\n sx={{ ...styles.flex, ...styles.hidden1100 }}\n variant=\"body2\"\n color=\"textSecondary\"\n component=\"p\"\n >\n {this.props.host.common.installedVersion}\n </Typography>\n <Typography\n sx={{ ...styles.flex, ...styles.hidden1100, ...styles.cell }}\n variant=\"body2\"\n color=\"textSecondary\"\n component=\"div\"\n >\n <Box\n component=\"div\"\n sx={{\n ...(upgradeAvailable ? styles.greenText : undefined),\n ...styles.curdContentFlexCenter,\n }}\n >\n {this.renderUpdateButton(upgradeAvailable)}\n </Box>\n </Typography>\n <Typography\n sx={{ ...styles.flex, ...styles.hidden600, ...styles.cell }}\n variant=\"body2\"\n color=\"textSecondary\"\n component=\"div\"\n >\n <div ref={this.refEvents}>- / -</div>\n </Typography>\n <div style={styles.marginTop10}>\n <Typography\n component=\"span\"\n style={styles.enableButton}\n >\n {this.renderEditButton()}\n {this.renderHostBaseEdit()}\n {this.renderRestartButton()}\n {this.props.expertMode && this.state.logLevel ? (\n this.renderLogLevel()\n ) : (\n <div style={styles.emptyButton} />\n )}\n {this.renderRemoveButton()}\n {this.renderExtendButton(this.state.openCollapse)}\n </Typography>\n </div>\n </CardContent>\n </Box>\n {typeof description === 'object' && (\n <div\n style={{\n ...styles.collapse,\n ...(!this.state.openCollapse ? styles.collapseOff : styles.collapseOn),\n }}\n onClick={event => event.stopPropagation()}\n >\n <CardContent style={styles.cardContentInfo}>\n {description}\n {this.renderCopyButton({ height: 44, width: 44 })}\n </CardContent>\n <Box\n component=\"div\"\n sx={styles.footerBlock}\n />\n </div>\n )}\n </Box>\n );\n }\n}\n\nexport default HostRow;\n","import React, { Component, type JSX } from 'react';\n\nimport { IconButton, Tooltip, InputAdornment, LinearProgress, TextField, Box } from '@mui/material';\n\nimport {\n Refresh as RefreshIcon,\n ViewList as ViewListIcon,\n ViewModule as ViewModuleIcon,\n Close as CloseIcon,\n} from '@mui/icons-material';\n\nimport {\n withWidth,\n Utils,\n TabHeader,\n TabContent,\n TabContainer,\n type AdminConnection,\n type IobTheme,\n type ThemeType,\n type Translate,\n} from '@iobroker/adapter-react-v5';\n\nimport SlowConnectionWarningDialog, { SlowConnectionWarningDialogClass } from '@/dialogs/SlowConnectionWarningDialog';\nimport type HostsWorker from '@/Workers/HostsWorker';\nimport type { NotificationAnswer, HostAliveEvent, HostEvent } from '@/Workers/HostsWorker';\nimport type { RepoAdapterObject } from '@/components/Adapters/Utils';\nimport { blinkClasses } from '@/components/Hosts/HostGeneric';\nimport HostCard from '../components/Hosts/HostCard';\nimport HostRow from '../components/Hosts/HostRow';\n\nconst styles: Record<string, any> = {\n grow: {\n flexGrow: 1,\n },\n cards: {\n display: 'flex',\n flexFlow: 'wrap',\n justifyContent: 'center',\n },\n tabHeaderWrapper: {\n height: 30,\n display: 'flex',\n margin: 7,\n },\n tabHeaderFirstItem: {\n width: 306,\n paddingLeft: 30,\n fontSize: 14,\n fontWeight: 600,\n alignSelf: 'center',\n },\n tabHeaderItem: {\n flex: 1,\n fontSize: 14,\n fontWeight: 600,\n alignSelf: 'center',\n },\n tabHeaderItemButton: {\n fontSize: 14,\n fontWeight: 600,\n alignSelf: 'center',\n },\n widthButtons: {\n width: 240,\n },\n tabFlex: {\n display: 'flex',\n flex: 1,\n padding: '0 10px',\n },\n bold: {\n fontWeight: 'bold',\n },\n marginRight: {\n marginRight: 'auto',\n },\n notStableRepo: (theme: IobTheme) => ({\n background: theme.palette.mode === 'dark' ? '#8a7e00' : '#fdee20',\n color: '#000',\n fontSize: 14,\n padding: '2px 8px',\n borderRadius: '5px',\n }),\n hidden1100: {\n '@media screen and (max-width: 1100px)': {\n display: 'none !important',\n },\n },\n hidden800: {\n '@media screen and (max-width: 800px)': {\n display: 'none !important',\n },\n },\n hidden600: {\n '@media screen and (max-width: 600px)': {\n display: 'none !important',\n },\n },\n jsController: {\n fontSize: 12,\n opacity: 0.4,\n display: 'block',\n },\n tooltip: {\n pointerEvents: 'none',\n },\n};\n\nconst wordCache: Record<string, string> = {};\n\n/**\n * Preprocess host data to harmonize information\n *\n * @param hostData Host data from controller\n */\nfunction preprocessHostData(hostData: Record<string, any>): void {\n if (hostData.dockerInformation?.isDocker) {\n let dockerString = hostData.dockerInformation.isOfficial ? 'official image' : 'unofficial image';\n\n if (hostData.dockerInformation.isOfficial) {\n dockerString += ` - ${hostData.dockerInformation.officialVersion}`;\n }\n\n hostData.Platform = `${hostData.Platform} (${dockerString})`;\n }\n\n delete hostData.dockerInformation;\n}\n\ninterface HostsProps {\n t: Translate;\n expertMode: boolean;\n socket: AdminConnection;\n systemConfig: ioBroker.SystemConfigObject;\n executeCommand: (command: string) => void;\n hostsWorker: HostsWorker;\n showAdaptersWarning: (notifications: Record<string, NotificationAnswer>, hostId: string) => void;\n theme: IobTheme;\n noTranslation: boolean;\n toggleTranslation: () => void;\n currentHost: string;\n adminInstance: string;\n onUpdating: (updating: boolean) => void;\n themeType: ThemeType;\n lang: ioBroker.Languages;\n}\n\ninterface HostsState {\n repository: Record<string, RepoAdapterObject>;\n viewMode: boolean;\n alive: Record<`system.host.${string}`, boolean>;\n hosts: ioBroker.HostObject[];\n hostsData: Record<`system.host.${string}`, Record<string, any> | string>;\n filterText: string;\n showSlowConnectionWarning: boolean;\n readTimeoutMs: number;\n}\n\n// every tab should get their data itself from server\nclass Hosts extends Component<HostsProps, HostsState> {\n constructor(props: HostsProps) {\n super(props);\n\n this.state = {\n viewMode:\n (((window as any)._localStorage as Storage) || window.localStorage).getItem('Hosts.viewMode') ===\n 'true',\n alive: {},\n hosts: [],\n repository: {},\n hostsData: {},\n filterText:\n (((window as any)._localStorage as Storage) || window.localStorage).getItem('Hosts.filterText') || '',\n showSlowConnectionWarning: false,\n readTimeoutMs: SlowConnectionWarningDialogClass.getReadTimeoutMs(),\n };\n }\n\n // cache translations\n t = (word: string, arg1?: any, arg2?: any): string => {\n if (arg1 !== undefined && arg2 !== undefined && !wordCache[`${word} ${arg1} ${arg2}`]) {\n wordCache[`${word} ${arg1} ${arg2}`] = this.props.t(word, arg1, arg2);\n } else if (arg1 !== undefined && !wordCache[`${word} ${arg1}`]) {\n wordCache[`${word} ${arg1}`] = this.props.t(word, arg1);\n } else if (!wordCache[word]) {\n wordCache[word] = this.props.t(word);\n }\n\n return arg1 !== undefined && arg2 !== undefined\n ? wordCache[`${word} ${arg1} ${arg2}`]\n : arg1 !== undefined\n ? wordCache[`${word} ${arg1}`]\n : wordCache[word];\n };\n\n componentDidMount(): void {\n void this.readInfo().then(() => {\n this.props.hostsWorker.registerHandler(this.updateHosts);\n this.props.hostsWorker.registerAliveHandler(this.updateHostsAlive);\n });\n }\n\n componentWillUnmount(): void {\n this.props.hostsWorker.unregisterHandler(this.updateHosts);\n this.props.hostsWorker.unregisterAliveHandler(this.updateHostsAlive);\n }\n\n getHostsData(\n hosts: ioBroker.HostObject[],\n _alive: Record<string, boolean>,\n ): Promise<Record<string, Record<string, any> | string>> {\n const promises: Promise<{ id: `system.host.${string}`; data: Record<string, any> | string }>[] = [];\n\n for (let h = 0; h < hosts.length; h++) {\n if (_alive[hosts[h]._id]) {\n const promise = this.props.socket\n .getHostInfo(hosts[h]._id, null, this.state.readTimeoutMs)\n .catch((error: string) => {\n console.error(`Cannot get getHostInfo: ${error}`);\n if (error.toString().includes('timeout')) {\n this.setState({ showSlowConnectionWarning: true });\n }\n return { id: hosts[h]._id, data: error.toString() };\n })\n .then((data: Record<string, any>) => {\n preprocessHostData(data);\n return { id: hosts[h]._id, data };\n });\n promises.push(promise);\n } else {\n promises.push(Promise.resolve({ id: hosts[h]._id, data: 'offline' }));\n }\n }\n\n return Promise.all(promises).then(results => {\n const _hostsData: Record<string, Record<string, any> | string> = {};\n results.forEach(res => (_hostsData[res.id] = res.data));\n return _hostsData;\n });\n }\n\n readInfo(): Promise<void> {\n return this.props.socket.getHosts(true).then(hosts =>\n this.props.socket\n .getRepository(this.props.currentHost, { update: false }, false, this.state.readTimeoutMs)\n .then(async repository => {\n const alive = JSON.parse(JSON.stringify(this.state.alive));\n\n for (let h = 0; h < hosts.length; h++) {\n const aliveValue = await this.props.socket.getState(`${hosts[h]._id}.alive`);\n alive[hosts[h]._id] = !aliveValue ? false : !!aliveValue.val;\n }\n\n const hostsData = await this.getHostsData(hosts, alive);\n const newState: Partial<HostsState> = {\n alive,\n hosts,\n hostsData,\n repository,\n };\n if (this.state.filterText && hosts.length <= 2) {\n newState.filterText = '';\n }\n this.setState(newState as HostsState);\n })\n .catch(e => {\n window.alert(`Cannot getRepository: ${e}`);\n if (e.toString().includes('timeout')) {\n this.setState({ showSlowConnectionWarning: true });\n }\n }),\n );\n }\n\n updateHosts = (events: HostEvent[]): void => {\n const hosts: ioBroker.HostObject[] = JSON.parse(JSON.stringify(this.state.hosts));\n const alive: Record<`system.host.${string}`, boolean> = JSON.parse(JSON.stringify(this.state.alive));\n\n void Promise.all(\n events.map(async event => {\n const elementFind = hosts.find(host => host._id === event.id);\n if (elementFind) {\n const index = hosts.indexOf(elementFind);\n if (event.obj) {\n // updated\n hosts[index] = event.obj;\n } else {\n // deleted\n hosts.splice(index, 1);\n }\n } else {\n const state = await this.props.socket.getState(`${event.id}.alive`);\n alive[event.id] = !!state?.val;\n // new\n hosts.push(event.obj);\n }\n }),\n ).then(() => {\n const newState: Partial<HostsState> = { hosts, alive };\n\n if (this.state.filterText && hosts.length <= 2) {\n newState.filterText = '';\n }\n\n this.setState(newState as HostsState);\n });\n };\n\n updateHostsAlive = (events: HostAliveEvent[]): void => {\n const alive: Record<`system.host.${string}`, boolean> = JSON.parse(JSON.stringify(this.state.alive));\n let changed = false;\n\n events.forEach(event => {\n if (event.type === 'deleted') {\n if (alive[event.id] !== undefined) {\n delete alive[event.id];\n changed = true;\n }\n } else if (!!alive[event.id] !== !!event.alive) {\n alive[event.id] = event.alive;\n changed = true;\n }\n });\n\n if (changed) {\n this.setState({ alive });\n }\n };\n\n getPanelsOrRows(): string | JSX.Element[] {\n const items = this.renderHosts().filter(host => host);\n\n return items.length ? items : this.t('All items are filtered out');\n }\n\n renderSlowConnectionWarning(): JSX.Element | null {\n if (!this.state.showSlowConnectionWarning) {\n return null;\n }\n return (\n <SlowConnectionWarningDialog\n readTimeoutMs={this.state.readTimeoutMs}\n t={this.t}\n onClose={async readTimeoutMs => {\n this.setState({ showSlowConnectionWarning: false });\n if (readTimeoutMs) {\n this.setState({ readTimeoutMs });\n await this.readInfo();\n }\n }}\n />\n );\n }\n\n renderHosts(): (JSX.Element | null)[] {\n return this.state.hosts.map(host => {\n if (\n this.state.filterText &&\n !host.common.name.toLowerCase().includes(this.state.filterText.toLowerCase())\n ) {\n return null;\n }\n const HostElement = this.state.viewMode ? HostCard : HostRow;\n\n return (\n <HostElement\n key={host._id}\n adminInstance={this.props.adminInstance}\n alive={this.state.alive[host._id]}\n available={this.state.repository['js-controller']?.version || '-'}\n executeCommandRemove={() => this.props.executeCommand(`host remove ${host.common.name}`)}\n expertMode={this.props.expertMode}\n host={host}\n hostData={this.state.hostsData[host._id]}\n hostId={host._id}\n hostsWorker={this.props.hostsWorker}\n isCurrentHost={this.props.currentHost === host._id}\n jsControllerInfo={this.state.repository['js-controller']}\n lang={this.props.lang}\n noTranslation={this.props.noTranslation}\n onUpdating={this.props.onUpdating}\n showAdaptersWarning={this.props.showAdaptersWarning}\n socket={this.props.socket}\n systemConfig={this.props.systemConfig}\n t={this.t}\n theme={this.props.theme}\n themeType={this.props.themeType}\n toggleTranslation={this.props.toggleTranslation}\n />\n );\n });\n }\n\n renderTableHeader(): JSX.Element {\n return (\n <div style={styles.tabHeaderWrapper}>\n <div style={styles.tabHeaderFirstItem}>{this.t('Name:')}</div>\n <div style={styles.tabFlex}>\n {/* <div className={UtilsCommon.clsx(classes.tabHeaderItem, classes.hidden600)}>{t('Title:')}</div> */}\n <Box\n component=\"div\"\n sx={Utils.getStyle(this.props.theme, styles.tabHeaderItem, styles.hidden800)}\n >\n CPU\n </Box>\n <Box\n component=\"div\"\n sx={Utils.getStyle(this.props.theme, styles.tabHeaderItem, styles.hidden800)}\n >\n RAM\n </Box>\n <Box\n component=\"div\"\n sx={Utils.getStyle(this.props.theme, styles.tabHeaderItem, styles.hidden800)}\n >\n {this.t('Uptime')}\n </Box>\n <Box\n component=\"div\"\n sx={Utils.getStyle(this.props.theme, styles.tabHeaderItem, styles.hidden1100)}\n >\n {this.t('Installed')}\n <div style={styles.jsController}>js-controller</div>\n </Box>\n <Box\n component=\"div\"\n sx={Utils.getStyle(this.props.theme, styles.tabHeaderItem, styles.hidden1100)}\n >\n {this.t('Available')}\n <div style={styles.jsController}>js-controller</div>\n </Box>\n <Box\n component=\"div\"\n sx={Utils.getStyle(this.props.theme, styles.tabHeaderItem, styles.hidden600)}\n >\n {this.t('Events')}\n </Box>\n <div\n style={{\n ...styles.tabHeaderItemButton,\n width: this.props.expertMode ? 292 : 244,\n }}\n />\n </div>\n </div>\n );\n }\n\n render(): JSX.Element {\n if (!this.state.hosts.length) {\n return <LinearProgress />;\n }\n\n return (\n <TabContainer>\n <style>{blinkClasses}</style>\n {this.renderSlowConnectionWarning()}\n <TabHeader>\n <Tooltip\n title={this.t('Show / hide List')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n size=\"large\"\n onClick={() => {\n (((window as any)._localStorage as Storage) || window.localStorage).setItem(\n 'Hosts.viewMode',\n this.state.viewMode ? 'false' : 'true',\n );\n this.setState({ viewMode: !this.state.viewMode });\n }}\n >\n {this.state.viewMode ? <ViewModuleIcon /> : <ViewListIcon />}\n </IconButton>\n </Tooltip>\n <Tooltip\n title={this.t('Reload')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n size=\"large\"\n onClick={() => this.forceUpdate()}\n >\n <RefreshIcon />\n </IconButton>\n </Tooltip>\n <div style={styles.grow} />\n {this.state.hosts.length > 2 ? (\n <TextField\n variant=\"standard\"\n label={this.t('Filter')}\n style={{ margin: '5px 0' }}\n value={this.state.filterText}\n onChange={event => {\n (((window as any)._localStorage as Storage) || window.localStorage).setItem(\n 'Hosts.viewMode',\n event.target.value,\n );\n this.setState({ filterText: event.target.value });\n }}\n slotProps={{\n input: {\n endAdornment: this.state.filterText ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => {\n (\n ((window as any)._localStorage as Storage) ||\n window.localStorage\n ).setItem('Hosts.viewMode', '');\n this.setState({ filterText: '' });\n }}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n ) : null}\n <div style={styles.grow} />\n </TabHeader>\n <TabContent overflow=\"auto\">\n {!Utils.isStableRepository(this.props.systemConfig.common.activeRepo) ? (\n <Box\n component=\"div\"\n sx={styles.notStableRepo}\n >\n {this.t('Active repo is \"%s\"', this.props.systemConfig.common.activeRepo)}\n </Box>\n ) : null}\n <div style={this.state.viewMode ? styles.cards : undefined}>\n {!this.state.viewMode && this.renderTableHeader()}\n {this.getPanelsOrRows()}\n </div>\n </TabContent>\n </TabContainer>\n );\n }\n}\n\nexport default withWidth()(Hosts);\n"],"names":["JsControllerUpdater","Component","constructor","props","super","updating","textareaRef","React","link","window","location","protocol","host","interval","startTimeout","this","state","response","error","starting","setUpdating","onUpdating","findIpAddress","_settings$config","_settings$config$obje","_host$native","_host$native$hardware","socket","getObject","adminInstance","common","hostId","settings","readBaseSettings","hostIp","config","objects","ipaddr","toString","native","hardware","networkInterfaces","networkInterface","Object","values","find","addr","iIP","cidr","internal","match","family","address","port","componentDidMount","e","console","message","upgradeController","version","parseInt","split","pop","setState","I18n","t","setInterval","checkStatus","setTimeout","componentWillUnmount","clearInterval","clearTimeout","log","res","fetch","plainBody","text","JSON","parse","stderr","filter","line","trim","running","success","stdout","push","unshift","current","scrollTop","scrollHeight","render","_this$state$response","_this$state$response2","_this$state$response4","_this$state$response5","_this$state$response6","_jsxs","Dialog","onClose","_e","reason","open","maxWidth","fullWidth","children","_jsx","DialogTitle","DialogContent","style","height","padding","overflow","LinearProgress","ref","width","resize","background","themeType","color","boxSizing","fontFamily","border","undefined","value","length","join","readOnly","DialogActions","Button","id","variant","disabled","onClick","_this$state$response3","reload","startIcon","ReloadIcon","CloseIcon","styles","root","display","flexDirection","paper","overflowHidden","h1","fontWeight","fontSize","margin","h2","theme","p","borderRadius","palette","mode","h22","m","standardText","textDecoration","standardTextSmall","standardTextSmall2","pre","whiteSpace","position","copyButton","right","top","comment","accordionSummary","accordionDetails","code","backgroundColor","copyButtonSmall","removeChapter","remove","mustContain","lines","newLines","found","i","toLowerCase","startsWith","includes","_ref","readme","setReadme","useState","setLocation","os","setOS","copyTextToClipboard","Utils","copyToClipboard","alert","useEffect","getHostInfoShort","then","data","getLanguage","_readme","_os","_location","replace","readmeLines","parts","forEach","chapter","parts_","button","small","IconButton","IconCopy","catch","sx","dividers","_Fragment","map","ReactMarkdown","components","em","_ref2","a","_ref3","_ref4","Box","component","Card","href","target","rel","size","Accordion","paddingTop","AccordionSummary","expandIcon","ExpandMoreIcon","AccordionDetails","CONTROLLER_CHANGELOG_URL","DescriptionIcon","maxHeight","controlItem","marginBottom","marginRight","marginLeft","RAM","BaseSettingsSystem","focusRef","memoryLimitMB","hostname","statisticsInterval","checkDiskInterval","instanceStartInterval","compact","allowShellCommands","memLimitWarn","memLimitError","noChmod","createRef","_this$focusRef$curren","focus","onChange","Paper","Grid2","gridSettings","container","direction","TextField","label","currentHost","helperText","type","slotProps","htmlInput","min","FormControlLabel","control","Checkbox","checked","withWidth","BaseSettingsMultihost","enabled","secure","password","decrypt","plainPass","newState","encrypt","encodedPass","form","noValidate","autoComplete","input","dangerZone","dangerZoneHeader","paddingLeft","paddingBottom","marginTop","warning","DEFAULT_JSONL_OPTIONS","autoCompress","sizeFactor","sizeFactorMinimumSize","throttleFS","intervalMs","maxBufferedCommands","BaseSettingsObjects","options","auth_pass","retry_max_delay","retry_max_count","db","backup","files","hours","period","path","jsonlOptions","Array","isArray","noFileCache","dataDir","connectTimeout","writeFileInterval","options_auth_pass","pass","options_retry_max_delay","options_retry_max_count","options_db","options_family","backup_disabled","backup_files","backup_hours","backup_period","backup_path","jsonlOptions_autoCompress_sizeFactor","jsonlOptions_autoCompress_sizeFactorMinimumSize","jsonlOptions_throttleFS_intervalMs","jsonlOptions_throttleFS_maxBufferedCommands","textIP","IPs","loading","showWarningDialog","toConfirmType","originalDBType","getIpAddresses","_IPs","renderWarning","DialogConfirm","title","result","Tooltip","popper","pointerEvents","FormControl","InputLabel","Select","MenuItem","Switch","ip","max","FormGroup","FormHelperText","BaseSettingsStates","mixins","toolbar","minHeight","delButton","addButton","buttonIcon","headingIcon","BaseSettingsLog","transport","keys","multiplier","maxSize","level","maxFiles","facility","sysLogType","app_name","eol","auth","ssl","stream","silent","serverUrl","apiKey","maxDays","noStdout","expanded","stringify","onDelete","renderEnabled","name","renderLogLevel","renderValue","renderSyslog","pos","indexOf","splice","IconSyslog","Typography","heading","Fab","IconDelete","localhost","renderFile","IconFile","filename","fileext","renderHttp","IconHttp","renderStream","IconStream","renderSEQ","src","IconSeq","alt","findFreeName","add","Toolbar","IconPlus","divWithoutTitle","BaseSettingsPlugins","Editor","newValue","content","tabPanel","selected","BaseSettingsDialog","originalSettings","currentTab","hasChanges","confirmExit","showRestart","system","multihostService","states","plugins","dnsResolution","saving","getSettings","renderConfirmDialog","ConfirmDialog","renderRestartDialog","ok","cancel","restartController","answer","AdminUtils","clone","onSave","newSettings","writeBaseSettings","updateSettings","changed","renderSystem","renderMultihost","renderObjects","renderStates","renderLog","renderPlugins","dialog","currentHostName","AppBar","Tabs","_event","newTab","indicatorColor","Tab","CheckIcon","fontStyle","funcDivEdit","funcEditName","funcEdit","commonTabWrapper","flexFlow","commonWrapper","minWidth","flexDrop","marginBlock","buttonAdd","textField","flex","close","opacity","cursor","transition","transform","left","buttonRemoveWrapper","zIndex","tabsPadding","HostEdit","originalObj","obj","prepareObject","_id","json","onUpdate","setCommonItem","removeCommonItem","buttonAddKey","nameKey","cb","IconAdd","buttonRemoveKey","renderCommonEdit","el","endAdornment","InputAdornment","icon","UploadImage","crop","removeIconFunc","base64","fullScreen","IconCheck","IconClose","boxShadow","boxShadowHover","genericStyles","img","backgroundSize","collapseOff","footerBlock","default","justifyContent","hidden","emptyButton","greenText","dark","wrapperAvailable","alignItems","buttonUpdate","green","buttonUpdateIcon","debug","grey","info","blue","warn","amber","red","smallAvatar","formControl","baseSettingsButton","tooltip","arrayLogLevel","toggleClassName","classNames","className","_classNames","HostGeneric","refEvents","refWarning","refCpu","refMem","refUptime","outputCache","inputCache","cpuCache","memCache","uptimeCache","diskFreeCache","diskSizeCache","diskWarningCache","notificationHandler","notifications","errorHost","count","calculateWarning","eventsInputFunc","val","innerHTML","eventsOutputFunc","output","warningFunc","name_","endsWith","setAttribute","classList","removeAttribute","cpuFunc","formatValue","memFunc","uptimeFunc","d","Math","floor","h","logLevelFunc","logLevel","logLevelSelect","openDialogLogLevel","hostUpdateDialog","updateAvailable","instructionDialog","updateDialog","baseSettingsDialog","editDialog","changeLog","getInitialDiskStates","diskWarningState","getState","diskFreeState","diskSizeState","readChangeLog","hostsWorker","registerNotificationHandler","getNotifications","subscribeState","finally","async","unregisterNotificationHandler","unsubscribeState","categories","nameTab","instances","unit","systemConfig","isFloatComma","renderDialogLogLevel","CustomModal","onApply","BuildIcon","onCopy","available","installedVersion","hostData","formatInfo","renderUpdateButton","upgradeAvailable","event","stopPropagation","openHostUpdateDialog","RefreshIcon","renderHostBaseEdit","expertMode","alive","renderExtendButton","BiChevronUp","BiChevronDown","renderRestartButton","err","CachedIcon","renderEditButton","EditIcon","renderRemoveButton","isCurrentHost","executeCommandRemove","DeleteIcon","renderCopyButton","Avatar","BugReportIcon","InfoIcon","WarningIcon","ErrorIcon","renderNotificationsBadge","styled","Badge","badgeContent","badge","showAdaptersWarning","checkFeatureSupported","renderHostUpdateDialog","AdapterUpdateDialog","adapter","adapterObject","jsControllerInfo","textUpdate","textInstruction","rightDependencies","news","getNews","toggleTranslation","noTranslation","onInstruction","renderUpdateDialog","isUpdating","JsControllerDialog","extractNews","changelog","started","all","installed","semver","downloaded","newsText","en","lang","baseSettingsSettingsDialog","renderEditObjectDialog","setObject","forceUpdate","renderDialogs","Uptime","formatSeconds","formatRam","Speed","formatSpeed","formatBytes","animation","imageBlock","fab","bottom","collapse","ml","mb","onOffLine","alignSelf","verticalAlign","pl","pt","cardContentInfo","cardContentH5","marginTop10","displayFlex","marginLeft5","enableButton","instanceStateNotAlive1","dotLine","versionDate","cardContentDiv","curdContentFlexCenter","ul","paddingRight","getHostDescriptionAll","black","Skeleton","description","getStyle","openCollapse","CardContent","CardMedia","image","invertColor","MoreVertIcon","collapseOn","onOff","textOverflow","cursorNoDrop","wrapperFlex","wrapperColor","hidden1100","hidden800","hidden600","wrapperInfo","wrapperBlockItem","bold","nowrap","cell","idx","grow","flexGrow","cards","tabHeaderWrapper","tabHeaderFirstItem","tabHeaderItem","tabHeaderItemButton","widthButtons","tabFlex","notStableRepo","jsController","wordCache","preprocessHostData","_hostData$dockerInfor","dockerInformation","isDocker","dockerString","isOfficial","officialVersion","Platform","Hosts","word","arg1","arg2","updateHosts","events","hosts","Promise","elementFind","index","filterText","updateHostsAlive","viewMode","_localStorage","localStorage","getItem","repository","hostsData","showSlowConnectionWarning","readTimeoutMs","SlowConnectionWarningDialogClass","getReadTimeoutMs","readInfo","registerHandler","registerAliveHandler","unregisterHandler","unregisterAliveHandler","getHostsData","_alive","promises","promise","getHostInfo","resolve","results","_hostsData","getHosts","getRepository","update","aliveValue","getPanelsOrRows","items","renderHosts","renderSlowConnectionWarning","SlowConnectionWarningDialog","_this$state$repositor","HostElement","HostCard","HostRow","executeCommand","renderTableHeader","TabContainer","TabHeader","setItem","ViewModuleIcon","ViewListIcon","TabContent","isStableRepository","activeRepo"],"sourceRoot":""}