goog.module('gep.provider.VideoProvider');
const AutoResetProvider = goog.require('gep.provider.AutoResetProvider');
const {Event,EventType,EventTarget} = goog.require('goog.events');
/**
* This provider (singleton) controls the creation of the Vimeo video player instances and controls them.
* @extends {EventTarget}
*/
class VideoProvider extends EventTarget
{
constructor()
{
super();
/**
* Reference to AutoResetProvider to monitor and control the automatic reset of the page when the user is inactive for a specified period of time.
* @type {AutoResetProvider}
* @private
*/
this.autoResetProvider_ = AutoResetProvider.getInstance();
/**
* List of Vimeo video player instances
* @type {Map<string,Vimeo.Player>}
* @private
*/
this.players_ = new Map();
/**
* Defines whether a video is currently playing.
* @type {boolean}
* @private
*/
this.videoIsPlaying_ = false;
}
/**
* Creates a Vimeo video player instance and creates the necessary listeners to control the video.
* @param {string} key
* @param {Element} container
* @param {Object=} options
* @return {Vimeo.Player}
*/
createPlayer(key, container, options = null)
{
let player = new Vimeo.Player(container, options);
player.on('play', () => {
this.dispatchEvent(new Event(EventType.PLAY));
this.videoIsPlaying_ = true;
this.autoResetProvider_.cancel();
});
player.on('pause', () => {
this.dispatchEvent(new Event(EventType.PAUSE));
this.videoIsPlaying_ = false;
this.autoResetProvider_.start();
});
player.on('ended', () => {
this.dispatchEvent(new Event(EventType.PAUSE));
this.videoIsPlaying_ = false;
this.autoResetProvider_.start();
});
this.players_.set(key, player);
return player;
}
/**
* Returns an instance from the list of Vimeo videos after the searched list key
* @param {string} key
* @return {Vimeo.Player}
*/
getPlayer(key)
{
if(this.players_.has(key))
return this.players_.get(key);
return null;
}
/**
* Destroys an instance from the list of Vimeo videos after the searched key
* @param {string} key
*/
deletePlayer(key)
{
if(this.players_.has(key))
{
this.players_.get(key).destroy().catch((error) => {console.warn(error);});
this.players_.delete(key);
}
}
/**
* Pauses all videos
*/
pauseAllPlayers()
{
this.players_.forEach((player) => {
player.pause();
});
this.dispatchEvent(new Event(EventType.PAUSE));
}
/**
* Getter
* @return {boolean}
*/
get videoIsPlaying()
{
return this.videoIsPlaying_;
}
}
goog.addSingletonGetter(VideoProvider);
exports = VideoProvider;