JSDoc for www/js/channel/*.js complete. Just need to hadnle ww/js/channel/panels.
This commit is contained in:
parent
ac06f839ea
commit
c0f219276f
91 changed files with 38653 additions and 104 deletions
|
|
@ -14,26 +14,53 @@ GNU Affero General Public License for more details.
|
|||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.*/
|
||||
|
||||
//This is little more than a interface class
|
||||
/*
|
||||
* Base class for all Canopy Media Handlers
|
||||
*
|
||||
* This is little more than a interface class
|
||||
*/
|
||||
class mediaHandler{
|
||||
/**
|
||||
* Instantiates a new Media Handler object
|
||||
* @param {channel} client - Parent Client Management Object
|
||||
* @param {player} player - Parent Canopy Player Object
|
||||
* @param {Object} media - De-hydrated media object from server
|
||||
* @param {String} type - Media Handler Source Type
|
||||
*/
|
||||
constructor(client, player, media, type){
|
||||
//Get parents
|
||||
/**
|
||||
* Parent Client Management Object
|
||||
*/
|
||||
this.client = client;
|
||||
|
||||
/**
|
||||
* Parent Canopy Player Object
|
||||
*/
|
||||
this.player = player;
|
||||
|
||||
//Set handler type
|
||||
/**
|
||||
* Media Handler Source Type
|
||||
*/
|
||||
this.type = type
|
||||
|
||||
//Denotes wether a seek call was made by the syncing function
|
||||
/*
|
||||
* Denotes wether a seek call was made by the syncing function
|
||||
*/
|
||||
this.selfAct = false;
|
||||
|
||||
//Set last received timestamp to 0
|
||||
/*
|
||||
* Contains the last received time stamp
|
||||
*/
|
||||
this.lastTimestamp = 0;
|
||||
|
||||
//Ingest media object from server
|
||||
this.startMedia(media);
|
||||
}
|
||||
|
||||
/**
|
||||
* Ingests media nd starts playback
|
||||
* @param {Object} media - Media object from server
|
||||
*/
|
||||
startMedia(media){
|
||||
//If we properly ingested the media
|
||||
if(this.ingestMedia(media)){
|
||||
|
|
@ -45,16 +72,27 @@ class mediaHandler{
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds video player element
|
||||
*/
|
||||
buildPlayer(){
|
||||
//Reset player lock
|
||||
this.lock = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Destroys video player element
|
||||
*/
|
||||
destroyPlayer(){
|
||||
//Null out video property
|
||||
this.video = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Ingests media object from server
|
||||
* @param {Object} media - Media object from the server
|
||||
* @returns {Boolean} True upon success
|
||||
*/
|
||||
ingestMedia(media){
|
||||
//Set now playing
|
||||
this.nowPlaying = media;
|
||||
|
|
@ -63,10 +101,17 @@ class mediaHandler{
|
|||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Starts video playback
|
||||
*/
|
||||
start(){
|
||||
this.setVideoTitle(this.nowPlaying.title);
|
||||
}
|
||||
|
||||
/**
|
||||
* Syncronizes timestamp based on timestamp received from server
|
||||
* @param {Number} timestamp - Current video timestamp in seconds
|
||||
*/
|
||||
sync(timestamp = this.lastTimestamp){
|
||||
//Skip sync calls that won't seek so we don't pointlessly throw selfAct
|
||||
if(timestamp != this.video.currentTime){
|
||||
|
|
@ -75,6 +120,9 @@ class mediaHandler{
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Reloads media player
|
||||
*/
|
||||
reload(){
|
||||
//Get current timestamp
|
||||
const timestamp = this.video.currentTime;
|
||||
|
|
@ -83,6 +131,9 @@ class mediaHandler{
|
|||
this.selfAct = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles media end
|
||||
*/
|
||||
end(){
|
||||
//Null out current media
|
||||
this.nowPlaying = null;
|
||||
|
|
@ -94,32 +145,64 @@ class mediaHandler{
|
|||
this.destroyPlayer();
|
||||
}
|
||||
|
||||
/**
|
||||
* Plays video
|
||||
*/
|
||||
play(){
|
||||
}
|
||||
|
||||
/**
|
||||
* Pauses video
|
||||
*/
|
||||
pause(){
|
||||
}
|
||||
|
||||
/**
|
||||
* Toggles player control lockout
|
||||
* @param {Boolean} lock - Whether or not to lock-out user control of video
|
||||
*/
|
||||
setPlayerLock(lock){
|
||||
//set lock property
|
||||
this.lock = lock;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates Aspect Ratio of media
|
||||
* @returns {Number} Media Aspect Ratio as Floating Point number
|
||||
*/
|
||||
getRatio(){
|
||||
return 4/3;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets current timestamp from video
|
||||
* @returns {Number} Media Timestamp in seconds
|
||||
*/
|
||||
getTimestamp(){
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets player title
|
||||
* @param {String} title - Title to set
|
||||
*/
|
||||
setVideoTitle(title){
|
||||
this.player.title.textContent = `Currently Playing: ${title}`;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called once all video metadata has properly been fetched
|
||||
* @param {Event} event - Event passed down by event handler
|
||||
*/
|
||||
onMetadataLoad(event){
|
||||
//Resize aspect (if locked), since the video doesn't properly report it's resolution until it's been loaded
|
||||
this.client.chatBox.resizeAspect();
|
||||
}
|
||||
|
||||
/**
|
||||
* Called on media pause
|
||||
* @param {Event} event - Event passed down by event handler
|
||||
*/
|
||||
onPause(event){
|
||||
//If the video was paused out-side of code
|
||||
if(!this.selfAct){
|
||||
|
|
@ -129,9 +212,17 @@ class mediaHandler{
|
|||
this.selfAct = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called on media volume change
|
||||
* @param {Event} event - Event passed down by event handler
|
||||
*/
|
||||
onVolumeChange(event){
|
||||
}
|
||||
|
||||
/**
|
||||
* Called on media seek
|
||||
* @param {Event} event - Event passed down by event handler
|
||||
*/
|
||||
onSeek(event){
|
||||
//If the video was seeked out-side of code
|
||||
if(!this.selfAct){
|
||||
|
|
@ -142,17 +233,34 @@ class mediaHandler{
|
|||
this.selfAct = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called on media buffer
|
||||
* @param {Event} event - Event passed down by event handler
|
||||
*/
|
||||
onBuffer(){
|
||||
this.selfAct = true;
|
||||
}
|
||||
}
|
||||
|
||||
//Basic building blocks for anything that touches a <video> tag
|
||||
/**
|
||||
* Class containing basic building blocks for anything that touches a <video> tag
|
||||
* @extends mediaHandler
|
||||
*/
|
||||
class rawFileBase extends mediaHandler{
|
||||
/**
|
||||
* Instantiates a new rawFileBase object
|
||||
* @param {channel} client - Parent Client Management Object
|
||||
* @param {player} player - Parent Canopy Player Object
|
||||
* @param {Object} media - De-hydrated media object from server
|
||||
* @param {String} type - Media Handler Source Type
|
||||
*/
|
||||
constructor(client, player, media, type){
|
||||
super(client, player, media, type);
|
||||
}
|
||||
|
||||
/**
|
||||
* Defines input-related event listeners
|
||||
*/
|
||||
defineListeners(){
|
||||
//Resize to aspect on metadata load
|
||||
this.video.addEventListener('loadedmetadata', this.onMetadataLoad.bind(this));
|
||||
|
|
@ -222,8 +330,16 @@ class rawFileBase extends mediaHandler{
|
|||
}
|
||||
}
|
||||
|
||||
//Off air static 'player'
|
||||
/**
|
||||
* Off air static 'player'
|
||||
* @extends rawFileBase
|
||||
*/
|
||||
class nullHandler extends rawFileBase{
|
||||
/**
|
||||
* Instantiates a new Null Handler object
|
||||
* @param {channel} client - Parent Client Management Object
|
||||
* @param {player} player - Parent Canopy Player Object
|
||||
*/
|
||||
constructor(client, player){
|
||||
//Call derived constructor
|
||||
super(client, player, {}, null);
|
||||
|
|
@ -258,8 +374,17 @@ class nullHandler extends rawFileBase{
|
|||
}
|
||||
}
|
||||
|
||||
//Basic building blocks needed for proper time-synchronized raw-file playback
|
||||
/**
|
||||
* Basic building blocks needed for proper time-synchronized raw-file playback
|
||||
* @extends rawFileBase
|
||||
*/
|
||||
class rawFileHandler extends rawFileBase{
|
||||
/**
|
||||
* Instantiates a new Null Handler object
|
||||
* @param {channel} client - Parent Client Management Object
|
||||
* @param {player} player - Parent Canopy Player Object
|
||||
* @param {Object} media - De-hydrated media object from server
|
||||
*/
|
||||
constructor(client, player, media){
|
||||
//Call derived constructor
|
||||
super(client, player, media, 'raw');
|
||||
|
|
@ -319,7 +444,17 @@ class rawFileHandler extends rawFileBase{
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles Youtube playback via the official YT embed (gross)
|
||||
* @extends mediaHandler
|
||||
*/
|
||||
class youtubeEmbedHandler extends mediaHandler{
|
||||
/**
|
||||
* Instantiates a new Youtube Embed Handler object
|
||||
* @param {channel} client - Parent Client Management Object
|
||||
* @param {player} player - Parent Canopy Player Object
|
||||
* @param {Object} media - De-hydrated media object from server
|
||||
*/
|
||||
constructor(client, player, media){
|
||||
//Call derived constructor
|
||||
super(client, player, media, 'ytEmbed');
|
||||
|
|
@ -469,7 +604,9 @@ class youtubeEmbedHandler extends mediaHandler{
|
|||
this.player.title.textContent = "";
|
||||
}
|
||||
|
||||
//Generic handler for state changes since google is a dick
|
||||
/**
|
||||
* Generic handler for state changes since google is a dick
|
||||
*/
|
||||
onStateChange(event){
|
||||
switch(event.data){
|
||||
//video unstarted
|
||||
|
|
@ -509,7 +646,18 @@ class youtubeEmbedHandler extends mediaHandler{
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Base HLS Media handler for handling all HLS related media
|
||||
* @extends rawFileBase
|
||||
*/
|
||||
class hlsBase extends rawFileBase{
|
||||
/**
|
||||
* Instantiates a new HLS Base object
|
||||
* @param {channel} client - Parent Client Management Object
|
||||
* @param {player} player - Parent Canopy Player Object
|
||||
* @param {Object} media - De-hydrated media object from server
|
||||
* @param {String} type - Media Handler Source Type
|
||||
*/
|
||||
constructor(client, player, media, type){
|
||||
//Call derived constructor
|
||||
super(client, player, media, type);
|
||||
|
|
@ -554,7 +702,17 @@ class hlsBase extends rawFileBase{
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* HLS Livestream Handler
|
||||
* @extends hlsBase
|
||||
*/
|
||||
class hlsLiveStreamHandler extends hlsBase{
|
||||
/**
|
||||
* Instantiates a new HLS Live Stream Handler object
|
||||
* @param {channel} client - Parent Client Management Object
|
||||
* @param {player} player - Parent Canopy Player Object
|
||||
* @param {Object} media - De-hydrated media object from server
|
||||
*/
|
||||
constructor(client, player, media){
|
||||
//Call derived constructor
|
||||
super(client, player, media, "livehls");
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue