src/widgets/PlaceholderPlayer.js
author ymh <ymh.work@gmail.com>
Tue, 22 Oct 2024 07:03:54 +0200
changeset 1076 510fd2a482f4
parent 1072 ac1eacb3aa33
permissions -rw-r--r--
Add Dailymotion Tech and remove unused libs

/* This is a fake player, for when no video is available */
import placeholderPlayerStyles from "./PlaceholderPlayer.module.css";

const PlaceholderPlayer = function (ns) {
  return class extends ns.Widgets.Widget {
    constructor(player, config) {
      super(player, config);
    }

    static defaults = {
      autostart: false,
    };

    static template = '<div class="Ldt-PlaceholderPlayer">(loading)</div>';

    draw() {
      this.renderTemplate();

      var paused = true,
        timeDelta = 0,
        currentTime = new ns.Model.Time(0),
        media = this.media,
        sel = this.$.find(".Ldt-PlaceholderPlayer");

      function updateTime() {
        if (!paused) {
          currentTime = new ns.Model.Time(new Date().valueOf() - timeDelta);
          if (currentTime <= media.duration) {
            media.trigger("timeupdate", currentTime);
            setTimeout(updateTime, 100);
          } else {
            currentTime = media.duration;
            media.pause();
          }
        }
        sel.text(currentTime.toString(true));
      }

      // Binding functions to Popcorn
      media.on("setcurrenttime", function (_milliseconds) {
        timeDelta = new Date().valueOf() - _milliseconds;
        currentTime = new ns.Model.Time(_milliseconds);
        media.trigger("seeked");
        media.trigger("timeupdate", currentTime);
        sel.text(currentTime.toString(true));
      });

      media.on("setplay", function () {
        paused = false;
        timeDelta = new Date().valueOf() - currentTime;
        media.trigger("play");
        updateTime();
      });

      media.on("setpause", function () {
        paused = true;
        media.trigger("pause");
        updateTime();
      });

      media.trigger("loadedmetadata");
      media.trigger("setcurrenttime", 0);

      if (this.autostart) {
        media.trigger("setplay");
      }
    }
  };
};

export { PlaceholderPlayer, placeholderPlayerStyles };