stormcloud-video-player 0.7.26 → 0.7.28

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.
@@ -441,42 +441,126 @@ function TextOverlay(param) {
441
441
  children: text
442
442
  });
443
443
  }
444
+ function parseRSSXml(xmlText, maxItems) {
445
+ var parser = new DOMParser();
446
+ var doc = parser.parseFromString(xmlText, "text/xml");
447
+ if (doc.querySelector("parsererror")) throw new Error("Invalid RSS XML");
448
+ return Array.from(doc.querySelectorAll("item")).map(function(item) {
449
+ var _item_querySelector, _item_querySelector1, _item_querySelector2, _item_querySelector3, _item_querySelector4;
450
+ return {
451
+ title: (((_item_querySelector = item.querySelector("title")) === null || _item_querySelector === void 0 ? void 0 : _item_querySelector.textContent) || "").replace(/<[^>]*>/g, "").trim(),
452
+ description: (((_item_querySelector1 = item.querySelector("description")) === null || _item_querySelector1 === void 0 ? void 0 : _item_querySelector1.textContent) || "").replace(/<[^>]*>/g, "").trim(),
453
+ pubDate: ((_item_querySelector2 = item.querySelector("pubDate")) === null || _item_querySelector2 === void 0 ? void 0 : _item_querySelector2.textContent) || "",
454
+ author: ((_item_querySelector3 = item.querySelector("author, dc\\:creator")) === null || _item_querySelector3 === void 0 ? void 0 : _item_querySelector3.textContent) || "",
455
+ category: ((_item_querySelector4 = item.querySelector("category")) === null || _item_querySelector4 === void 0 ? void 0 : _item_querySelector4.textContent) || ""
456
+ };
457
+ }).filter(function(i) {
458
+ return i.title;
459
+ }).slice(0, maxItems);
460
+ }
444
461
  function fetchRSSItems(rssUrl, maxItems) {
445
462
  return _async_to_generator(function() {
446
- var resp, data, parser, doc;
463
+ var encoded, resp2, data, unused, resp21, text2, unused1, resp, text;
447
464
  return _ts_generator(this, function(_state) {
448
465
  switch(_state.label){
449
466
  case 0:
467
+ encoded = encodeURIComponent(rssUrl);
468
+ _state.label = 1;
469
+ case 1:
470
+ _state.trys.push([
471
+ 1,
472
+ 5,
473
+ ,
474
+ 6
475
+ ]);
450
476
  return [
451
477
  4,
452
- fetch("https://api.allorigins.win/get?url=".concat(encodeURIComponent(rssUrl)))
478
+ fetch("https://api.allorigins.win/get?url=".concat(encoded))
479
+ ];
480
+ case 2:
481
+ resp2 = _state.sent();
482
+ if (!resp2.ok) return [
483
+ 3,
484
+ 4
453
485
  ];
454
- case 1:
455
- resp = _state.sent();
456
486
  return [
457
487
  4,
458
- resp.json()
488
+ resp2.json()
459
489
  ];
460
- case 2:
490
+ case 3:
461
491
  data = _state.sent();
462
- if (!data.contents) throw new Error("No content from RSS feed");
463
- parser = new DOMParser();
464
- doc = parser.parseFromString(data.contents, "text/xml");
465
- if (doc.querySelector("parsererror")) throw new Error("Invalid RSS XML");
492
+ if (data.contents) return [
493
+ 2,
494
+ parseRSSXml(data.contents, maxItems)
495
+ ];
496
+ _state.label = 4;
497
+ case 4:
498
+ return [
499
+ 3,
500
+ 6
501
+ ];
502
+ case 5:
503
+ unused = _state.sent();
504
+ return [
505
+ 3,
506
+ 6
507
+ ];
508
+ case 6:
509
+ _state.trys.push([
510
+ 6,
511
+ 10,
512
+ ,
513
+ 11
514
+ ]);
515
+ return [
516
+ 4,
517
+ fetch("https://corsproxy.io/?url=".concat(encoded))
518
+ ];
519
+ case 7:
520
+ resp21 = _state.sent();
521
+ if (!resp21.ok) return [
522
+ 3,
523
+ 9
524
+ ];
525
+ return [
526
+ 4,
527
+ resp21.text()
528
+ ];
529
+ case 8:
530
+ text2 = _state.sent();
531
+ if (text2) return [
532
+ 2,
533
+ parseRSSXml(text2, maxItems)
534
+ ];
535
+ _state.label = 9;
536
+ case 9:
537
+ return [
538
+ 3,
539
+ 11
540
+ ];
541
+ case 10:
542
+ unused1 = _state.sent();
543
+ return [
544
+ 3,
545
+ 11
546
+ ];
547
+ case 11:
548
+ return [
549
+ 4,
550
+ fetch("https://thingproxy.freeboard.io/fetch/".concat(rssUrl))
551
+ ];
552
+ case 12:
553
+ resp = _state.sent();
554
+ if (!resp.ok) throw new Error("RSS fetch failed: ".concat(resp.status));
555
+ return [
556
+ 4,
557
+ resp.text()
558
+ ];
559
+ case 13:
560
+ text = _state.sent();
466
561
  return [
467
562
  2,
468
- Array.from(doc.querySelectorAll("item")).map(function(item) {
469
- var _item_querySelector, _item_querySelector1, _item_querySelector2, _item_querySelector3, _item_querySelector4;
470
- return {
471
- title: (((_item_querySelector = item.querySelector("title")) === null || _item_querySelector === void 0 ? void 0 : _item_querySelector.textContent) || "").replace(/<[^>]*>/g, "").trim(),
472
- description: (((_item_querySelector1 = item.querySelector("description")) === null || _item_querySelector1 === void 0 ? void 0 : _item_querySelector1.textContent) || "").replace(/<[^>]*>/g, "").trim(),
473
- pubDate: ((_item_querySelector2 = item.querySelector("pubDate")) === null || _item_querySelector2 === void 0 ? void 0 : _item_querySelector2.textContent) || "",
474
- author: ((_item_querySelector3 = item.querySelector("author, dc\\:creator")) === null || _item_querySelector3 === void 0 ? void 0 : _item_querySelector3.textContent) || "",
475
- category: ((_item_querySelector4 = item.querySelector("category")) === null || _item_querySelector4 === void 0 ? void 0 : _item_querySelector4.textContent) || ""
476
- };
477
- }).filter(function(i) {
478
- return i.title;
479
- }).slice(0, maxItems)
563
+ parseRSSXml(text, maxItems)
480
564
  ];
481
565
  }
482
566
  });
@@ -488,18 +572,28 @@ function ScrollerOverlay(param) {
488
572
  var cfg = overlay.scroller_config;
489
573
  var uid = (0, import_react.useId)().replace(/:/g, "");
490
574
  var _ref13 = _sliced_to_array((0, import_react.useState)([]), 2), rssItems = _ref13[0], setRssItems = _ref13[1];
491
- var _ref14 = _sliced_to_array((0, import_react.useState)(false), 2), rssLoading = _ref14[0], setRssLoading = _ref14[1];
575
+ var _ref14 = _sliced_to_array((0, import_react.useState)(true), 2), rssLoading = _ref14[0], setRssLoading = _ref14[1];
576
+ var _ref15 = _sliced_to_array((0, import_react.useState)(false), 2), rssError = _ref15[0], setRssError = _ref15[1];
492
577
  var rssUrl = (cfg === null || cfg === void 0 ? void 0 : cfg.rss_url) || "";
493
578
  var maxItems = (_ref = cfg === null || cfg === void 0 ? void 0 : cfg.max_items) !== null && _ref !== void 0 ? _ref : 10;
494
579
  var autoRefresh = (cfg === null || cfg === void 0 ? void 0 : cfg.auto_refresh) !== false;
495
580
  var updateInterval = (_ref1 = cfg === null || cfg === void 0 ? void 0 : cfg.update_interval) !== null && _ref1 !== void 0 ? _ref1 : 5;
496
581
  (0, import_react.useEffect)(function() {
497
- if (!rssUrl || (cfg === null || cfg === void 0 ? void 0 : cfg.use_custom_text) && (cfg === null || cfg === void 0 ? void 0 : cfg.custom_text)) return;
582
+ if (!rssUrl || (cfg === null || cfg === void 0 ? void 0 : cfg.use_custom_text) && (cfg === null || cfg === void 0 ? void 0 : cfg.custom_text)) {
583
+ setRssLoading(false);
584
+ return;
585
+ }
498
586
  var cancelled = false;
499
587
  setRssLoading(true);
588
+ setRssError(false);
500
589
  fetchRSSItems(rssUrl, maxItems).then(function(items) {
501
- if (!cancelled) setRssItems(items);
502
- }).catch(function() {}).finally(function() {
590
+ if (!cancelled) {
591
+ setRssItems(items);
592
+ setRssError(false);
593
+ }
594
+ }).catch(function() {
595
+ if (!cancelled) setRssError(true);
596
+ }).finally(function() {
503
597
  if (!cancelled) setRssLoading(false);
504
598
  });
505
599
  return function() {
@@ -514,7 +608,10 @@ function ScrollerOverlay(param) {
514
608
  (0, import_react.useEffect)(function() {
515
609
  if (!rssUrl || !autoRefresh || (cfg === null || cfg === void 0 ? void 0 : cfg.use_custom_text) && (cfg === null || cfg === void 0 ? void 0 : cfg.custom_text)) return;
516
610
  var interval = setInterval(function() {
517
- fetchRSSItems(rssUrl, maxItems).then(setRssItems).catch(function() {});
611
+ fetchRSSItems(rssUrl, maxItems).then(function(items) {
612
+ setRssItems(items);
613
+ setRssError(false);
614
+ }).catch(function() {});
518
615
  }, updateInterval * 60 * 1e3);
519
616
  return function() {
520
617
  return clearInterval(interval);
@@ -551,13 +648,19 @@ function ScrollerOverlay(param) {
551
648
  segments = [
552
649
  "Loading feed\u2026"
553
650
  ];
651
+ } else if (rssError) {
652
+ segments = overlay.content ? [
653
+ overlay.content
654
+ ] : [
655
+ "RSS feed unavailable"
656
+ ];
554
657
  } else if (overlay.content) {
555
658
  segments = [
556
659
  overlay.content
557
660
  ];
558
661
  } else {
559
662
  segments = rssUrl ? [
560
- "Fetching RSS feed\u2026"
663
+ "Loading feed\u2026"
561
664
  ] : [
562
665
  "RSS Ticker"
563
666
  ];