@iobroker/adapter-react-v5 7.6.17 → 7.6.18
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.
- package/build/Components/Image.d.ts +2 -0
- package/build/Components/Image.js +4 -3
- package/build/Components/Image.js.map +1 -1
- package/build/LegacyConnection.js +48 -37
- package/build/LegacyConnection.js.map +1 -1
- package/build/i18n/de.json +7 -0
- package/build/i18n/en.json +7 -0
- package/build/i18n/es.json +7 -0
- package/build/i18n/fr.json +7 -0
- package/build/i18n/it.json +7 -0
- package/build/i18n/nl.json +7 -0
- package/build/i18n/pl.json +7 -0
- package/build/i18n/pt.json +7 -0
- package/build/i18n/ru.json +7 -0
- package/build/i18n/uk.json +7 -0
- package/build/i18n/zh-cn.json +7 -0
- package/i18n/de.json +7 -0
- package/i18n/en.json +7 -0
- package/i18n/es.json +7 -0
- package/i18n/fr.json +7 -0
- package/i18n/it.json +7 -0
- package/i18n/nl.json +7 -0
- package/i18n/pl.json +7 -0
- package/i18n/pt.json +7 -0
- package/i18n/ru.json +7 -0
- package/i18n/uk.json +7 -0
- package/i18n/zh-cn.json +7 -0
- package/package.json +2 -2
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { type JSX, Component } from 'react';
|
|
2
|
+
import { type SxProps } from '@mui/material';
|
|
2
3
|
interface ImageProps {
|
|
3
4
|
color?: string;
|
|
4
5
|
src?: string;
|
|
5
6
|
imagePrefix?: string;
|
|
6
7
|
className?: string;
|
|
7
8
|
showError?: boolean;
|
|
9
|
+
sx?: SxProps;
|
|
8
10
|
}
|
|
9
11
|
interface ImageState {
|
|
10
12
|
svg?: boolean;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import React, { Component } from 'react';
|
|
2
|
+
import { Box } from '@mui/material';
|
|
2
3
|
import { IconNoIcon } from '../icons/IconNoIcon';
|
|
3
4
|
function getElementFromSource(src) {
|
|
4
5
|
const svgContainer = document.createElement('div');
|
|
@@ -84,7 +85,7 @@ export class Image extends Component {
|
|
|
84
85
|
const inner = svg.innerHTML;
|
|
85
86
|
const svgProps = serializeAttrs(svg.attributes);
|
|
86
87
|
svg.remove();
|
|
87
|
-
return (React.createElement("svg",
|
|
88
|
+
return (React.createElement(Box, { component: "svg", sx: this.props.sx, className: this.props.className, style: this.state.color ? { color: this.state.color } : undefined, ...svgProps, dangerouslySetInnerHTML: { __html: inner } }));
|
|
88
89
|
}
|
|
89
90
|
catch {
|
|
90
91
|
// ignore
|
|
@@ -115,9 +116,9 @@ export class Image extends Component {
|
|
|
115
116
|
else if (!src.startsWith('/')) {
|
|
116
117
|
src = Image.REMOTE_PREFIX + src;
|
|
117
118
|
}
|
|
118
|
-
return (React.createElement("img",
|
|
119
|
+
return (React.createElement(Box, { component: "img", sx: this.props.sx, className: this.props.className, src: `https://remote-files.iobroker.in${src}`, alt: "", onError: () => this.props.showError ? this.setState({ imgError: true }) : this.setState({ src: '' }) }));
|
|
119
120
|
}
|
|
120
|
-
return (React.createElement("img",
|
|
121
|
+
return (React.createElement(Box, { component: "img", sx: this.props.sx, className: this.props.className, src: (this.props.imagePrefix || '') + this.state.src, alt: "", onError: () => this.props.showError ? this.setState({ imgError: true }) : this.setState({ src: '' }) }));
|
|
121
122
|
}
|
|
122
123
|
return null;
|
|
123
124
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Image.js","sourceRoot":"./src/","sources":["Components/Image.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { type JSX, Component } from 'react';\n\nimport { IconNoIcon } from '../icons/IconNoIcon';\n\nfunction getElementFromSource(src: string): HTMLElement | null {\n const svgContainer = document.createElement('div');\n svgContainer.innerHTML = src;\n const svg: HTMLElement = svgContainer.firstElementChild as HTMLElement;\n if (svg?.remove) {\n svg.remove();\n } else if (svg) {\n svgContainer.removeChild(svg);\n }\n\n svgContainer.remove();\n return svg;\n}\n\nfunction serializeAttrs(map?: NamedNodeMap): Record<string, string> {\n const ret: Record<string, string> = {};\n if (!map) {\n return ret;\n }\n for (let prop, i = 0; i < map.length; i++) {\n const key = map[i].name;\n if (key === 'class') {\n prop = 'className';\n } else if (!key.startsWith('data-')) {\n prop = key.replace(/[-|:]([a-z])/g, g => g[1].toUpperCase());\n } else {\n prop = key;\n }\n\n ret[prop] = map[i].value;\n }\n return ret;\n}\n\ninterface ImageProps {\n /* The color */\n color?: string;\n /* The source of the image */\n src?: string;\n /* The image prefix (default: './files/') */\n imagePrefix?: string;\n /* The CSS class name */\n className?: string;\n /* Show image errors (or just show no image)? */\n showError?: boolean;\n}\n\ninterface ImageState {\n svg?: boolean;\n created?: boolean;\n color?: string;\n src?: string;\n imgError?: boolean;\n showError?: boolean;\n}\n\n/**\n * A component for displaying an image.\n */\nexport class Image extends Component<ImageProps, ImageState> {\n private svg: JSX.Element | null;\n\n static REMOTE_SERVER: boolean = window.location.hostname.includes('iobroker.in');\n\n static REMOTE_PREFIX: string = window.location.pathname.substring(0, window.location.pathname.lastIndexOf('/') + 1);\n\n constructor(props: ImageProps) {\n super(props);\n this.state = {\n svg: !!this.props.src?.startsWith('data:'),\n created: true,\n color: this.props.color || '',\n src: this.props.src || '',\n imgError: false,\n showError: !!this.props.showError,\n };\n\n this.svg = this.state.svg && this.state.src ? this.getSvgFromData(this.state.src) : null;\n }\n\n static getDerivedStateFromProps(props: ImageProps, state: ImageState): Partial<ImageState> | null {\n const newState: ImageState = {};\n let changed = false;\n\n if (props && state && props.src !== state.src) {\n newState.src = props.src;\n newState.svg = props.src?.startsWith('data:');\n newState.created = false;\n changed = true;\n }\n\n if (props && state && props.color !== state.color) {\n newState.color = props.color;\n newState.created = false;\n changed = true;\n }\n\n if (props && state && props.showError !== state.showError) {\n newState.showError = props.showError;\n changed = true;\n }\n\n return changed ? newState : null;\n }\n\n getSvgFromData(src: string): JSX.Element | null {\n const len = 'data:image/svg+xml;base64,';\n if (!src.startsWith(len)) {\n return null;\n }\n src = src.substring(len.length);\n try {\n src = atob(src);\n const svg: HTMLElement = getElementFromSource(src);\n const inner = svg.innerHTML;\n const svgProps = serializeAttrs(svg.attributes);\n\n svg.remove();\n\n return (\n <svg\n className={this.props.className}\n style={this.state.color ? { color: this.state.color } : {}}\n {...svgProps}\n dangerouslySetInnerHTML={{ __html: inner }}\n />\n );\n } catch {\n // ignore\n }\n return null;\n }\n\n render(): JSX.Element | null {\n if (this.state.svg) {\n if (!this.state.created) {\n setTimeout(() => {\n this.svg = this.state.src ? this.getSvgFromData(this.state.src) : null;\n this.setState({ created: true });\n }, 50);\n }\n\n return this.svg;\n }\n if (this.state.src) {\n if (this.state.imgError || !this.state.src) {\n return <IconNoIcon className={this.props.className} />;\n }\n if (\n Image.REMOTE_SERVER &&\n !this.state.src.startsWith('http://') &&\n !this.state.src.startsWith('https://')\n ) {\n let src = (this.props.imagePrefix || '') + this.state.src;\n if (src.startsWith('./')) {\n src = Image.REMOTE_PREFIX + src.substring(2);\n } else if (!src.startsWith('/')) {\n src = Image.REMOTE_PREFIX + src;\n }\n return (\n <img\n className={this.props.className}\n src={`https://remote-files.iobroker.in${src}`}\n alt=\"\"\n onError={() =>\n this.props.showError ? this.setState({ imgError: true }) : this.setState({ src: '' })\n }\n />\n );\n }\n\n return (\n <img\n className={this.props.className}\n src={(this.props.imagePrefix || '') + this.state.src}\n alt=\"\"\n onError={() =>\n this.props.showError ? this.setState({ imgError: true }) : this.setState({ src: '' })\n }\n />\n );\n }\n\n return null;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Image.js","sourceRoot":"./src/","sources":["Components/Image.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { type JSX, Component } from 'react';\n\nimport { Box, type SxProps } from '@mui/material';\n\nimport { IconNoIcon } from '../icons/IconNoIcon';\n\nfunction getElementFromSource(src: string): HTMLElement | null {\n const svgContainer = document.createElement('div');\n svgContainer.innerHTML = src;\n const svg: HTMLElement = svgContainer.firstElementChild as HTMLElement;\n if (svg?.remove) {\n svg.remove();\n } else if (svg) {\n svgContainer.removeChild(svg);\n }\n\n svgContainer.remove();\n return svg;\n}\n\nfunction serializeAttrs(map?: NamedNodeMap): Record<string, string> {\n const ret: Record<string, string> = {};\n if (!map) {\n return ret;\n }\n for (let prop, i = 0; i < map.length; i++) {\n const key = map[i].name;\n if (key === 'class') {\n prop = 'className';\n } else if (!key.startsWith('data-')) {\n prop = key.replace(/[-|:]([a-z])/g, g => g[1].toUpperCase());\n } else {\n prop = key;\n }\n\n ret[prop] = map[i].value;\n }\n return ret;\n}\n\ninterface ImageProps {\n /* The color */\n color?: string;\n /* The source of the image */\n src?: string;\n /* The image prefix (default: './files/') */\n imagePrefix?: string;\n /* The CSS class name */\n className?: string;\n /* Show image errors (or just show no image)? */\n showError?: boolean;\n sx?: SxProps;\n}\n\ninterface ImageState {\n svg?: boolean;\n created?: boolean;\n color?: string;\n src?: string;\n imgError?: boolean;\n showError?: boolean;\n}\n\n/**\n * A component for displaying an image.\n */\nexport class Image extends Component<ImageProps, ImageState> {\n private svg: JSX.Element | null;\n\n static REMOTE_SERVER: boolean = window.location.hostname.includes('iobroker.in');\n\n static REMOTE_PREFIX: string = window.location.pathname.substring(0, window.location.pathname.lastIndexOf('/') + 1);\n\n constructor(props: ImageProps) {\n super(props);\n this.state = {\n svg: !!this.props.src?.startsWith('data:'),\n created: true,\n color: this.props.color || '',\n src: this.props.src || '',\n imgError: false,\n showError: !!this.props.showError,\n };\n\n this.svg = this.state.svg && this.state.src ? this.getSvgFromData(this.state.src) : null;\n }\n\n static getDerivedStateFromProps(props: ImageProps, state: ImageState): Partial<ImageState> | null {\n const newState: ImageState = {};\n let changed = false;\n\n if (props && state && props.src !== state.src) {\n newState.src = props.src;\n newState.svg = props.src?.startsWith('data:');\n newState.created = false;\n changed = true;\n }\n\n if (props && state && props.color !== state.color) {\n newState.color = props.color;\n newState.created = false;\n changed = true;\n }\n\n if (props && state && props.showError !== state.showError) {\n newState.showError = props.showError;\n changed = true;\n }\n\n return changed ? newState : null;\n }\n\n getSvgFromData(src: string): JSX.Element | null {\n const len = 'data:image/svg+xml;base64,';\n if (!src.startsWith(len)) {\n return null;\n }\n src = src.substring(len.length);\n try {\n src = atob(src);\n const svg: HTMLElement = getElementFromSource(src);\n const inner = svg.innerHTML;\n const svgProps = serializeAttrs(svg.attributes);\n\n svg.remove();\n\n return (\n <Box\n component=\"svg\"\n sx={this.props.sx}\n className={this.props.className}\n style={this.state.color ? { color: this.state.color } : undefined}\n {...svgProps}\n dangerouslySetInnerHTML={{ __html: inner }}\n />\n );\n } catch {\n // ignore\n }\n return null;\n }\n\n render(): JSX.Element | null {\n if (this.state.svg) {\n if (!this.state.created) {\n setTimeout(() => {\n this.svg = this.state.src ? this.getSvgFromData(this.state.src) : null;\n this.setState({ created: true });\n }, 50);\n }\n\n return this.svg;\n }\n if (this.state.src) {\n if (this.state.imgError || !this.state.src) {\n return <IconNoIcon className={this.props.className} />;\n }\n if (\n Image.REMOTE_SERVER &&\n !this.state.src.startsWith('http://') &&\n !this.state.src.startsWith('https://')\n ) {\n let src = (this.props.imagePrefix || '') + this.state.src;\n if (src.startsWith('./')) {\n src = Image.REMOTE_PREFIX + src.substring(2);\n } else if (!src.startsWith('/')) {\n src = Image.REMOTE_PREFIX + src;\n }\n return (\n <Box\n component=\"img\"\n sx={this.props.sx}\n className={this.props.className}\n src={`https://remote-files.iobroker.in${src}`}\n alt=\"\"\n onError={() =>\n this.props.showError ? this.setState({ imgError: true }) : this.setState({ src: '' })\n }\n />\n );\n }\n\n return (\n <Box\n component=\"img\"\n sx={this.props.sx}\n className={this.props.className}\n src={(this.props.imagePrefix || '') + this.state.src}\n alt=\"\"\n onError={() =>\n this.props.showError ? this.setState({ imgError: true }) : this.setState({ src: '' })\n }\n />\n );\n }\n\n return null;\n }\n}\n"]}
|
|
@@ -65,15 +65,14 @@ export class LegacyConnection {
|
|
|
65
65
|
onCmdExitHandler;
|
|
66
66
|
systemConfig = null;
|
|
67
67
|
constructor(props) {
|
|
68
|
-
props
|
|
68
|
+
props ||= { protocol: window.location.protocol, host: window.location.hostname };
|
|
69
69
|
this.props = props;
|
|
70
70
|
this.autoSubscribes = this.props.autoSubscribes || [];
|
|
71
71
|
this.autoSubscribeLog = this.props.autoSubscribeLog || false;
|
|
72
|
-
this.props.protocol
|
|
73
|
-
this.props.host
|
|
74
|
-
this.props.port
|
|
75
|
-
|
|
76
|
-
(window.location.port === '3000' ? (LegacyConnection.isWeb() ? 8082 : 8081) : window.location.port);
|
|
72
|
+
this.props.protocol ||= window.location.protocol;
|
|
73
|
+
this.props.host ||= window.location.hostname;
|
|
74
|
+
this.props.port ||=
|
|
75
|
+
window.location.port === '3000' ? (LegacyConnection.isWeb() ? 8082 : 8081) : window.location.port;
|
|
77
76
|
this.props.ioTimeout = Math.max(this.props.ioTimeout || 20000, 20000);
|
|
78
77
|
this.props.cmdTimeout = Math.max(this.props.cmdTimeout || 5000, 5000);
|
|
79
78
|
this._instanceSubscriptions = {};
|
|
@@ -112,7 +111,7 @@ export class LegacyConnection {
|
|
|
112
111
|
// if in index.html the onLoad function not defined
|
|
113
112
|
if (typeof window.registerSocketOnLoad !== 'function') {
|
|
114
113
|
// poll if loaded
|
|
115
|
-
this.scriptLoadCounter
|
|
114
|
+
this.scriptLoadCounter ||= 0;
|
|
116
115
|
this.scriptLoadCounter++;
|
|
117
116
|
if (this.scriptLoadCounter < 30) {
|
|
118
117
|
// wait till the script loaded
|
|
@@ -216,7 +215,7 @@ export class LegacyConnection {
|
|
|
216
215
|
});
|
|
217
216
|
this._socket.on('reauthenticate', () => LegacyConnection.authenticate());
|
|
218
217
|
this._socket.on('log', message => {
|
|
219
|
-
this.props.onLog
|
|
218
|
+
this.props.onLog?.(message);
|
|
220
219
|
this.onLogHandlers.forEach(cb => cb(message));
|
|
221
220
|
});
|
|
222
221
|
this._socket.on('error', (err) => {
|
|
@@ -244,9 +243,9 @@ export class LegacyConnection {
|
|
|
244
243
|
this._socket.on('stateChange', (id, state) => setTimeout(() => this.stateChange(id, state), 0));
|
|
245
244
|
this._socket.on('im', (messageType, from, data) => setTimeout(() => this.instanceMessage(messageType, from, data), 0));
|
|
246
245
|
this._socket.on('fileChange', (id, fileName, size) => setTimeout(() => this.fileChange(id, fileName, size), 0));
|
|
247
|
-
this._socket.on('cmdStdout', (id, text) => this.onCmdStdoutHandler
|
|
248
|
-
this._socket.on('cmdStderr', (id, text) => this.onCmdStderrHandler
|
|
249
|
-
this._socket.on('cmdExit', (id, exitCode) => this.onCmdExitHandler
|
|
246
|
+
this._socket.on('cmdStdout', (id, text) => this.onCmdStdoutHandler?.(id, text));
|
|
247
|
+
this._socket.on('cmdStderr', (id, text) => this.onCmdStderrHandler?.(id, text));
|
|
248
|
+
this._socket.on('cmdExit', (id, exitCode) => this.onCmdExitHandler?.(id, exitCode));
|
|
250
249
|
}
|
|
251
250
|
/**
|
|
252
251
|
* Called internally.
|
|
@@ -340,8 +339,10 @@ export class LegacyConnection {
|
|
|
340
339
|
return;
|
|
341
340
|
}
|
|
342
341
|
this.loaded = true;
|
|
343
|
-
|
|
344
|
-
|
|
342
|
+
if (this.loadTimer) {
|
|
343
|
+
clearTimeout(this.loadTimer);
|
|
344
|
+
this.loadTimer = null;
|
|
345
|
+
}
|
|
345
346
|
this.onProgress(PROGRESS.CONNECTED);
|
|
346
347
|
this.firstConnect = false;
|
|
347
348
|
this.acl = acl;
|
|
@@ -355,13 +356,15 @@ export class LegacyConnection {
|
|
|
355
356
|
return;
|
|
356
357
|
}
|
|
357
358
|
this.loaded = true;
|
|
358
|
-
|
|
359
|
-
|
|
359
|
+
if (this.loadTimer) {
|
|
360
|
+
clearTimeout(this.loadTimer);
|
|
361
|
+
this.loadTimer = null;
|
|
362
|
+
}
|
|
360
363
|
this.onProgress(PROGRESS.CONNECTED);
|
|
361
364
|
this.firstConnect = false;
|
|
362
365
|
}
|
|
363
366
|
this.systemConfig = systemConfig;
|
|
364
|
-
if (this.systemConfig
|
|
367
|
+
if (this.systemConfig?.common) {
|
|
365
368
|
this.systemLang = this.systemConfig.common.language;
|
|
366
369
|
}
|
|
367
370
|
else {
|
|
@@ -374,16 +377,18 @@ export class LegacyConnection {
|
|
|
374
377
|
this.systemLang = 'en';
|
|
375
378
|
}
|
|
376
379
|
}
|
|
377
|
-
this.props.onLanguage
|
|
380
|
+
this.props.onLanguage?.(this.systemLang);
|
|
378
381
|
if (!this.doNotLoadAllObjects) {
|
|
379
382
|
await this.getObjects();
|
|
380
383
|
this.onProgress(PROGRESS.READY);
|
|
381
|
-
this.props.onReady && this.objects
|
|
384
|
+
if (this.props.onReady && this.objects) {
|
|
385
|
+
this.props.onReady(this.objects);
|
|
386
|
+
}
|
|
382
387
|
}
|
|
383
388
|
else {
|
|
384
389
|
this.objects = { 'system.config': systemConfig };
|
|
385
390
|
this.onProgress(PROGRESS.READY);
|
|
386
|
-
this.props.onReady
|
|
391
|
+
this.props.onReady?.(this.objects);
|
|
387
392
|
}
|
|
388
393
|
}
|
|
389
394
|
catch (e) {
|
|
@@ -567,7 +572,9 @@ export class LegacyConnection {
|
|
|
567
572
|
if (this.statesSubscribes[_id]) {
|
|
568
573
|
if (cb) {
|
|
569
574
|
const pos = this.statesSubscribes[_id].cbs.indexOf(cb);
|
|
570
|
-
pos !== -1
|
|
575
|
+
if (pos !== -1) {
|
|
576
|
+
this.statesSubscribes[_id].cbs.splice(pos, 1);
|
|
577
|
+
}
|
|
571
578
|
}
|
|
572
579
|
else {
|
|
573
580
|
this.statesSubscribes[_id].cbs = [];
|
|
@@ -745,9 +752,11 @@ export class LegacyConnection {
|
|
|
745
752
|
else {
|
|
746
753
|
sub.cbs = [];
|
|
747
754
|
}
|
|
748
|
-
if (!sub.cbs
|
|
755
|
+
if (!sub.cbs?.length) {
|
|
749
756
|
delete this.filesSubscribes[key];
|
|
750
|
-
this.connected
|
|
757
|
+
if (this.connected) {
|
|
758
|
+
toUnsubscribe.push(pattern);
|
|
759
|
+
}
|
|
751
760
|
}
|
|
752
761
|
}
|
|
753
762
|
}
|
|
@@ -1117,7 +1126,7 @@ export class LegacyConnection {
|
|
|
1117
1126
|
update = adapter;
|
|
1118
1127
|
adapter = '';
|
|
1119
1128
|
}
|
|
1120
|
-
adapter
|
|
1129
|
+
adapter ||= '';
|
|
1121
1130
|
if (!update && this._promises[`instances_${adapter}`] instanceof Promise) {
|
|
1122
1131
|
return this._promises[`instances_${adapter}`];
|
|
1123
1132
|
}
|
|
@@ -1143,7 +1152,7 @@ export class LegacyConnection {
|
|
|
1143
1152
|
update = adapter;
|
|
1144
1153
|
adapter = '';
|
|
1145
1154
|
}
|
|
1146
|
-
adapter
|
|
1155
|
+
adapter ||= '';
|
|
1147
1156
|
if (!update && this._promises[`adapter_${adapter}`] instanceof Promise) {
|
|
1148
1157
|
return this._promises[`adapter_${adapter}`];
|
|
1149
1158
|
}
|
|
@@ -1161,8 +1170,8 @@ export class LegacyConnection {
|
|
|
1161
1170
|
* Called internally.
|
|
1162
1171
|
*/
|
|
1163
1172
|
_renameGroups(objs, cb) {
|
|
1164
|
-
if (!objs
|
|
1165
|
-
cb
|
|
1173
|
+
if (!objs?.length) {
|
|
1174
|
+
cb?.(null);
|
|
1166
1175
|
}
|
|
1167
1176
|
else {
|
|
1168
1177
|
const obj = objs.pop();
|
|
@@ -1176,7 +1185,7 @@ export class LegacyConnection {
|
|
|
1176
1185
|
this.setObject(obj._id, obj)
|
|
1177
1186
|
.then(() => this.delObject(oldId))
|
|
1178
1187
|
.then(() => setTimeout(() => this._renameGroups(objs, cb), 0))
|
|
1179
|
-
.catch((err) => cb
|
|
1188
|
+
.catch((err) => cb?.(err));
|
|
1180
1189
|
}
|
|
1181
1190
|
}
|
|
1182
1191
|
/**
|
|
@@ -1204,7 +1213,7 @@ export class LegacyConnection {
|
|
|
1204
1213
|
if (obj) {
|
|
1205
1214
|
obj._id = newId;
|
|
1206
1215
|
if (newName !== undefined) {
|
|
1207
|
-
obj.common
|
|
1216
|
+
obj.common ||= {};
|
|
1208
1217
|
obj.common.name = newName;
|
|
1209
1218
|
}
|
|
1210
1219
|
return this.setObject(obj._id, obj).then(() => this.delObject(id));
|
|
@@ -1409,8 +1418,8 @@ export class LegacyConnection {
|
|
|
1409
1418
|
if (!this.connected) {
|
|
1410
1419
|
return Promise.reject(new Error(NOT_CONNECTED));
|
|
1411
1420
|
}
|
|
1412
|
-
start
|
|
1413
|
-
end
|
|
1421
|
+
start ||= '';
|
|
1422
|
+
end ||= '\u9999';
|
|
1414
1423
|
return this.getObjectViewCustom('system', type, start, end);
|
|
1415
1424
|
}
|
|
1416
1425
|
/**
|
|
@@ -2127,8 +2136,8 @@ export class LegacyConnection {
|
|
|
2127
2136
|
}
|
|
2128
2137
|
this._promises.systemConfig = this.getObject('system.config').then(obj => {
|
|
2129
2138
|
const systemConfig = (obj || {});
|
|
2130
|
-
systemConfig.common
|
|
2131
|
-
systemConfig.native
|
|
2139
|
+
systemConfig.common ||= {};
|
|
2140
|
+
systemConfig.native ||= {};
|
|
2132
2141
|
return systemConfig;
|
|
2133
2142
|
});
|
|
2134
2143
|
return this._promises.systemConfig;
|
|
@@ -2503,7 +2512,7 @@ export class LegacyConnection {
|
|
|
2503
2512
|
return this._promises.compactAdapters;
|
|
2504
2513
|
}
|
|
2505
2514
|
getAdaptersResetCache(adapter) {
|
|
2506
|
-
adapter
|
|
2515
|
+
adapter ||= '';
|
|
2507
2516
|
delete this._promises.compactAdapters;
|
|
2508
2517
|
delete this._promises[`adapter_${adapter}`];
|
|
2509
2518
|
}
|
|
@@ -2524,7 +2533,7 @@ export class LegacyConnection {
|
|
|
2524
2533
|
return this._promises.compactInstances;
|
|
2525
2534
|
}
|
|
2526
2535
|
getAdapternInstancesResetCache(adapter) {
|
|
2527
|
-
adapter
|
|
2536
|
+
adapter ||= '';
|
|
2528
2537
|
delete this._promises.compactInstances;
|
|
2529
2538
|
delete this._promises[`instances_${adapter}`];
|
|
2530
2539
|
}
|
|
@@ -2536,7 +2545,7 @@ export class LegacyConnection {
|
|
|
2536
2545
|
if (LegacyConnection.isWeb()) {
|
|
2537
2546
|
return Promise.reject(new Error('Allowed only in admin'));
|
|
2538
2547
|
}
|
|
2539
|
-
this._promises.installedCompact
|
|
2548
|
+
this._promises.installedCompact ||= {};
|
|
2540
2549
|
if (!update && this._promises.installedCompact[host] instanceof Promise) {
|
|
2541
2550
|
return this._promises.installedCompact[host];
|
|
2542
2551
|
}
|
|
@@ -2726,7 +2735,7 @@ export class LegacyConnection {
|
|
|
2726
2735
|
targetInstance = `system.adapter.${targetInstance}`;
|
|
2727
2736
|
}
|
|
2728
2737
|
// save callback
|
|
2729
|
-
this._instanceSubscriptions[targetInstance]
|
|
2738
|
+
this._instanceSubscriptions[targetInstance] ||= [];
|
|
2730
2739
|
if (!this._instanceSubscriptions[targetInstance].find(sub => sub.messageType === messageType && sub.callback === callback)) {
|
|
2731
2740
|
this._instanceSubscriptions[targetInstance].push({
|
|
2732
2741
|
messageType,
|
|
@@ -2788,7 +2797,9 @@ export class LegacyConnection {
|
|
|
2788
2797
|
* Send log to ioBroker log
|
|
2789
2798
|
*/
|
|
2790
2799
|
log(text, level) {
|
|
2791
|
-
|
|
2800
|
+
if (text) {
|
|
2801
|
+
this._socket.emit('log', text, level || 'debug');
|
|
2802
|
+
}
|
|
2792
2803
|
}
|
|
2793
2804
|
/**
|
|
2794
2805
|
* Logout current user
|