mirakurun 3.9.0-beta.21 → 3.9.0-beta.22

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/CHANGELOG.md CHANGED
@@ -53,6 +53,8 @@ Performance improvements, fixes for memory leaks and bugs related to EPG process
53
53
  - Update base image to `node:16.12.0-buster-slim`.
54
54
  - Fixed the exit signal handling properly.
55
55
  - When a `SIGHUP` is received in a container, only the node process can be restarted quickly.
56
+ - default `docker-compose.yml` volumes has been changed:
57
+ - `/usr/local/mirakurun/*` → `/opt/mirakurun/*`
56
58
 
57
59
  ### Other Changes
58
60
 
package/doc/Platforms.md CHANGED
@@ -39,6 +39,10 @@ curl -sSL https://get.docker.com/ | CHANNEL=stable sh
39
39
  ### Install / Uninstall / Update
40
40
 
41
41
  ```sh
42
+ # Create: /opt/mirakurun/
43
+ sudo mv -vf /usr/local/mirakurun /opt/mirakurun
44
+ sudo mkdir -p /opt/mirakurun/run /opt/mirakurun/opt /opt/mirakurun/config /opt/mirakurun/data
45
+
42
46
  # Install
43
47
  mkdir ~/mirakurun/
44
48
  cd ~/mirakurun/
@@ -80,9 +84,9 @@ docker-compose logs [-f]
80
84
  ### Config
81
85
 
82
86
  ```
83
- vim /usr/local/mirakurun/config/server.yml
84
- vim /usr/local/mirakurun/config/tuners.yml
85
- vim /usr/local/mirakurun/config/channels.yml
87
+ vim /opt/mirakurun/config/server.yml
88
+ vim /opt/mirakurun/config/tuners.yml
89
+ vim /opt/mirakurun/config/channels.yml
86
90
  ```
87
91
 
88
92
  see: [Configuration.md](Configuration.md)
@@ -92,8 +96,8 @@ see: [Configuration.md](Configuration.md)
92
96
  ```sh
93
97
  $ which recpt1
94
98
  /usr/local/bin/recpt1
95
- $ cp /usr/local/bin/recpt1 /usr/local/mirakurun/opt/bin/
96
- $ vim /usr/local/mirakurun/config/tuners.yml
99
+ $ cp /usr/local/bin/recpt1 /opt/mirakurun/opt/bin/
100
+ $ vim /opt/mirakurun/config/tuners.yml
97
101
  ```
98
102
 
99
103
  ### 💡 Locations (Container)
@@ -111,15 +115,15 @@ $ vim /usr/local/mirakurun/config/tuners.yml
111
115
 
112
116
  ### 💡 Locations (Host)
113
117
 
114
- * Socket: `/usr/local/mirakurun/run/mirakurun.sock`
115
- * Config: `/usr/local/mirakurun/config/`
118
+ * Socket: `/opt/mirakurun/run/mirakurun.sock`
119
+ * Config: `/opt/mirakurun/config/`
116
120
  * `server.yml`
117
121
  * `tuners.yml`
118
122
  * `channels.yml`
119
- * Data: `/usr/local/mirakurun/data/`
123
+ * Data: `/opt/mirakurun/data/`
120
124
  * `services.json`
121
125
  * `programs.json`
122
- * Opt: `/usr/local/mirakurun/opt/`
126
+ * Opt: `/opt/mirakurun/opt/`
123
127
  * `bin/`
124
128
 
125
129
  ## Linux
@@ -23,10 +23,24 @@ services:
23
23
  - /dev/bus:/dev/bus
24
24
  - /dev/dvb:/dev/dvb
25
25
  volumes:
26
- - /usr/local/mirakurun/run/:/var/run/
27
- - /usr/local/mirakurun/opt/:/opt/
28
- - /usr/local/mirakurun/config/:/app-config/
29
- - /usr/local/mirakurun/data/:/app-data/
26
+ # ** CAUTION **
27
+ # (default) `/usr/local/mirakurun/*` has been moved to `/opt/mirakurun/*`
28
+ # try:
29
+ # sudo mv -vf /usr/local/mirakurun /opt/mirakurun
30
+ # sudo mkdir -p /opt/mirakurun/run /opt/mirakurun/opt /opt/mirakurun/config /opt/mirakurun/data
31
+ # you can change to any location if required.
32
+ - type: bind
33
+ source: /opt/mirakurun/run/
34
+ target: /var/run/
35
+ - type: bind
36
+ source: /opt/mirakurun/opt/
37
+ target: /opt/
38
+ - type: bind
39
+ source: /opt/mirakurun/config/
40
+ target: /app-config/
41
+ - type: bind
42
+ source: /opt/mirakurun/data/
43
+ target: /app-data/
30
44
  restart: always
31
45
  logging:
32
46
  driver: json-file
package/lib/ui/index.js CHANGED
@@ -4080,7 +4080,7 @@ var Configurator = function (_a) {
4080
4080
  var items = [];
4081
4081
  editing === null || editing === void 0 ? void 0 : editing.forEach(function (ch, i) {
4082
4082
  var item = {
4083
- key: "item" + i,
4083
+ key: "item".concat(i),
4084
4084
  enable: (react__WEBPACK_IMPORTED_MODULE_0__.createElement(_fluentui_react__WEBPACK_IMPORTED_MODULE_1__.Toggle, { checked: !ch.isDisabled, onChange: function (ev, checked) {
4085
4085
  ch.isDisabled = !checked;
4086
4086
  setEditing(__spreadArray([], editing, true));
@@ -4090,7 +4090,7 @@ var Configurator = function (_a) {
4090
4090
  setEditing(__spreadArray([], editing, true));
4091
4091
  }, onBlur: function () {
4092
4092
  if (ch.name === "") {
4093
- ch.name = "ch" + i;
4093
+ ch.name = "ch".concat(i);
4094
4094
  setEditing(__spreadArray([], editing, true));
4095
4095
  }
4096
4096
  } })),
@@ -4114,7 +4114,7 @@ var Configurator = function (_a) {
4114
4114
  } })),
4115
4115
  options: (react__WEBPACK_IMPORTED_MODULE_0__.createElement(_fluentui_react__WEBPACK_IMPORTED_MODULE_1__.Stack, { tokens: { childrenGap: "8 0" } },
4116
4116
  react__WEBPACK_IMPORTED_MODULE_0__.createElement(_fluentui_react__WEBPACK_IMPORTED_MODULE_1__.Stack, { horizontal: true, tokens: { childrenGap: "0 8" } },
4117
- react__WEBPACK_IMPORTED_MODULE_0__.createElement(_fluentui_react__WEBPACK_IMPORTED_MODULE_1__.TextField, { style: { width: 55 }, label: "Service ID:", value: "" + (ch.serviceId || ""), onChange: function (ev, newValue) {
4117
+ react__WEBPACK_IMPORTED_MODULE_0__.createElement(_fluentui_react__WEBPACK_IMPORTED_MODULE_1__.TextField, { style: { width: 55 }, label: "Service ID:", value: "".concat(ch.serviceId || ""), onChange: function (ev, newValue) {
4118
4118
  if (newValue === "") {
4119
4119
  delete ch.serviceId;
4120
4120
  }
@@ -4135,7 +4135,7 @@ var Configurator = function (_a) {
4135
4135
  }
4136
4136
  setEditing(__spreadArray([], editing, true));
4137
4137
  } }),
4138
- react__WEBPACK_IMPORTED_MODULE_0__.createElement(_fluentui_react__WEBPACK_IMPORTED_MODULE_1__.TextField, { style: { width: 40 }, label: "Space:", placeholder: "0", value: "" + (ch.space || ""), onChange: function (ev, newValue) {
4138
+ react__WEBPACK_IMPORTED_MODULE_0__.createElement(_fluentui_react__WEBPACK_IMPORTED_MODULE_1__.TextField, { style: { width: 40 }, label: "Space:", placeholder: "0", value: "".concat(ch.space || ""), onChange: function (ev, newValue) {
4139
4139
  if (newValue === "") {
4140
4140
  delete ch.space;
4141
4141
  }
@@ -4147,7 +4147,7 @@ var Configurator = function (_a) {
4147
4147
  }
4148
4148
  setEditing(__spreadArray([], editing, true));
4149
4149
  } }),
4150
- react__WEBPACK_IMPORTED_MODULE_0__.createElement(_fluentui_react__WEBPACK_IMPORTED_MODULE_1__.TextField, { style: { width: 60 }, label: "Freq:", value: "" + (ch.freq || ""), onChange: function (ev, newValue) {
4150
+ react__WEBPACK_IMPORTED_MODULE_0__.createElement(_fluentui_react__WEBPACK_IMPORTED_MODULE_1__.TextField, { style: { width: 60 }, label: "Freq:", value: "".concat(ch.freq || ""), onChange: function (ev, newValue) {
4151
4151
  if (newValue === "") {
4152
4152
  delete ch.freq;
4153
4153
  }
@@ -4170,7 +4170,7 @@ var Configurator = function (_a) {
4170
4170
  }
4171
4171
  setEditing(__spreadArray([], editing, true));
4172
4172
  } }),
4173
- react__WEBPACK_IMPORTED_MODULE_0__.createElement(_fluentui_react__WEBPACK_IMPORTED_MODULE_1__.TextField, { style: { width: 40 }, label: "TsmfRelTs:", value: "" + (ch.tsmfRelTs || ""), onChange: function (ev, newValue) {
4173
+ react__WEBPACK_IMPORTED_MODULE_0__.createElement(_fluentui_react__WEBPACK_IMPORTED_MODULE_1__.TextField, { style: { width: 40 }, label: "TsmfRelTs:", value: "".concat(ch.tsmfRelTs || ""), onChange: function (ev, newValue) {
4174
4174
  if (newValue === "") {
4175
4175
  delete ch.tsmfRelTs;
4176
4176
  }
@@ -4215,7 +4215,7 @@ var Configurator = function (_a) {
4215
4215
  react__WEBPACK_IMPORTED_MODULE_0__.createElement(_fluentui_react__WEBPACK_IMPORTED_MODULE_1__.ActionButton, { text: "Add Channel", iconProps: { iconName: "Add" }, onClick: function () {
4216
4216
  var i = editing.length;
4217
4217
  editing.push({
4218
- name: "ch" + i,
4218
+ name: "ch".concat(i),
4219
4219
  type: "GR",
4220
4220
  channel: "0",
4221
4221
  isDisabled: true
@@ -4371,7 +4371,7 @@ var ConnectionGuide = function () {
4371
4371
  theme.fonts.xLarge,
4372
4372
  {
4373
4373
  flex: "1 1 auto",
4374
- borderTop: "4px solid " + theme.palette.themePrimary,
4374
+ borderTop: "4px solid ".concat(theme.palette.themePrimary),
4375
4375
  color: theme.palette.themePrimary,
4376
4376
  display: "flex",
4377
4377
  alignItems: "center",
@@ -4415,17 +4415,17 @@ var ConnectionGuide = function () {
4415
4415
  react__WEBPACK_IMPORTED_MODULE_0__.createElement(_fluentui_react__WEBPACK_IMPORTED_MODULE_1__.IconButton, { styles: iconButtonStyles, iconProps: { iconName: "Cancel" }, ariaLabel: "Close", onClick: function () { return setModalOpen(false); } })),
4416
4416
  react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { className: contentStyles.body },
4417
4417
  react__WEBPACK_IMPORTED_MODULE_0__.createElement(_fluentui_react__WEBPACK_IMPORTED_MODULE_1__.Stack, __assign({}, stackProps),
4418
- react__WEBPACK_IMPORTED_MODULE_0__.createElement(_fluentui_react__WEBPACK_IMPORTED_MODULE_1__.TextField, { readOnly: true, label: "Mirakurun Path", value: location.protocol + "//" + location.host + "/", onMouseOver: selectHandler, onClick: selectHandler }),
4419
- react__WEBPACK_IMPORTED_MODULE_0__.createElement(_fluentui_react__WEBPACK_IMPORTED_MODULE_1__.TextField, { readOnly: true, label: "Open API 2.0 / Swagger 2.0 Compliant Definition", value: location.protocol + "//" + location.host + "/api/docs", onMouseOver: selectHandler, onClick: selectHandler }),
4418
+ react__WEBPACK_IMPORTED_MODULE_0__.createElement(_fluentui_react__WEBPACK_IMPORTED_MODULE_1__.TextField, { readOnly: true, label: "Mirakurun Path", value: "".concat(location.protocol, "//").concat(location.host, "/"), onMouseOver: selectHandler, onClick: selectHandler }),
4419
+ react__WEBPACK_IMPORTED_MODULE_0__.createElement(_fluentui_react__WEBPACK_IMPORTED_MODULE_1__.TextField, { readOnly: true, label: "Open API 2.0 / Swagger 2.0 Compliant Definition", value: "".concat(location.protocol, "//").concat(location.host, "/api/docs"), onMouseOver: selectHandler, onClick: selectHandler }),
4420
4420
  react__WEBPACK_IMPORTED_MODULE_0__.createElement(_fluentui_react__WEBPACK_IMPORTED_MODULE_1__.Separator, null, "IPTV"),
4421
- react__WEBPACK_IMPORTED_MODULE_0__.createElement(_fluentui_react__WEBPACK_IMPORTED_MODULE_1__.TextField, { readOnly: true, label: "M3U Playlist", value: location.protocol + "//" + location.host + "/api/iptv/playlist", onMouseOver: selectHandler, onClick: selectHandler }),
4422
- react__WEBPACK_IMPORTED_MODULE_0__.createElement(_fluentui_react__WEBPACK_IMPORTED_MODULE_1__.TextField, { readOnly: true, label: "XMLTV", value: location.protocol + "//" + location.host + "/api/iptv/xmltv", onMouseOver: selectHandler, onClick: selectHandler }),
4423
- react__WEBPACK_IMPORTED_MODULE_0__.createElement(_fluentui_react__WEBPACK_IMPORTED_MODULE_1__.TextField, { readOnly: true, label: "HDHomeRun Device Address", value: location.protocol + "//" + location.host + "/api/iptv", onMouseOver: selectHandler, onClick: selectHandler, onRenderLabel: function (props) { return (react__WEBPACK_IMPORTED_MODULE_0__.createElement(_fluentui_react__WEBPACK_IMPORTED_MODULE_1__.Stack, { horizontal: true, verticalAlign: "end" },
4421
+ react__WEBPACK_IMPORTED_MODULE_0__.createElement(_fluentui_react__WEBPACK_IMPORTED_MODULE_1__.TextField, { readOnly: true, label: "M3U Playlist", value: "".concat(location.protocol, "//").concat(location.host, "/api/iptv/playlist"), onMouseOver: selectHandler, onClick: selectHandler }),
4422
+ react__WEBPACK_IMPORTED_MODULE_0__.createElement(_fluentui_react__WEBPACK_IMPORTED_MODULE_1__.TextField, { readOnly: true, label: "XMLTV", value: "".concat(location.protocol, "//").concat(location.host, "/api/iptv/xmltv"), onMouseOver: selectHandler, onClick: selectHandler }),
4423
+ react__WEBPACK_IMPORTED_MODULE_0__.createElement(_fluentui_react__WEBPACK_IMPORTED_MODULE_1__.TextField, { readOnly: true, label: "HDHomeRun Device Address", value: "".concat(location.protocol, "//").concat(location.host, "/api/iptv"), onMouseOver: selectHandler, onClick: selectHandler, onRenderLabel: function (props) { return (react__WEBPACK_IMPORTED_MODULE_0__.createElement(_fluentui_react__WEBPACK_IMPORTED_MODULE_1__.Stack, { horizontal: true, verticalAlign: "end" },
4424
4424
  react__WEBPACK_IMPORTED_MODULE_0__.createElement(_fluentui_react__WEBPACK_IMPORTED_MODULE_1__.Label, null, props.label),
4425
4425
  react__WEBPACK_IMPORTED_MODULE_0__.createElement(_fluentui_react__WEBPACK_IMPORTED_MODULE_1__.TooltipHost, { content: "Tested on Plex Media Server" },
4426
4426
  react__WEBPACK_IMPORTED_MODULE_0__.createElement(_fluentui_react__WEBPACK_IMPORTED_MODULE_1__.Icon, { iconName: "Info", style: { marginLeft: 4, marginBottom: 6 } })))); } }),
4427
4427
  react__WEBPACK_IMPORTED_MODULE_0__.createElement(_fluentui_react__WEBPACK_IMPORTED_MODULE_1__.Separator, null, "Misc"),
4428
- react__WEBPACK_IMPORTED_MODULE_0__.createElement(_fluentui_react__WEBPACK_IMPORTED_MODULE_1__.TextField, { readOnly: true, label: "BonDriver_Mirakurun.ini", multiline: true, rows: 3, value: "[GLOBAL]\nSERVER_HOST=\"" + location.hostname + "\"\nSERVER_PORT=\"" + location.port + "\"", onMouseOver: selectHandler, onClick: selectHandler })))),
4428
+ react__WEBPACK_IMPORTED_MODULE_0__.createElement(_fluentui_react__WEBPACK_IMPORTED_MODULE_1__.TextField, { readOnly: true, label: "BonDriver_Mirakurun.ini", multiline: true, rows: 3, value: "[GLOBAL]\nSERVER_HOST=\"".concat(location.hostname, "\"\nSERVER_PORT=\"").concat(location.port, "\""), onMouseOver: selectHandler, onClick: selectHandler })))),
4429
4429
  react__WEBPACK_IMPORTED_MODULE_0__.createElement(_fluentui_react__WEBPACK_IMPORTED_MODULE_1__.ActionButton, { iconProps: { iconName: "Info" }, text: "Connection Guide", onClick: function () { return setModalOpen(true); } })));
4430
4430
  };
4431
4431
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ConnectionGuide);
@@ -4505,7 +4505,7 @@ var EventsView = function (_a) {
4505
4505
  var newList = [];
4506
4506
  for (var _i = 0, events_1 = events; _i < events_1.length; _i++) {
4507
4507
  var event_1 = events_1[_i];
4508
- newList.push(react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { key: "events-list-item" + _itemId, className: "type-" + event_1.type }, event_1.resource + " (" + event_1.type + ") " + JSON.stringify(event_1.data)));
4508
+ newList.push(react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { key: "events-list-item".concat(_itemId), className: "type-".concat(event_1.type) }, "".concat(event_1.resource, " (").concat(event_1.type, ") ").concat(JSON.stringify(event_1.data))));
4509
4509
  ++_itemId;
4510
4510
  }
4511
4511
  if (unshift === true) {
@@ -4717,7 +4717,7 @@ var LogsView = function (_a) {
4717
4717
  var line = lines_1[_i];
4718
4718
  var parsed = line.match(/^[0-9.T:+-]+ ([a-z]+): /);
4719
4719
  var level = parsed ? parsed[1] : "other";
4720
- newList.push(react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { key: "logs-list-item" + _itemId, className: "level-" + level }, line));
4720
+ newList.push(react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { key: "logs-list-item".concat(_itemId), className: "level-".concat(level) }, line));
4721
4721
  ++_itemId;
4722
4722
  }
4723
4723
  if (unshift === true) {
@@ -4998,7 +4998,7 @@ var Configurator = function (_a) {
4998
4998
  setEditing(__assign(__assign({}, editing), { disableIPv6: checked === false }));
4999
4999
  } }),
5000
5000
  react__WEBPACK_IMPORTED_MODULE_0__.createElement(_fluentui_react__WEBPACK_IMPORTED_MODULE_1__.Separator, { alignContent: "start" }, "Advanced"),
5001
- react__WEBPACK_IMPORTED_MODULE_0__.createElement(_fluentui_react__WEBPACK_IMPORTED_MODULE_1__.TextField, { styles: { fieldGroup: { "max-width": 200 } }, label: "EPG Gathering Interval", suffix: "ms", placeholder: "3600000", value: "" + (editing.epgGatheringInterval || ""), onChange: function (ev, newValue) {
5001
+ react__WEBPACK_IMPORTED_MODULE_0__.createElement(_fluentui_react__WEBPACK_IMPORTED_MODULE_1__.TextField, { styles: { fieldGroup: { "max-width": 200 } }, label: "EPG Gathering Interval", suffix: "ms", placeholder: "3600000", value: "".concat(editing.epgGatheringInterval || ""), onChange: function (ev, newValue) {
5002
5002
  if (newValue === "") {
5003
5003
  delete editing.epgGatheringInterval;
5004
5004
  }
@@ -5140,20 +5140,20 @@ var StatusView = function (_a) {
5140
5140
  var statusItem = [];
5141
5141
  if (status) {
5142
5142
  var dockerStat = ((_c = (_b = status.process) === null || _b === void 0 ? void 0 : _b.env) === null || _c === void 0 ? void 0 : _c.DOCKER) === "YES" ? "🐋" : "";
5143
- statusItem.push({ label: "Platform", text: ((_d = status.process) === null || _d === void 0 ? void 0 : _d.platform) + " (" + ((_e = status.process) === null || _e === void 0 ? void 0 : _e.arch) + ") " + dockerStat });
5143
+ statusItem.push({ label: "Platform", text: "".concat((_d = status.process) === null || _d === void 0 ? void 0 : _d.platform, " (").concat((_e = status.process) === null || _e === void 0 ? void 0 : _e.arch, ") ").concat(dockerStat) });
5144
5144
  statusItem.push({ label: "Node.js Version", text: (_g = (_f = status.process) === null || _f === void 0 ? void 0 : _f.versions) === null || _g === void 0 ? void 0 : _g.node });
5145
- statusItem.push({ label: "Memory (RSS)", text: Math.round(((_j = (_h = status.process) === null || _h === void 0 ? void 0 : _h.memoryUsage) === null || _j === void 0 ? void 0 : _j.rss) / 1024 / 1024) + " MB" });
5146
- statusItem.push({ label: "EPG Gathering Network IDs", text: status.epg.gatheringNetworks.map(function (id) { return "0x" + id.toString(16).toUpperCase(); }).join(", ") });
5147
- statusItem.push({ label: "EPG Stored Events", text: status.epg.storedEvents + " Events" });
5148
- statusItem.push({ label: "TunerDevice Streams", text: "" + status.streamCount.tunerDevice });
5149
- statusItem.push({ label: "TSFilter Streams", text: "" + status.streamCount.tsFilter });
5150
- statusItem.push({ label: "Decoder Streams", text: "" + status.streamCount.decoder });
5151
- statusItem.push({ label: "RPC Connections", text: "" + status.rpcCount });
5145
+ statusItem.push({ label: "Memory (RSS)", text: "".concat(Math.round(((_j = (_h = status.process) === null || _h === void 0 ? void 0 : _h.memoryUsage) === null || _j === void 0 ? void 0 : _j.rss) / 1024 / 1024), " MB") });
5146
+ statusItem.push({ label: "EPG Gathering Network IDs", text: status.epg.gatheringNetworks.map(function (id) { return "0x".concat(id.toString(16).toUpperCase()); }).join(", ") });
5147
+ statusItem.push({ label: "EPG Stored Events", text: "".concat(status.epg.storedEvents, " Events") });
5148
+ statusItem.push({ label: "TunerDevice Streams", text: "".concat(status.streamCount.tunerDevice) });
5149
+ statusItem.push({ label: "TSFilter Streams", text: "".concat(status.streamCount.tsFilter) });
5150
+ statusItem.push({ label: "Decoder Streams", text: "".concat(status.streamCount.decoder) });
5151
+ statusItem.push({ label: "RPC Connections", text: "".concat(status.rpcCount) });
5152
5152
  }
5153
5153
  var statusList = [];
5154
5154
  for (var i = 0; i < statusItem.length; i++) {
5155
5155
  var item = statusItem[i];
5156
- statusList.push(react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { key: "status-list-item" + i, className: "ms-Grid-col ms-sm12 ms-xl6 ms-xxl4 ms-xxxl3" },
5156
+ statusList.push(react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { key: "status-list-item".concat(i), className: "ms-Grid-col ms-sm12 ms-xl6 ms-xxl4 ms-xxxl3" },
5157
5157
  react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { className: "ms-Grid", style: { margin: 4 } },
5158
5158
  react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { className: "ms-Grid-row" },
5159
5159
  react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { className: "ms-Grid-col ms-sm6" },
@@ -5167,19 +5167,19 @@ var StatusView = function (_a) {
5167
5167
  if (service.type !== 1) {
5168
5168
  continue;
5169
5169
  }
5170
- var tooltipId = "service-list-item#" + i + "-tooltip";
5171
- serviceList.push(react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { key: "service-list-item" + i, className: "ms-Grid-col ms-sm6 ms-xl3 ms-xxl2" },
5172
- react__WEBPACK_IMPORTED_MODULE_0__.createElement(_fluentui_react__WEBPACK_IMPORTED_MODULE_1__.TooltipHost, { id: tooltipId, calloutProps: calloutProps, styles: tooltipHostStyles, tooltipProps: tooltipProps, content: ("#" + service.id + "\n" +
5173
- ("SID: 0x" + service.serviceId.toString(16).toUpperCase() + " (" + service.serviceId + ")\n") +
5174
- ("NID: 0x" + service.networkId.toString(16).toUpperCase() + " (" + service.networkId + ")\n") +
5175
- ("Channel: " + service.channel.type + " / " + service.channel.channel)) },
5170
+ var tooltipId = "service-list-item#".concat(i, "-tooltip");
5171
+ serviceList.push(react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { key: "service-list-item".concat(i), className: "ms-Grid-col ms-sm6 ms-xl3 ms-xxl2" },
5172
+ react__WEBPACK_IMPORTED_MODULE_0__.createElement(_fluentui_react__WEBPACK_IMPORTED_MODULE_1__.TooltipHost, { id: tooltipId, calloutProps: calloutProps, styles: tooltipHostStyles, tooltipProps: tooltipProps, content: ("#".concat(service.id, "\n") +
5173
+ "SID: 0x".concat(service.serviceId.toString(16).toUpperCase(), " (").concat(service.serviceId, ")\n") +
5174
+ "NID: 0x".concat(service.networkId.toString(16).toUpperCase(), " (").concat(service.networkId, ")\n") +
5175
+ "Channel: ".concat(service.channel.type, " / ").concat(service.channel.channel)) },
5176
5176
  react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { className: "ms-Grid", "area-describeby": tooltipId, style: { margin: 4 } },
5177
5177
  react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { className: "ms-Grid-row", style: {
5178
5178
  padding: 1,
5179
5179
  height: 24,
5180
5180
  backgroundSize: "contain",
5181
5181
  backgroundRepeat: "no-repeat",
5182
- backgroundImage: service.hasLogoData && "url(/api/services/" + service.id + "/logo)"
5182
+ backgroundImage: service.hasLogoData && "url(/api/services/".concat(service.id, "/logo)")
5183
5183
  } },
5184
5184
  react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { className: "ms-Grid-col ms-sm12", style: { paddingLeft: 50 } },
5185
5185
  react__WEBPACK_IMPORTED_MODULE_0__.createElement("span", { className: "ms-fontWeight-semibold ms-fontSize-12" }, service.name),
@@ -5351,7 +5351,7 @@ var Configurator = function (_a) {
5351
5351
  var items = [];
5352
5352
  editing === null || editing === void 0 ? void 0 : editing.forEach(function (tuner, i) {
5353
5353
  var item = {
5354
- key: "item" + i,
5354
+ key: "item".concat(i),
5355
5355
  enable: (react__WEBPACK_IMPORTED_MODULE_0__.createElement(_fluentui_react__WEBPACK_IMPORTED_MODULE_1__.Toggle, { checked: !tuner.isDisabled, onChange: function (ev, checked) {
5356
5356
  tuner.isDisabled = !checked;
5357
5357
  setEditing(__spreadArray([], editing, true));
@@ -5405,7 +5405,7 @@ var Configurator = function (_a) {
5405
5405
  }
5406
5406
  setEditing(__spreadArray([], editing, true));
5407
5407
  } }),
5408
- react__WEBPACK_IMPORTED_MODULE_0__.createElement(_fluentui_react__WEBPACK_IMPORTED_MODULE_1__.TextField, { style: { width: 55 }, label: "Port:", placeholder: "40772", value: "" + (tuner.remoteMirakurunPort || ""), onChange: function (ev, newValue) {
5408
+ react__WEBPACK_IMPORTED_MODULE_0__.createElement(_fluentui_react__WEBPACK_IMPORTED_MODULE_1__.TextField, { style: { width: 55 }, label: "Port:", placeholder: "40772", value: "".concat(tuner.remoteMirakurunPort || ""), onChange: function (ev, newValue) {
5409
5409
  if (newValue === "") {
5410
5410
  delete tuner.remoteMirakurunPort;
5411
5411
  }
@@ -5470,10 +5470,10 @@ var Configurator = function (_a) {
5470
5470
  react__WEBPACK_IMPORTED_MODULE_0__.createElement(_fluentui_react__WEBPACK_IMPORTED_MODULE_1__.ActionButton, { text: "Add Tuner", iconProps: { iconName: "Add" }, onClick: function () {
5471
5471
  var i = editing.length;
5472
5472
  editing.push({
5473
- name: "adapter" + i,
5473
+ name: "adapter".concat(i),
5474
5474
  types: [],
5475
- command: "dvbv5-zap -a " + i + " -c ./config/dvbconf-for-isdb/conf/dvbv5_channels_isdbs.conf -r -P <channel>",
5476
- dvbDevicePath: "/dev/dvb/adapter" + i + "/dvr0",
5475
+ command: "dvbv5-zap -a ".concat(i, " -c ./config/dvbconf-for-isdb/conf/dvbv5_channels_isdbs.conf -r -P <channel>"),
5476
+ dvbDevicePath: "/dev/dvb/adapter".concat(i, "/dvr0"),
5477
5477
  decoder: "arib-b25-stream-test",
5478
5478
  isDisabled: true
5479
5479
  });
@@ -5613,14 +5613,14 @@ var TunersManager = function (_a) {
5613
5613
  var items = [];
5614
5614
  var _loop_1 = function (tuner) {
5615
5615
  var item = {
5616
- _group: "#" + tuner.index + ": " + tuner.name + " (" + tuner.types.join(", ") + ")",
5616
+ _group: "#".concat(tuner.index, ": ").concat(tuner.name, " (").concat(tuner.types.join(", "), ")"),
5617
5617
  _kind: "device",
5618
- key: "row-device-" + tuner.index,
5618
+ key: "row-device-".concat(tuner.index),
5619
5619
  name: tuner.name,
5620
5620
  command: (react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null,
5621
5621
  react__WEBPACK_IMPORTED_MODULE_0__.createElement(_fluentui_react__WEBPACK_IMPORTED_MODULE_1__.Icon, { title: "Command", iconName: "ServerProcesses" }),
5622
5622
  react__WEBPACK_IMPORTED_MODULE_0__.createElement(_fluentui_react__WEBPACK_IMPORTED_MODULE_1__.Text, { style: { lineHeight: "30px", marginLeft: 8 } }, tuner.command || "-"),
5623
- react__WEBPACK_IMPORTED_MODULE_0__.createElement(_fluentui_react__WEBPACK_IMPORTED_MODULE_1__.Text, { style: { lineHeight: "30px", marginLeft: 8 }, className: _fluentui_react__WEBPACK_IMPORTED_MODULE_1__.ColorClassNames.neutralTertiaryAlt }, tuner.pid ? "(pid=" + tuner.pid + ")" : "")))
5623
+ react__WEBPACK_IMPORTED_MODULE_0__.createElement(_fluentui_react__WEBPACK_IMPORTED_MODULE_1__.Text, { style: { lineHeight: "30px", marginLeft: 8 }, className: _fluentui_react__WEBPACK_IMPORTED_MODULE_1__.ColorClassNames.neutralTertiaryAlt }, tuner.pid ? "(pid=".concat(tuner.pid, ")") : "")))
5624
5624
  };
5625
5625
  if (tuner.command) {
5626
5626
  item.controls = (react__WEBPACK_IMPORTED_MODULE_0__.createElement(_fluentui_react__WEBPACK_IMPORTED_MODULE_1__.IconButton, { title: "Controls", iconProps: { iconName: "More" }, menuProps: { items: [{
@@ -5636,7 +5636,7 @@ var TunersManager = function (_a) {
5636
5636
  items.push({
5637
5637
  _group: item._group,
5638
5638
  _kind: "user",
5639
- key: item.key + "-user-" + user.id,
5639
+ key: "".concat(item.key, "-user-").concat(user.id),
5640
5640
  name: user.id,
5641
5641
  user: (react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null,
5642
5642
  react__WEBPACK_IMPORTED_MODULE_0__.createElement(_fluentui_react__WEBPACK_IMPORTED_MODULE_1__.Icon, { title: "User", iconName: /Mirakurun/.test(user.id) ? "Processing" : "PlugConnected" }),
@@ -5681,7 +5681,7 @@ var TunersManager = function (_a) {
5681
5681
  (function () { return __awaiter(void 0, void 0, void 0, function () {
5682
5682
  return __generator(this, function (_a) {
5683
5683
  switch (_a.label) {
5684
- case 0: return [4, fetch("/api/tuners/" + killTarget + "/process", { method: "DELETE" })];
5684
+ case 0: return [4, fetch("/api/tuners/".concat(killTarget, "/process"), { method: "DELETE" })];
5685
5685
  case 1:
5686
5686
  _a.sent();
5687
5687
  return [2];
@@ -6909,7 +6909,7 @@ function idleStatusChecker() {
6909
6909
  return true;
6910
6910
  }
6911
6911
  uiStateEvents.on("update:tuners", idleStatusChecker);
6912
- var rpc = new jsonrpc2_ws__WEBPACK_IMPORTED_MODULE_4__.Client("ws://" + location.host + "/rpc", {
6912
+ var rpc = new jsonrpc2_ws__WEBPACK_IMPORTED_MODULE_4__.Client("ws://".concat(location.host, "/rpc"), {
6913
6913
  protocols: null
6914
6914
  });
6915
6915
  rpc.on("connecting", function () {
@@ -7057,7 +7057,7 @@ var Content = function () {
7057
7057
  var _a;
7058
7058
  var _b = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(uiState), state = _b[0], setState = _b[1];
7059
7059
  (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(function () {
7060
- var title = state.statusName + " - Mirakurun " + state.version;
7060
+ var title = "".concat(state.statusName, " - Mirakurun ").concat(state.version);
7061
7061
  if (document.title !== title) {
7062
7062
  document.title = title;
7063
7063
  }