@gcorevideo/player 2.22.25 → 2.22.27

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.
@@ -1 +1 @@
1
- {"version":3,"file":"NerdStats.d.ts","sourceRoot":"","sources":["../../../src/plugins/clappr-nerd-stats/NerdStats.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EAGZ,IAAI,EAGL,MAAM,cAAc,CAAA;AAuBrB,OAAO,0DAA0D,CAAA;AAiCjE;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,SAAU,SAAQ,YAAY;IACzC,OAAO,CAAC,SAAS,CAAyB;IAE1C,OAAO,CAAC,gBAAgB,CAIvB;IAED,OAAO,CAAC,OAAO,CAAwB;IAEvC,OAAO,CAAC,IAAI,CAAQ;IAEpB,OAAO,CAAC,QAAQ,CAAU;IAE1B,OAAO,CAAC,YAAY,CAAc;IAElC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAuB;IAE7D;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAuB;IAEvD;;OAEG;IACH,IAAa,UAAU;;MAItB;IAED;;OAEG;IACH,IAAa,MAAM;;;;MAMlB;IAED,OAAO,CAAC,OAAO;IAKf,OAAO,KAAK,YAAY,GAEvB;IAED,OAAO,KAAK,sBAAsB,GAEjC;IAED,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,KAAK,YAAY,GAEvB;gBAEW,IAAI,EAAE,IAAI;IAgBtB;;OAEG;IACM,UAAU;IAUnB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,wBAAwB;IAiChC;;OAEG;IACM,OAAO;IAKhB,OAAO,CAAC,MAAM,CAMb;IAED,OAAO,CAAC,IAAI;IAgBZ,OAAO,CAAC,IAAI;IAMZ,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,eAAe;IA8BvB,OAAO,CAAC,aAAa;IAmFrB,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,sBAAsB;IAgB9B,OAAO,CAAC,eAAe;IAUvB;;OAEG;IACM,MAAM;IAcf,OAAO,CAAC,MAAM;IAiBd,OAAO,CAAC,qBAAqB;IAa7B,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,kBAAkB;CAU3B"}
1
+ {"version":3,"file":"NerdStats.d.ts","sourceRoot":"","sources":["../../../src/plugins/clappr-nerd-stats/NerdStats.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EAGZ,IAAI,EAGL,MAAM,cAAc,CAAA;AAuBrB,OAAO,0DAA0D,CAAA;AAiCjE;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,SAAU,SAAQ,YAAY;IACzC,OAAO,CAAC,SAAS,CAAyB;IAE1C,OAAO,CAAC,gBAAgB,CAIvB;IAED,OAAO,CAAC,OAAO,CAAwB;IAEvC,OAAO,CAAC,IAAI,CAAQ;IAEpB,OAAO,CAAC,QAAQ,CAAU;IAE1B,OAAO,CAAC,YAAY,CAAc;IAElC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAuB;IAE7D;;OAEG;IACH,IAAI,IAAI,WAEP;IAED;;OAEG;IACH,IAAI,gBAAgB;;MAEnB;IAED,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAuB;IAEvD;;OAEG;IACH,IAAa,UAAU;;MAItB;IAED;;OAEG;IACH,IAAa,MAAM;;;;MAMlB;IAED,OAAO,CAAC,OAAO;IAKf,OAAO,KAAK,YAAY,GAEvB;IAED,OAAO,KAAK,sBAAsB,GAEjC;IAED,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,KAAK,YAAY,GAEvB;gBAEW,IAAI,EAAE,IAAI;IAgBtB;;OAEG;IACM,UAAU;IAUnB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,wBAAwB;IAiChC;;OAEG;IACM,OAAO;IAKhB,OAAO,CAAC,MAAM,CAMb;IAED,OAAO,CAAC,IAAI;IAiBZ,OAAO,CAAC,IAAI;IAMZ,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,eAAe;IA8BvB,OAAO,CAAC,aAAa;IAmFrB,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,sBAAsB;IAgB9B,OAAO,CAAC,eAAe;IAUvB;;OAEG;IACM,MAAM;IAcf,OAAO,CAAC,MAAM;IAiBd,OAAO,CAAC,qBAAqB;IAc7B,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,kBAAkB;CAU3B"}
@@ -170,6 +170,7 @@ export class NerdStats extends UICorePlugin {
170
170
  this.refreshSpeedTest();
171
171
  initSpeedTest(this.speedtestMetrics)
172
172
  .then(() => {
173
+ trace(`${T} show initSpeedTest ready`);
173
174
  startSpeedtest();
174
175
  })
175
176
  .catch((e) => {
@@ -355,6 +356,7 @@ export class NerdStats extends UICorePlugin {
355
356
  });
356
357
  }
357
358
  clearSpeedtestMetrics() {
359
+ trace(`${T} clearSpeedtestMetrics`);
358
360
  const clapprStats = this.container?.getPlugin('clappr_stats');
359
361
  this.speedtestMetrics.connectionSpeed = 0;
360
362
  this.speedtestMetrics.ping = 0;
@@ -371,9 +373,9 @@ export class NerdStats extends UICorePlugin {
371
373
  clearSpeedTestResults();
372
374
  drawSpeedTestResults();
373
375
  }, 200);
374
- setTimeout(() => {
375
- startSpeedtest();
376
- }, 800);
376
+ // setTimeout(() => {
377
+ // startSpeedtest()
378
+ // }, 800)
377
379
  }
378
380
  formatPlaybackName(playbackType) {
379
381
  switch (playbackType) {
@@ -1 +1 @@
1
- {"version":3,"file":"Speedtest.d.ts","sourceRoot":"","sources":["../../../../src/plugins/clappr-nerd-stats/speedtest/Speedtest.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,MAAM,GAAG;IACnB,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAID,KAAK,UAAU,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;AAE5C,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACrC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAA;IACzB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,CAAC,GAAG,CAAC,CAAA;IACjB,UAAU,EAAE,CAAC,GAAG,CAAC,CAAA;IACjB,YAAY,EAAE,CAAC,GAAG,CAAC,CAAA;IACnB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CACtB,CAAA;AAED,KAAK,aAAa,GAAG,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAA;AAEnD,KAAK,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAA;AAIrD,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAsB;IAEpC,OAAO,CAAC,SAAS,CAAsB;IAEvC,OAAO,CAAC,mBAAmB,CAAQ;IAEnC,OAAO,CAAC,eAAe,CAAsB;IAE7C,OAAO,CAAC,WAAW,CAAe;IAElC,OAAO,CAAC,SAAS,CAAU;IAE3B,OAAO,CAAC,MAAM,CAAI;IAElB,OAAO,CAAC,OAAO,CAAuB;IAEtC,OAAO,CAAC,SAAS,CAA8B;IAE/C,OAAO,CAAC,cAAc,CAAK;IAE3B,KAAK,EAAE,UAAU,GAAG,IAAI,CAAO;IAE/B,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAO;IAErC,QAAQ;IAIR,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;IAY9C,sBAAsB,CAAC,MAAM,EAAE,MAAM;IAiCrC,YAAY,CAAC,MAAM,EAAE,MAAM;IAY3B,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE;IAM5B,iBAAiB;IAQjB,iBAAiB,CAAC,MAAM,EAAE,MAAM;IAShC,YAAY,CAAC,MAAM,EAAE,cAAc;IA0KnC,KAAK;IAsEL,KAAK;IASL,OAAO,CAAC,UAAU;CAUnB"}
1
+ {"version":3,"file":"Speedtest.d.ts","sourceRoot":"","sources":["../../../../src/plugins/clappr-nerd-stats/speedtest/Speedtest.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,MAAM,GAAG;IACnB,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAID,KAAK,UAAU,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;AAE5C,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACrC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAA;IACzB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,CAAC,GAAG,CAAC,CAAA;IACjB,UAAU,EAAE,CAAC,GAAG,CAAC,CAAA;IACjB,YAAY,EAAE,CAAC,GAAG,CAAC,CAAA;IACnB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CACtB,CAAA;AAED,KAAK,aAAa,GAAG,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAA;AAEnD,KAAK,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAA;AAIrD,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAsB;IAEpC,OAAO,CAAC,SAAS,CAAsB;IAEvC,OAAO,CAAC,mBAAmB,CAAQ;IAEnC,OAAO,CAAC,eAAe,CAAsB;IAE7C,OAAO,CAAC,WAAW,CAAe;IAElC,OAAO,CAAC,SAAS,CAAU;IAE3B,OAAO,CAAC,MAAM,CAAI;IAElB,OAAO,CAAC,OAAO,CAAuB;IAEtC,OAAO,CAAC,SAAS,CAA8B;IAE/C,OAAO,CAAC,cAAc,CAAK;IAE3B,KAAK,EAAE,UAAU,GAAG,IAAI,CAAO;IAE/B,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAO;IAErC,QAAQ;IAIR,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;IAY9C,sBAAsB,CAAC,MAAM,EAAE,MAAM;IAiCrC,YAAY,CAAC,MAAM,EAAE,MAAM;IAY3B,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE;IAM5B,iBAAiB;IAQjB,iBAAiB,CAAC,MAAM,EAAE,MAAM;IAShC,YAAY,CAAC,MAAM,EAAE,cAAc;IA0KnC,KAAK;IAuEL,KAAK;IASL,OAAO,CAAC,UAAU;CAUnB"}
@@ -1,6 +1,6 @@
1
- import { reportError } from '@gcorevideo/utils';
1
+ import { reportError, trace } from '@gcorevideo/utils';
2
2
  import SpeedtestWorkerModule from '../../../../assets/clappr-nerd-stats/speedtest/speedtest.worker.js';
3
- // const T = 'plugins.clappr_nerd_stats.speedtest.Speedtest';
3
+ const T = 'plugins.clappr_nerd_stats.speedtest.Speedtest';
4
4
  export class Speedtest {
5
5
  worker = null;
6
6
  workerUrl = null;
@@ -255,9 +255,7 @@ export class Speedtest {
255
255
  if (e.data === this._prevData) {
256
256
  return;
257
257
  }
258
- else {
259
- this._prevData = e.data;
260
- }
258
+ this._prevData = e.data;
261
259
  const data = e.data;
262
260
  try {
263
261
  if (this.onupdate) {
@@ -313,6 +311,8 @@ export class Speedtest {
313
311
  }
314
312
  }
315
313
  this._state = 3;
314
+ trace(`${T} start`, { state: this._state, server: this._selectedServer, settings: this._settings });
315
+ // TODO don't run until properly initialized (url_ping, etc)
316
316
  this.worker.postMessage('start ' + JSON.stringify(this._settings));
317
317
  // ... [rest of the logic remains unchanged] ...
318
318
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/plugins/clappr-nerd-stats/speedtest/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAkC,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAqC9C,wBAAgB,oBAAoB,SAmBnC;AAID,eAAO,MAAM,aAAa,kBAAmB,gBAAgB,KAAG,OAAO,CAAC,IAAI,CA+E3E,CAAC;AAEF,eAAO,MAAM,aAAa,YAIzB,CAAC;AAEF,eAAO,MAAM,cAAc,YAI1B,CAAC;AAEF,eAAO,MAAM,qBAAqB,YAEjC,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,QAGnD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/plugins/clappr-nerd-stats/speedtest/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,MAAM,EAAkC,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAqC9C,wBAAgB,oBAAoB,SAoBnC;AAID,eAAO,MAAM,aAAa,kBAAmB,gBAAgB,KAAG,OAAO,CAAC,IAAI,CAmF3E,CAAC;AAEF,eAAO,MAAM,aAAa,YAIzB,CAAC;AAEF,eAAO,MAAM,cAAc,YAK1B,CAAC;AAEF,eAAO,MAAM,qBAAqB,YAGjC,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,QAGnD"}
@@ -1,8 +1,9 @@
1
+ import { trace } from '@gcorevideo/utils';
1
2
  import { Speedtest } from './Speedtest.js';
2
3
  const DIGITS_THRESHOLD = 99999;
3
4
  const DEFAULT_DOWNLOAD_SPEED = '0.00';
4
5
  const DRAW_SIZE = 5;
5
- // const T = 'plugins.clappr_nerd_stats.speedtest';
6
+ const T = 'plugins.clappr_nerd_stats.speedtest';
6
7
  function limitDigits(value) {
7
8
  return value > DIGITS_THRESHOLD ? '> ' + DIGITS_THRESHOLD : value.toFixed(2);
8
9
  }
@@ -30,6 +31,7 @@ const getColor = (speedValue) => {
30
31
  }
31
32
  };
32
33
  export function drawSpeedTestResults() {
34
+ trace(`${T} drawSpeedTestResults`);
33
35
  const canvas = document.getElementById('nerd-stats-speed-test-canvas');
34
36
  if (!canvas) {
35
37
  return;
@@ -52,6 +54,7 @@ export const initSpeedTest = (customMetrics) => {
52
54
  return inited;
53
55
  }
54
56
  inited = (async () => {
57
+ trace(`${T} initSpeedTest run`);
55
58
  // TODO: fix server selection
56
59
  // const response = await fetch('https://iam.gcdn.co/info/json');
57
60
  // const data = await response.json();
@@ -106,6 +109,7 @@ export const initSpeedTest = (customMetrics) => {
106
109
  await fetch('https://iam.gcdn.co/info/json')
107
110
  .then(r => r.json())
108
111
  .then(data => {
112
+ trace(`${T} initSpeedTest fetched`);
109
113
  const country = data['Server Country code'].toLowerCase();
110
114
  const server = serversList.find(s => s.country === country) || serversList[0];
111
115
  if (!server) {
@@ -113,6 +117,7 @@ export const initSpeedTest = (customMetrics) => {
113
117
  }
114
118
  speedTest.addTestPoint(server);
115
119
  speedTest.setSelectedServer(server);
120
+ trace(`${T} initSpeedTest done`);
116
121
  });
117
122
  })();
118
123
  return inited;
@@ -123,11 +128,13 @@ export const stopSpeedtest = () => {
123
128
  }
124
129
  };
125
130
  export const startSpeedtest = () => {
131
+ trace(`${T} startSpeedtest`);
126
132
  if (speedTest.getState() !== 3) {
127
133
  speedTest.start();
128
134
  }
129
135
  };
130
136
  export const clearSpeedTestResults = () => {
137
+ trace(`${T} clearSpeedTestResults`);
131
138
  speedtestResults.splice(0, speedtestResults.length);
132
139
  };
133
140
  export function configureSpeedTest(servers) {
@@ -9,15 +9,13 @@ export declare class SeekTime extends UICorePlugin {
9
9
  get supportedVersion(): {
10
10
  min: string;
11
11
  };
12
- get template(): any;
12
+ private static readonly template;
13
13
  get attributes(): {
14
14
  class: string;
15
15
  'data-seek-time': string;
16
16
  };
17
- get mediaControl(): any;
18
- get mediaControlContainer(): any;
19
- get isLiveStreamWithDvr(): any;
20
- get durationShown(): boolean;
17
+ private get isLiveStreamWithDvr();
18
+ private get durationShown();
21
19
  private hoveringOverSeekBar;
22
20
  private hoverPosition;
23
21
  private displayedDuration;
@@ -26,17 +24,23 @@ export declare class SeekTime extends UICorePlugin {
26
24
  private rendered;
27
25
  private $durationEl;
28
26
  private $seekTimeEl;
27
+ /**
28
+ * @internal
29
+ */
29
30
  bindEvents(): void;
31
+ private onCoreReady;
30
32
  private onContainerChanged;
31
33
  private onTimeUpdate;
32
34
  private showTime;
33
35
  private hideTime;
34
36
  private calculateHoverPosition;
35
- getSeekTime(): {
36
- seekTime: number;
37
- };
38
- update(): void;
39
- shouldBeVisible(): any;
37
+ private getSeekTime;
38
+ private update;
39
+ private shouldBeVisible;
40
+ /**
41
+ * @internal
42
+ */
40
43
  render(): this;
44
+ private mount;
41
45
  }
42
46
  //# sourceMappingURL=SeekTime.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SeekTime.d.ts","sourceRoot":"","sources":["../../../src/plugins/seek-time/SeekTime.ts"],"names":[],"mappings":"AAIA,OAAO,EAAoB,YAAY,EAAmB,MAAM,cAAc,CAAC;AAM/E,OAAO,0CAA0C,CAAC;AAKlD;;;GAGG;AACH,qBAAa,QAAS,SAAQ,YAAY;IACxC,IAAI,IAAI,WAEP;IAED,IAAI,gBAAgB;;MAEnB;IAED,IAAI,QAAQ,QAEX;IAED,IAAa,UAAU;;;MAKtB;IAED,IAAI,YAAY,QAEf;IAED,IAAI,qBAAqB,QAExB;IAED,IAAI,mBAAmB,QAItB;IAED,IAAI,aAAa,YAEhB;IAED,OAAO,CAAC,mBAAmB,CAAS;IAEpC,OAAO,CAAC,aAAa,CAAK;IAE1B,OAAO,CAAC,iBAAiB,CAAuB;IAEhD,OAAO,CAAC,iBAAiB,CAAsB;IAE/C,OAAO,CAAC,QAAQ,CAAK;IAGrB,OAAO,CAAC,QAAQ,CAAS;IAEzB,OAAO,CAAC,WAAW,CAA4B;IAE/C,OAAO,CAAC,WAAW,CAA4B;IAEtC,UAAU;IAWnB,OAAO,CAAC,kBAAkB;IAM1B,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,QAAQ;IAMhB,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,sBAAsB;IAO9B,WAAW;;;IAYX,MAAM;IA8CN,eAAe;IAQN,MAAM;CAahB"}
1
+ {"version":3,"file":"SeekTime.d.ts","sourceRoot":"","sources":["../../../src/plugins/seek-time/SeekTime.ts"],"names":[],"mappings":"AAIA,OAAO,EAAoB,YAAY,EAAmB,MAAM,cAAc,CAAA;AAM9E,OAAO,0CAA0C,CAAA;AAMjD;;;GAGG;AACH,qBAAa,QAAS,SAAQ,YAAY;IACxC,IAAI,IAAI,WAEP;IAED,IAAI,gBAAgB;;MAEnB;IAED,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAyB;IAEzD,IAAa,UAAU;;;MAKtB;IAED,OAAO,KAAK,mBAAmB,GAM9B;IAED,OAAO,KAAK,aAAa,GAExB;IAED,OAAO,CAAC,mBAAmB,CAAQ;IAEnC,OAAO,CAAC,aAAa,CAAI;IAEzB,OAAO,CAAC,iBAAiB,CAAsB;IAE/C,OAAO,CAAC,iBAAiB,CAAsB;IAE/C,OAAO,CAAC,QAAQ,CAAI;IAGpB,OAAO,CAAC,QAAQ,CAAQ;IAExB,OAAO,CAAC,WAAW,CAA2B;IAE9C,OAAO,CAAC,WAAW,CAA2B;IAE9C;;OAEG;IACM,UAAU;IAInB,OAAO,CAAC,WAAW;IAoCnB,OAAO,CAAC,kBAAkB;IAa1B,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,QAAQ;IAMhB,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,sBAAsB;IAW9B,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,MAAM;IAgDd,OAAO,CAAC,eAAe;IAUvB;;OAEG;IACM,MAAM;IAcf,OAAO,CAAC,KAAK;CAGd"}
@@ -5,6 +5,7 @@ import { Events, Playback, UICorePlugin, Utils, template } from '@clappr/core';
5
5
  import { CLAPPR_VERSION } from '../../build.js';
6
6
  import seekTimeHTML from '../../../assets/seek-time/seek-time.html';
7
7
  import '../../../assets/seek-time/seek-time.scss';
8
+ import assert from 'assert';
8
9
  const { formatTime } = Utils;
9
10
  /**
10
11
  * `PLUGIN` that adds a seek time indicator to the media control UI.
@@ -17,25 +18,17 @@ export class SeekTime extends UICorePlugin {
17
18
  get supportedVersion() {
18
19
  return { min: CLAPPR_VERSION };
19
20
  }
20
- get template() {
21
- return template(seekTimeHTML);
22
- }
21
+ static template = template(seekTimeHTML);
23
22
  get attributes() {
24
23
  return {
25
- 'class': 'seek-time',
26
- 'data-seek-time': ''
24
+ class: 'seek-time',
25
+ 'data-seek-time': '',
27
26
  };
28
27
  }
29
- get mediaControl() {
30
- return this.core.mediaControl;
31
- }
32
- get mediaControlContainer() {
33
- return this.mediaControl.container;
34
- }
35
28
  get isLiveStreamWithDvr() {
36
- return this.mediaControlContainer &&
37
- this.mediaControlContainer.getPlaybackType() === Playback.LIVE &&
38
- this.mediaControlContainer.isDvrEnabled();
29
+ return (this.core.activeContainer &&
30
+ this.core.activeContainer.getPlaybackType() === Playback.LIVE &&
31
+ this.core.activeContainer.isDvrEnabled());
39
32
  }
40
33
  get durationShown() {
41
34
  return !this.isLiveStreamWithDvr;
@@ -49,20 +42,27 @@ export class SeekTime extends UICorePlugin {
49
42
  rendered = false;
50
43
  $durationEl = null;
51
44
  $seekTimeEl = null;
45
+ /**
46
+ * @internal
47
+ */
52
48
  bindEvents() {
53
- this.listenTo(this.mediaControl, Events.MEDIACONTROL_RENDERED, this.render);
54
- this.listenTo(this.mediaControl, Events.MEDIACONTROL_MOUSEMOVE_SEEKBAR, this.showTime);
55
- this.listenTo(this.mediaControl, Events.MEDIACONTROL_MOUSELEAVE_SEEKBAR, this.hideTime);
56
- this.listenTo(this.mediaControl, Events.MEDIACONTROL_CONTAINERCHANGED, this.onContainerChanged);
57
- if (this.mediaControlContainer) {
58
- this.listenTo(this.mediaControlContainer, Events.CONTAINER_PLAYBACKDVRSTATECHANGED, this.update);
59
- this.listenTo(this.mediaControlContainer, Events.CONTAINER_TIMEUPDATE, this.onTimeUpdate);
49
+ this.listenTo(this.core, Events.CORE_READY, this.onCoreReady);
50
+ }
51
+ onCoreReady() {
52
+ const mediaControl = this.core.getPlugin('media_control');
53
+ assert(mediaControl, 'MediaControl plugin is required for SeekTime plugin to work');
54
+ this.listenTo(mediaControl, Events.MEDIACONTROL_RENDERED, this.mount);
55
+ this.listenTo(mediaControl, Events.MEDIACONTROL_MOUSEMOVE_SEEKBAR, this.showTime);
56
+ this.listenTo(mediaControl, Events.MEDIACONTROL_MOUSELEAVE_SEEKBAR, this.hideTime);
57
+ this.listenTo(mediaControl, Events.MEDIACONTROL_CONTAINERCHANGED, this.onContainerChanged);
58
+ if (this.core.activeContainer) {
59
+ this.listenTo(this.core.activeContainer, Events.CONTAINER_PLAYBACKDVRSTATECHANGED, this.update);
60
+ this.listenTo(this.core.activeContainer, Events.CONTAINER_TIMEUPDATE, this.onTimeUpdate);
60
61
  }
61
62
  }
62
63
  onContainerChanged() {
63
- // @ts-ignore
64
- this.stopListening();
65
- this.bindEvents();
64
+ this.listenTo(this.core.activeContainer, Events.CONTAINER_PLAYBACKDVRSTATECHANGED, this.update);
65
+ this.listenTo(this.core.activeContainer, Events.CONTAINER_TIMEUPDATE, this.onTimeUpdate);
66
66
  }
67
67
  onTimeUpdate({ total }) {
68
68
  this.duration = total;
@@ -78,18 +78,15 @@ export class SeekTime extends UICorePlugin {
78
78
  this.update();
79
79
  }
80
80
  calculateHoverPosition(event) {
81
- const offset = event.pageX - this.mediaControl.$seekBarContainer.offset().left;
81
+ const mediaControl = this.core.getPlugin('media_control');
82
+ const offset = event.pageX - mediaControl.$seekBarContainer.offset().left;
82
83
  // proportion into the seek bar that the mouse is hovered over 0-1
83
- this.hoverPosition = Math.min(1, Math.max(offset / this.mediaControl.$seekBarContainer.width(), 0));
84
+ this.hoverPosition = Math.min(1, Math.max(offset / mediaControl.$seekBarContainer.width(), 0));
84
85
  }
85
86
  getSeekTime() {
86
- let seekTime;
87
- if (this.isLiveStreamWithDvr) {
88
- seekTime = this.duration - this.hoverPosition * this.duration;
89
- }
90
- else {
91
- seekTime = this.hoverPosition * this.duration;
92
- }
87
+ const seekTime = this.isLiveStreamWithDvr
88
+ ? this.duration - this.hoverPosition * this.duration
89
+ : this.hoverPosition * this.duration;
93
90
  return { seekTime };
94
91
  }
95
92
  update() {
@@ -100,57 +97,63 @@ export class SeekTime extends UICorePlugin {
100
97
  if (!this.shouldBeVisible()) {
101
98
  this.$el.hide();
102
99
  this.$el.css('left', '-100%');
100
+ return;
103
101
  }
104
- else {
105
- const seekTime = this.getSeekTime();
106
- let currentSeekTime = formatTime(seekTime.seekTime, false);
107
- if (this.isLiveStreamWithDvr) {
108
- currentSeekTime = `-${currentSeekTime}`;
109
- }
110
- // only update dom if necessary, ie time actually changed
111
- if (currentSeekTime !== this.displayedSeekTime) {
112
- this.$seekTimeEl.text(currentSeekTime);
113
- this.displayedSeekTime = currentSeekTime;
114
- }
115
- if (this.durationShown) {
116
- this.$durationEl.show();
117
- const currentDuration = formatTime(this.duration, false);
118
- if (currentDuration !== this.displayedDuration) {
119
- this.$durationEl.text(currentDuration);
120
- this.displayedDuration = currentDuration;
121
- }
122
- }
123
- else {
124
- this.$durationEl.hide();
102
+ const seekTime = this.getSeekTime();
103
+ let currentSeekTime = formatTime(seekTime.seekTime, false);
104
+ if (this.isLiveStreamWithDvr) {
105
+ currentSeekTime = `-${currentSeekTime}`;
106
+ }
107
+ // only update dom if necessary, ie time actually changed
108
+ if (currentSeekTime !== this.displayedSeekTime) {
109
+ this.$seekTimeEl.text(currentSeekTime);
110
+ this.displayedSeekTime = currentSeekTime;
111
+ }
112
+ if (this.durationShown) {
113
+ this.$durationEl.show();
114
+ const currentDuration = formatTime(this.duration, false);
115
+ if (currentDuration !== this.displayedDuration) {
116
+ this.$durationEl.text(currentDuration);
117
+ this.displayedDuration = currentDuration;
125
118
  }
126
- // the element must be unhidden before its width is requested, otherwise it's width will be reported as 0
127
- this.$el.show();
128
- const containerWidth = this.mediaControl.$seekBarContainer.width();
129
- const elWidth = this.$el.width();
130
- let elLeftPos = this.hoverPosition * containerWidth;
131
- elLeftPos -= elWidth / 2;
132
- elLeftPos = Math.max(0, Math.min(elLeftPos, containerWidth - elWidth));
133
- this.$el.css('left', elLeftPos);
134
119
  }
120
+ else {
121
+ this.$durationEl.hide();
122
+ }
123
+ // the element must be unhidden before its width is requested, otherwise it's width will be reported as 0
124
+ this.$el.show();
125
+ const mediaControl = this.core.getPlugin('media_control');
126
+ const containerWidth = mediaControl.$seekBarContainer.width();
127
+ const elWidth = this.$el.width();
128
+ let elLeftPos = this.hoverPosition * containerWidth;
129
+ elLeftPos -= elWidth / 2;
130
+ elLeftPos = Math.max(0, Math.min(elLeftPos, containerWidth - elWidth));
131
+ this.$el.css('left', elLeftPos);
135
132
  }
136
133
  shouldBeVisible() {
137
- return this.mediaControlContainer &&
138
- this.mediaControlContainer.settings.seekEnabled &&
134
+ return (this.core.activeContainer &&
135
+ this.core.activeContainer.settings.seekEnabled &&
139
136
  this.hoveringOverSeekBar &&
140
137
  this.hoverPosition !== null &&
141
- this.duration !== null;
138
+ this.duration !== null);
142
139
  }
140
+ /**
141
+ * @internal
142
+ */
143
143
  render() {
144
144
  this.rendered = true;
145
145
  this.displayedDuration = null;
146
146
  this.displayedSeekTime = null;
147
- this.$el.html(this.template());
147
+ this.$el.html(SeekTime.template());
148
148
  this.$el.hide();
149
- this.mediaControl.$el.append(this.el);
150
- this.$seekTimeEl = this.$el.find('[data-seek-time]');
151
- this.$durationEl = this.$el.find('[data-duration]');
149
+ // this.mediaControl.$el.append(this.el);
150
+ this.$seekTimeEl = this.$el.find('#mc-seek-time');
151
+ this.$durationEl = this.$el.find('#mc-duration');
152
152
  this.$durationEl.hide();
153
153
  this.update();
154
154
  return this;
155
155
  }
156
+ mount() {
157
+ this.core.getPlugin('media_control').$el.append(this.$el); // TODO use a method
158
+ }
156
159
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gcorevideo/player",
3
- "version": "2.22.25",
3
+ "version": "2.22.27",
4
4
  "description": "Gcore JavaScript video player",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -248,6 +248,7 @@ export class NerdStats extends UICorePlugin {
248
248
  this.refreshSpeedTest()
249
249
  initSpeedTest(this.speedtestMetrics)
250
250
  .then(() => {
251
+ trace(`${T} show initSpeedTest ready`);
251
252
  startSpeedtest()
252
253
  })
253
254
  .catch((e) => {
@@ -466,6 +467,7 @@ export class NerdStats extends UICorePlugin {
466
467
  }
467
468
 
468
469
  private clearSpeedtestMetrics() {
470
+ trace(`${T} clearSpeedtestMetrics`);
469
471
  const clapprStats = this.container?.getPlugin('clappr_stats')
470
472
 
471
473
  this.speedtestMetrics.connectionSpeed = 0
@@ -485,9 +487,9 @@ export class NerdStats extends UICorePlugin {
485
487
  clearSpeedTestResults()
486
488
  drawSpeedTestResults()
487
489
  }, 200)
488
- setTimeout(() => {
489
- startSpeedtest()
490
- }, 800)
490
+ // setTimeout(() => {
491
+ // startSpeedtest()
492
+ // }, 800)
491
493
  }
492
494
 
493
495
  private formatPlaybackName(playbackType: PlaybackType): string {
@@ -1,4 +1,4 @@
1
- import { reportError } from '@gcorevideo/utils'
1
+ import { reportError, trace } from '@gcorevideo/utils'
2
2
 
3
3
  import SpeedtestWorkerModule from '../../../../assets/clappr-nerd-stats/speedtest/speedtest.worker.js'
4
4
 
@@ -38,7 +38,7 @@ type UpdateHandler = (data: TestStatusInfo) => void
38
38
 
39
39
  type SelectCallback = (server: Server | null) => void
40
40
 
41
- // const T = 'plugins.clappr_nerd_stats.speedtest.Speedtest';
41
+ const T = 'plugins.clappr_nerd_stats.speedtest.Speedtest';
42
42
 
43
43
  export class Speedtest {
44
44
  private worker: Worker | null = null
@@ -328,9 +328,8 @@ export class Speedtest {
328
328
  this.worker.onmessage = (e: MessageEvent) => {
329
329
  if (e.data === this._prevData) {
330
330
  return
331
- } else {
332
- this._prevData = e.data
333
331
  }
332
+ this._prevData = e.data
334
333
  const data = e.data
335
334
 
336
335
  try {
@@ -384,6 +383,8 @@ export class Speedtest {
384
383
  }
385
384
  }
386
385
  this._state = 3
386
+ trace(`${T} start`, { state: this._state, server: this._selectedServer, settings: this._settings })
387
+ // TODO don't run until properly initialized (url_ping, etc)
387
388
  this.worker.postMessage('start ' + JSON.stringify(this._settings))
388
389
 
389
390
  // ... [rest of the logic remains unchanged] ...
@@ -1,3 +1,4 @@
1
+ import { trace } from '@gcorevideo/utils';
1
2
  import { type Server, type TestStatusInfo, Speedtest } from './Speedtest.js';
2
3
  import { SpeedtestMetrics } from './types.js';
3
4
 
@@ -6,7 +7,7 @@ const DEFAULT_DOWNLOAD_SPEED = '0.00';
6
7
 
7
8
  const DRAW_SIZE = 5;
8
9
 
9
- // const T = 'plugins.clappr_nerd_stats.speedtest';
10
+ const T = 'plugins.clappr_nerd_stats.speedtest';
10
11
 
11
12
  function limitDigits(value: number): string {
12
13
  return value > DIGITS_THRESHOLD ? '> ' + DIGITS_THRESHOLD : value.toFixed(2);
@@ -37,6 +38,7 @@ const getColor = (speedValue: number): string => {
37
38
  };
38
39
 
39
40
  export function drawSpeedTestResults() {
41
+ trace(`${T} drawSpeedTestResults`);
40
42
  const canvas = document.getElementById('nerd-stats-speed-test-canvas');
41
43
  if (!canvas) {
42
44
  return;
@@ -64,6 +66,7 @@ export const initSpeedTest = (customMetrics: SpeedtestMetrics): Promise<void> =>
64
66
  return inited;
65
67
  }
66
68
  inited = (async () => {
69
+ trace(`${T} initSpeedTest run`);
67
70
  // TODO: fix server selection
68
71
  // const response = await fetch('https://iam.gcdn.co/info/json');
69
72
  // const data = await response.json();
@@ -127,6 +130,8 @@ export const initSpeedTest = (customMetrics: SpeedtestMetrics): Promise<void> =>
127
130
  await fetch('https://iam.gcdn.co/info/json')
128
131
  .then(r => r.json())
129
132
  .then(data => {
133
+ trace(`${T} initSpeedTest fetched`);
134
+
130
135
  const country = data['Server Country code'].toLowerCase();
131
136
  const server = serversList.find(s => s.country === country) || serversList[0];
132
137
  if (!server) {
@@ -134,6 +139,7 @@ export const initSpeedTest = (customMetrics: SpeedtestMetrics): Promise<void> =>
134
139
  }
135
140
  speedTest.addTestPoint(server);
136
141
  speedTest.setSelectedServer(server);
142
+ trace(`${T} initSpeedTest done`);
137
143
  });
138
144
  })();
139
145
 
@@ -147,12 +153,14 @@ export const stopSpeedtest = () => {
147
153
  };
148
154
 
149
155
  export const startSpeedtest = () => {
156
+ trace(`${T} startSpeedtest`);
150
157
  if (speedTest.getState() !== 3) {
151
158
  speedTest.start();
152
159
  }
153
160
  };
154
161
 
155
162
  export const clearSpeedTestResults = () => {
163
+ trace(`${T} clearSpeedTestResults`);
156
164
  speedtestResults.splice(0, speedtestResults.length);
157
165
  };
158
166