mirakurun 4.0.0-beta.13 → 4.0.0-beta.14

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 (52) hide show
  1. package/CHANGELOG.md +27 -2
  2. package/api.d.ts +34 -3
  3. package/api.yml +84 -4
  4. package/doc/Configuration.ja.md +4 -2
  5. package/doc/Configuration.md +4 -2
  6. package/doc/Platforms.ja.md +5 -3
  7. package/doc/Platforms.md +2 -0
  8. package/lib/Mirakurun/Channel.d.ts +0 -1
  9. package/lib/Mirakurun/Channel.js +56 -44
  10. package/lib/Mirakurun/Channel.js.map +1 -1
  11. package/lib/Mirakurun/ChannelItem.d.ts +0 -2
  12. package/lib/Mirakurun/ChannelItem.js +0 -108
  13. package/lib/Mirakurun/ChannelItem.js.map +1 -1
  14. package/lib/Mirakurun/Job.d.ts +67 -0
  15. package/lib/Mirakurun/Job.js +441 -0
  16. package/lib/Mirakurun/Job.js.map +1 -0
  17. package/lib/Mirakurun/Program.d.ts +0 -1
  18. package/lib/Mirakurun/Program.js +36 -25
  19. package/lib/Mirakurun/Program.js.map +1 -1
  20. package/lib/Mirakurun/Service.d.ts +6 -0
  21. package/lib/Mirakurun/Service.js +139 -0
  22. package/lib/Mirakurun/Service.js.map +1 -1
  23. package/lib/Mirakurun/Tuner.d.ts +4 -0
  24. package/lib/Mirakurun/Tuner.js +111 -99
  25. package/lib/Mirakurun/Tuner.js.map +1 -1
  26. package/lib/Mirakurun/_.d.ts +2 -0
  27. package/lib/Mirakurun/_.js.map +1 -1
  28. package/lib/Mirakurun/api/job-schedules/{key}/run.d.ts +8 -0
  29. package/lib/Mirakurun/api/job-schedules/{key}/run.js +93 -0
  30. package/lib/Mirakurun/api/job-schedules/{key}/run.js.map +1 -0
  31. package/lib/Mirakurun/api/job-schedules.d.ts +2 -0
  32. package/lib/Mirakurun/api/job-schedules.js +68 -0
  33. package/lib/Mirakurun/api/job-schedules.js.map +1 -0
  34. package/lib/Mirakurun/api/jobs/{id}/abort.d.ts +8 -0
  35. package/lib/Mirakurun/api/jobs/{id}/abort.js +85 -0
  36. package/lib/Mirakurun/api/jobs/{id}/abort.js.map +1 -0
  37. package/lib/Mirakurun/api/jobs.d.ts +2 -0
  38. package/lib/Mirakurun/api/jobs.js +68 -0
  39. package/lib/Mirakurun/api/jobs.js.map +1 -0
  40. package/lib/Mirakurun/config.js +6 -5
  41. package/lib/Mirakurun/config.js.map +1 -1
  42. package/lib/Mirakurun/rpc.js +3 -1
  43. package/lib/Mirakurun/rpc.js.map +1 -1
  44. package/lib/server.js +2 -0
  45. package/lib/server.js.map +1 -1
  46. package/lib/tsconfig.tsbuildinfo +1 -1
  47. package/lib/ui/index.bundle.js +462 -57
  48. package/lib/ui/index.bundle.js.map +1 -1
  49. package/package.json +1 -1
  50. package/lib/Mirakurun/queue.d.ts +0 -3
  51. package/lib/Mirakurun/queue.js +0 -5
  52. package/lib/Mirakurun/queue.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -6,13 +6,38 @@ see [Commit Logs](https://github.com/Chinachu/Mirakurun/commits/master) to check
6
6
 
7
7
  **Important Notice**: Mirakurun 4.0.0 includes significant performance improvements, enhanced EPG processing, asynchronous file I/O operations, and new features. As announced in 3.9.0, the experimental Win32 support has been completely removed.
8
8
 
9
+ ## 4.0.0-beta.14 (2025-03-30)
10
+
11
+ ### Key Changes
12
+
13
+ - **Job/Queue**: Improved background job mechanism for like EPG updates.
14
+ - **Users can now request EPG updates at any time.**
15
+ - Job execution schedules can now be set in a **cron-like format**.
16
+ - <u>Jobs are now executed in parallel</u> according to the number of CPU cores and resource availability.
17
+ - At the moment, the number of parallel executions is `Math.max(1, Math.floor(os.cpus().length / 2))`, but it will be made configurable in the future.
18
+
19
+ ### Server Changes
20
+
21
+ - **Config**:
22
+ - Added: `programGCJobSchedule`, `epgGatheringJobSchedule` server configs.
23
+ - Removed: `programGCInterval`, `epgGatheringInterval` server configs. (*breaking change*)
24
+ - Settings are not migrated. If you have customized, you must re-configure them in cron-like format, which can be changed from the Web UI.
25
+ - see: [Configuration](doc/Configuration.md) ([日本語](doc/Configuration.ja.md))
26
+ - **API**:
27
+ - Added: `runJobSchedule`, `abortJob` operations.
28
+ - **UI**:
29
+ - Added: **Jobs** view.
30
+ - Update: **Config** view.
31
+
9
32
  ## 4.0.0-beta.13 (2025-03-29)
10
33
 
11
34
  ### Docker Changes
12
35
 
13
- - Added `DISABLE_PCSCD` environment variable to disable pcscd service
14
- - Added `DISABLE_B25_TEST` environment variable to disable B25 test decoder installation
36
+ - Added `DISABLE_PCSCD` environment variable to disable pcscd service.
37
+ - Added `DISABLE_B25_TEST` environment variable to disable B25 test decoder installation.
15
38
  - Updated `docker-compose.yml` - For testing purposes, all devices can be accessed without setting "devices" by default.
39
+ - **The previous default setting required a restart of the container when the card reader's USB was unplugged and plugged in, but the new default setting restores it automatically.** please check the [docker-compose.yml](docker/docker-compose.yml).
40
+ - **以前のデフォルト設定では、カードリーダーの USB を抜き差しすると、コンテナの再起動が必要でしたが、今回のデフォルト設定では、自動的に復旧するようになりました。** 設定例は [docker-compose.yml](docker/docker-compose.yml) をご確認ください。
16
41
 
17
42
  ## 4.0.0-beta.12 (2025-03-21)
18
43
 
package/api.d.ts CHANGED
@@ -216,6 +216,37 @@ export interface TunerProcess {
216
216
  pid: number;
217
217
  }
218
218
 
219
+ export interface JobScheduleItem {
220
+ key: string;
221
+ schedule: string;
222
+ job: Pick<JobItem, "key" | "name">;
223
+ }
224
+
225
+ export interface JobItem {
226
+ key: string;
227
+ name: string;
228
+ id: string;
229
+ status: "queued" | "standby" | "running" | "finished";
230
+ retryCount: number;
231
+
232
+ retryOnAbort?: boolean;
233
+ retryOnFail?: boolean;
234
+ retryMax?: number;
235
+ retryDelay?: number;
236
+
237
+ isAborting: boolean;
238
+ hasAborted?: boolean;
239
+ hasSkipped?: boolean;
240
+ hasFailed?: boolean;
241
+ error?: string;
242
+
243
+ createdAt: number;
244
+ updatedAt: number;
245
+ startedAt?: number;
246
+ finishedAt?: number;
247
+ duration?: number;
248
+ }
249
+
219
250
  export interface Event<T = any> {
220
251
  resource: EventResource;
221
252
  type: EventType;
@@ -223,7 +254,7 @@ export interface Event<T = any> {
223
254
  time: UnixtimeMS;
224
255
  }
225
256
 
226
- export type EventResource = "program" | "service" | "tuner";
257
+ export type EventResource = "program" | "service" | "tuner" | "job" | "job_schedule";
227
258
 
228
259
  export type EventType = "create" | "update" | "remove";
229
260
 
@@ -236,8 +267,8 @@ export interface ConfigServer {
236
267
  maxLogHistory?: number;
237
268
  maxBufferBytesBeforeReady?: number;
238
269
  eventEndTimeout?: number;
239
- programGCInterval?: number;
240
- epgGatheringInterval?: number;
270
+ programGCJobSchedule?: string;
271
+ epgGatheringJobSchedule?: string;
241
272
  epgRetrievalTime?: number;
242
273
  logoDataInterval?: number;
243
274
  disableEITParsing?: boolean;
package/api.yml CHANGED
@@ -406,6 +406,86 @@ definitions:
406
406
  pid:
407
407
  type: integer
408
408
 
409
+ # job -----------------------------------------------------------------------
410
+
411
+ JobScheduleItem:
412
+ type: object
413
+ required:
414
+ - key
415
+ - schedule
416
+ - job
417
+ properties:
418
+ key:
419
+ type: string
420
+ schedule:
421
+ type: string
422
+ job:
423
+ type: object
424
+ required:
425
+ - key
426
+ - name
427
+ properties:
428
+ key:
429
+ type: string
430
+ name:
431
+ type: string
432
+
433
+ JobItem:
434
+ type: object
435
+ required:
436
+ - key
437
+ - name
438
+ - id
439
+ - status
440
+ - retryCount
441
+ - isAborting
442
+ - createdAt
443
+ - updatedAt
444
+ properties:
445
+ key:
446
+ type: string
447
+ name:
448
+ type: string
449
+ id:
450
+ type: string
451
+ status:
452
+ type: string
453
+ enum:
454
+ - queued
455
+ - standby
456
+ - running
457
+ - finished
458
+ retryCount:
459
+ type: integer
460
+ retryOnAbort:
461
+ type: boolean
462
+ retryOnFail:
463
+ type: boolean
464
+ retryMax:
465
+ type: integer
466
+ retryDelay:
467
+ type: integer
468
+ isAborting:
469
+ type: boolean
470
+ hasAborted:
471
+ type: boolean
472
+ hasSkipped:
473
+ type: boolean
474
+ hasFailed:
475
+ type: boolean
476
+ error:
477
+ type: string
478
+ createdAt:
479
+ $ref: '#/definitions/UnixtimeMS'
480
+ updatedAt:
481
+ $ref: '#/definitions/UnixtimeMS'
482
+ startedAt:
483
+ $ref: '#/definitions/UnixtimeMS'
484
+ finishedAt:
485
+ $ref: '#/definitions/UnixtimeMS'
486
+ duration:
487
+ type: integer
488
+
409
489
  # event ---------------------------------------------------------------------
410
490
 
411
491
  Event:
@@ -466,10 +546,10 @@ definitions:
466
546
  eventEndTimeout:
467
547
  type: integer
468
548
  minimum: 0
469
- programGCInterval:
470
- type: integer
471
- epgGatheringInterval:
472
- type: integer
549
+ programGCJobSchedule:
550
+ type: string
551
+ epgGatheringJobSchedule:
552
+ type: string
473
553
  epgRetrievalTime:
474
554
  type: integer
475
555
  logoDataInterval:
@@ -1,3 +1,5 @@
1
+ [**English**](Configuration.md) | [**日本語**](Configuration.ja.md)
2
+
1
3
  # 設定
2
4
 
3
5
  - 🗒️[server.yml](#serveryml) - サーバー設定
@@ -26,8 +28,8 @@
26
28
  | `disableIPv6` | - | Boolean | `false` | IPv6の無効化 **※Docker では常に無効** |
27
29
  | `maxBufferBytesBeforeReady` | `MAX_BUFFER_BYTES_BEFORE_READY` | Integer | `8388608` | 準備完了前の最大バッファサイズ (バイト)<br>**※番組開始の頭が欠ける場合は増やす** |
28
30
  | `eventEndTimeout` | `EVENT_END_TIMEOUT` | Integer | `1000` | イベント終了タイムアウト (ミリ秒)<br>**※番組終了が誤判定される場合は長くする** |
29
- | `programGCInterval` | `PROGRAM_GC_INTERVAL` | Integer | `3600000` | 番組一覧の GC 間隔 (ミリ秒) |
30
- | `epgGatheringInterval` | `EPG_GATHERING_INTERVAL` | Integer | `1800000` | EPG 収集間隔 (ミリ秒) |
31
+ | `programGCJobSchedule` | `PROGRAM_GC_JOB_SCHEDULE` | String | `45 * * * *` | 番組一覧の GC スケジュール (cron 風形式) |
32
+ | `epgGatheringJobSchedule` | `EPG_GATHERING_JOB_SCHEDULE` | String | `20,50 * * * *` | EPG 収集スケジュール (cron 風形式) |
31
33
  | `epgRetrievalTime` | `EPG_RETRIEVAL_TIME` | Integer | `600000` | EPG 取得時間 (ミリ秒) |
32
34
  | `logoDataInterval` | `LOGO_DATA_INTERVAL` | Integer | `604800000` | ロゴデータ更新間隔 (ミリ秒) |
33
35
  | `disableEITParsing` | `DISABLE_EIT_PARSING` | Boolean | `false` | ⚠️EIT パースの無効化 |
@@ -1,3 +1,5 @@
1
+ [**English**](Configuration.md) | [**日本語**](Configuration.ja.md)
2
+
1
3
  # Configuration
2
4
 
3
5
  - 🗒️[server.yml](#serveryml) - Server Configuration
@@ -26,8 +28,8 @@
26
28
  | `disableIPv6` | - | Boolean | `false` | Disable IPv6 **※Always disabled in Docker** |
27
29
  | `maxBufferBytesBeforeReady` | `MAX_BUFFER_BYTES_BEFORE_READY` | Integer | `8388608` | Maximum buffer size before ready (bytes)<br>**※Increase if the beginning of the program is missing** |
28
30
  | `eventEndTimeout` | `EVENT_END_TIMEOUT` | Integer | `1000` | Event end timeout (milliseconds)<br>**※Increase if program end is incorrectly detected** |
29
- | `programGCInterval` | `PROGRAM_GC_INTERVAL` | Integer | `3600000` | Program list GC interval (milliseconds) |
30
- | `epgGatheringInterval` | `EPG_GATHERING_INTERVAL` | Integer | `1800000` | EPG gathering interval (milliseconds) |
31
+ | `programGCJobSchedule` | `PROGRAM_GC_JOB_SCHEDULE` | String | `45 * * * *` | Program list GC schedule (cron-like format) |
32
+ | `epgGatheringJobSchedule` | `EPG_GATHERING_JOB_SCHEDULE` | String | `20,50 * * * *` | EPG gathering schedule (cron-like format) |
31
33
  | `epgRetrievalTime` | `EPG_RETRIEVAL_TIME` | Integer | `600000` | EPG retrieval time (milliseconds) |
32
34
  | `logoDataInterval` | `LOGO_DATA_INTERVAL` | Integer | `604800000` | Logo data update interval (milliseconds) |
33
35
  | `disableEITParsing` | `DISABLE_EIT_PARSING` | Boolean | `false` | ⚠️Disable EIT parsing |
@@ -1,3 +1,5 @@
1
+ [**English**](Platforms.md) | [**日本語**](Platforms.ja.md)
2
+
1
3
  # プラットフォーム / 環境構築手順
2
4
 
3
5
  ## 概要
@@ -10,7 +12,7 @@
10
12
  - **Ubuntu Server 24.10** / 他
11
13
  - ⚠️注意: デスクトップ環境 / VM (仮想マシン) はサポートせず、不安定です!
12
14
 
13
- - [Linux + PM2 (レガシー)](#linux-w-pm2-legacy)
15
+ - [Linux + PM2 (レガシー)](#linux--pm2-レガシー)
14
16
  - [Node.js](https://nodejs.org/en/download) `^18 || ^20 || ^22`
15
17
  - [PM2](https://pm2.keymetrics.io/)
16
18
 
@@ -140,7 +142,7 @@ docker compose logs [-f]
140
142
  ### ⚡設定
141
143
 
142
144
  - 主要な設定は Web UI から変更できます
143
- - 全ての設定は [Configuration.md](Configuration.md) を参照してください
145
+ - 全ての設定は [Configuration.md](Configuration.ja.md) を参照してください
144
146
 
145
147
  ```
146
148
  vim /opt/mirakurun/config/server.yml
@@ -176,7 +178,7 @@ vim /opt/mirakurun/config/channels.yml
176
178
  - `bin/`
177
179
  - `bin/startup` - カスタム起動スクリプト (オプション)
178
180
 
179
- ## PM2を使用したLinux (レガシー)
181
+ ## Linux + PM2 (レガシー)
180
182
 
181
183
  この方法は推奨されませんが、一部の古いユースケースの為に残されています。
182
184
  PM2 に特別対応するコードはすでに削除されており、エクスペリエンスは低下します。
package/doc/Platforms.md CHANGED
@@ -1,3 +1,5 @@
1
+ [**English**](Platforms.md) | [**日本語**](Platforms.ja.md)
2
+
1
3
  # Notes and Instructions on Platform Support
2
4
 
3
5
  ## Overview
@@ -2,7 +2,6 @@ import * as apid from "../../api";
2
2
  import ChannelItem from "./ChannelItem";
3
3
  export declare class Channel {
4
4
  private _items;
5
- private _epgGatheringInterval;
6
5
  constructor();
7
6
  get items(): ChannelItem[];
8
7
  add(item: ChannelItem): void;
@@ -37,18 +37,34 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
37
37
  };
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.Channel = void 0;
40
+ const common = __importStar(require("./common"));
40
41
  const log = __importStar(require("./log"));
41
42
  const _1 = __importDefault(require("./_"));
42
43
  const status_1 = __importDefault(require("./status"));
43
- const queue_1 = __importDefault(require("./queue"));
44
44
  const ChannelItem_1 = __importDefault(require("./ChannelItem"));
45
45
  class Channel {
46
46
  _items = [];
47
- _epgGatheringInterval = _1.default.config.server.epgGatheringInterval || 1000 * 60 * 30;
48
47
  constructor() {
49
48
  this._load();
50
49
  if (_1.default.config.server.disableEITParsing !== true) {
51
- setTimeout(this._epgGatherer.bind(this), 1000 * 60);
50
+ const epgJob = {
51
+ key: "EPG.Gatherer",
52
+ name: "EPG Gatherer",
53
+ fn: this._epgGatherer.bind(this)
54
+ };
55
+ _1.default.job.add({
56
+ ...epgJob,
57
+ fn: () => this._epgGatherer(true),
58
+ readyFn: async () => {
59
+ await common.sleep(1000 * 60);
60
+ return true;
61
+ }
62
+ });
63
+ _1.default.job.addSchedule({
64
+ key: epgJob.key,
65
+ schedule: _1.default.config.server.epgGatheringJobSchedule || "20,50 * * * *",
66
+ job: epgJob
67
+ });
52
68
  }
53
69
  }
54
70
  get items() {
@@ -145,38 +161,49 @@ class Channel {
145
161
  if (_1.default.tuner.typeExists(channel.type) === false) {
146
162
  return;
147
163
  }
148
- const pre = this.get(channel.type, channel.channel);
149
- if (pre) {
164
+ if (!this.get(channel.type, channel.channel)) {
150
165
  if (channel.serviceId) {
151
- pre.addService(channel.serviceId);
152
- }
153
- }
154
- else {
155
- if (channel.type !== "GR") {
156
166
  channel.name = `${channel.type}:${channel.channel}`;
157
167
  }
158
168
  this.add(new ChannelItem_1.default(channel));
159
169
  }
160
170
  });
161
171
  }
162
- _epgGatherer() {
163
- queue_1.default.add(async () => {
164
- const networkIds = [...new Set(_1.default.service.items.map(item => item.networkId))];
165
- networkIds.forEach(networkId => {
166
- const services = _1.default.service.findByNetworkId(networkId);
167
- if (services.length === 0) {
168
- return;
169
- }
170
- const service = services[0];
171
- queue_1.default.add(async () => {
172
+ async _epgGatherer(startup = false) {
173
+ const networkIds = [...new Set(_1.default.service.items.map(item => item.networkId))];
174
+ for (const networkId of networkIds) {
175
+ const services = _1.default.service.findByNetworkId(networkId);
176
+ if (services.length === 0) {
177
+ continue;
178
+ }
179
+ const service = services[0];
180
+ _1.default.job.add({
181
+ key: `EPG.Gather.NID.${networkId}`,
182
+ name: `EPG Gather Network#${networkId}`,
183
+ fn: async () => {
184
+ log.info("Network#%d EPG gathering has started", networkId);
185
+ try {
186
+ await _1.default.tuner.getEPG(service.channel);
187
+ log.info("Network#%d EPG gathering has finished", networkId);
188
+ }
189
+ catch (e) {
190
+ log.warn("Network#%d EPG gathering has failed [%s]", networkId, e);
191
+ throw new Error("EPG gathering failed");
192
+ }
193
+ },
194
+ readyFn: async () => {
195
+ if (status_1.default.epg[networkId] === true) {
196
+ log.info("Network#%d EPG gathering is already in progress on another stream", networkId);
197
+ return false;
198
+ }
172
199
  if (service.epgReady === true) {
173
200
  const now = Date.now();
174
- if (now - service.epgUpdatedAt < this._epgGatheringInterval) {
175
- log.info("Network#%d EPG gathering has skipped by `epgGatheringInterval`", networkId);
176
- return;
201
+ if (startup && now - service.epgUpdatedAt < 1000 * 60 * 10) {
202
+ log.info("Network#%d EPG gathering has skipped because EPG is already up to date (in 10 mins)", networkId);
203
+ return false;
177
204
  }
178
- if (now - service.epgUpdatedAt > 1000 * 60 * 60 * 6) {
179
- log.info("Network#%d EPG gathering is resuming forcibly because reached maximum pause time", networkId);
205
+ if (now - service.epgUpdatedAt > 1000 * 60 * 60 * 12) {
206
+ log.info("Network#%d EPG gathering is resuming forcibly because reached maximum pause time (12 hours)", networkId);
180
207
  service.epgReady = false;
181
208
  }
182
209
  else {
@@ -186,31 +213,16 @@ class Channel {
186
213
  const networkPrograms = _1.default.program.findByNetworkId(networkId);
187
214
  if (networkPrograms.length > 0) {
188
215
  log.info("Network#%d EPG gathering has skipped because broadcast is off", networkId);
189
- return;
216
+ return false;
190
217
  }
191
218
  service.epgReady = false;
192
219
  }
193
220
  }
221
+ return _1.default.tuner.readyForJob(service.channel);
194
222
  }
195
- if (status_1.default.epg[networkId] === true) {
196
- log.info("Network#%d EPG gathering is already in progress on another stream", networkId);
197
- return;
198
- }
199
- log.info("Network#%d EPG gathering has started", networkId);
200
- try {
201
- await _1.default.tuner.getEPG(service.channel);
202
- log.info("Network#%d EPG gathering has finished", networkId);
203
- }
204
- catch (e) {
205
- log.warn("Network#%d EPG gathering has failed [%s]", networkId, e);
206
- }
207
- });
208
- log.debug("Network#%d EPG gathering has queued", networkId);
209
- });
210
- queue_1.default.add(async () => {
211
- setTimeout(this._epgGatherer.bind(this), this._epgGatheringInterval);
223
+ }
212
224
  });
213
- });
225
+ }
214
226
  }
215
227
  }
216
228
  exports.Channel = Channel;
@@ -1 +1 @@
1
- {"version":3,"file":"Channel.js","sourceRoot":"","sources":["../../src/Mirakurun/Channel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Channel.js","sourceRoot":"","sources":["../../src/Mirakurun/Channel.ts"],"names":[],"mappings":"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"}
@@ -10,8 +10,6 @@ export default class ChannelItem {
10
10
  readonly tsmfRelTs: number;
11
11
  readonly commandVars: apid.ConfigChannelsItem["commandVars"];
12
12
  constructor(config: apid.ConfigChannelsItem);
13
- addService(serviceId: number): void;
14
13
  getServices(): ServiceItem[];
15
14
  getStream(user: common.User, output: stream.Writable): Promise<TSFilter>;
16
- serviceScan(add: boolean): void;
17
15
  }
@@ -1,45 +1,9 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
36
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
37
4
  };
38
5
  Object.defineProperty(exports, "__esModule", { value: true });
39
6
  const _1 = __importDefault(require("./_"));
40
- const queue_1 = __importDefault(require("./queue"));
41
- const log = __importStar(require("./log"));
42
- const ServiceItem_1 = __importDefault(require("./ServiceItem"));
43
7
  class ChannelItem {
44
8
  name;
45
9
  type;
@@ -52,47 +16,6 @@ class ChannelItem {
52
16
  this.channel = config.channel;
53
17
  this.tsmfRelTs = config.tsmfRelTs;
54
18
  this.commandVars = config.commandVars;
55
- if (config.serviceId) {
56
- this.addService(config.serviceId);
57
- }
58
- setTimeout(() => {
59
- if (!config.serviceId && this.getServices().length === 0) {
60
- this.serviceScan(true);
61
- }
62
- else {
63
- setTimeout(() => this.serviceScan(false), 180000);
64
- }
65
- }, 3000);
66
- }
67
- addService(serviceId) {
68
- if (!_1.default.service) {
69
- process.nextTick(() => this.addService(serviceId));
70
- return;
71
- }
72
- if (_1.default.service.findByChannel(this).some(service => service.serviceId === serviceId) === true) {
73
- return;
74
- }
75
- log.debug("ChannelItem#'%s' serviceId=%d check has queued", this.name, serviceId);
76
- queue_1.default.add(async () => {
77
- log.info("ChannelItem#'%s' serviceId=%d check has started", this.name, serviceId);
78
- let services;
79
- try {
80
- services = await _1.default.tuner.getServices(this);
81
- }
82
- catch (e) {
83
- log.warn("ChannelItem#'%s' serviceId=%d check has failed [%s]", this.name, serviceId, e);
84
- setTimeout(() => this.addService(serviceId), 180000);
85
- return;
86
- }
87
- const service = services.find(service => service.serviceId === serviceId);
88
- if (!service) {
89
- log.warn("ChannelItem#'%s' serviceId=%d check has failed [no service]", this.name, serviceId);
90
- setTimeout(() => this.addService(serviceId), 3600000);
91
- return;
92
- }
93
- log.debug("ChannelItem#'%s' serviceId=%d: %s", this.name, serviceId, JSON.stringify(service, null, " "));
94
- _1.default.service.add(new ServiceItem_1.default(this, service.networkId, service.serviceId, service.name, service.type, service.logoId));
95
- });
96
19
  }
97
20
  getServices() {
98
21
  return _1.default.service.findByChannel(this);
@@ -100,37 +23,6 @@ class ChannelItem {
100
23
  getStream(user, output) {
101
24
  return _1.default.tuner.initChannelStream(this, user, output);
102
25
  }
103
- serviceScan(add) {
104
- log.debug("ChannelItem#'%s' service scan has queued", this.name);
105
- queue_1.default.add(async () => {
106
- log.info("ChannelItem#'%s' service scan has started", this.name);
107
- let services;
108
- try {
109
- services = await _1.default.tuner.getServices(this);
110
- }
111
- catch (e) {
112
- log.warn("ChannelItem#'%s' service scan has failed [%s]", this.name, e);
113
- setTimeout(() => this.serviceScan(add), add ? 180000 : 3600000);
114
- return;
115
- }
116
- log.debug("ChannelItem#'%s' services: %s", this.name, JSON.stringify(services, null, " "));
117
- services.forEach(service => {
118
- const item = _1.default.service.get(service.networkId, service.serviceId);
119
- if (item !== null) {
120
- item.name = service.name;
121
- item.type = service.type;
122
- if (service.logoId > -1) {
123
- item.logoId = service.logoId;
124
- }
125
- item.remoteControlKeyId = service.remoteControlKeyId;
126
- }
127
- else if (add === true) {
128
- _1.default.service.add(new ServiceItem_1.default(this, service.networkId, service.serviceId, service.name, service.type, service.logoId, service.remoteControlKeyId));
129
- }
130
- });
131
- log.info("ChannelItem#'%s' service scan has finished", this.name);
132
- });
133
- }
134
26
  }
135
27
  exports.default = ChannelItem;
136
28
  //# sourceMappingURL=ChannelItem.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChannelItem.js","sourceRoot":"","sources":["../../src/Mirakurun/ChannelItem.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ChannelItem.js","sourceRoot":"","sources":["../../src/Mirakurun/ChannelItem.ts"],"names":[],"mappings":";;;;;AAgBA,2CAAoB;AAMpB,MAAqB,WAAW;IACnB,IAAI,CAAS;IACb,IAAI,CAAmB;IACvB,OAAO,CAAS;IAChB,SAAS,CAAS;IAClB,WAAW,CAAyC;IAE7D,YAAY,MAA+B;QACvC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACxB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QAClC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IAC1C,CAAC;IAED,WAAW;QACP,OAAO,UAAC,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,SAAS,CAAC,IAAiB,EAAE,MAAuB;QAChD,OAAO,UAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACzD,CAAC;CACJ;AAtBD,8BAsBC"}