-
Notifications
You must be signed in to change notification settings - Fork 52
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: decorates the player with kaltura-player to extend api (#14)
- Loading branch information
Dan Ziv
authored
Aug 6, 2017
1 parent
73207cc
commit 2393215
Showing
19 changed files
with
9,999 additions
and
9,186 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
// @flow | ||
import {Utils} from 'playkit-js' | ||
import PlaykitUI from 'playkit-js-ui' | ||
import OvpProvider from 'playkit-js-providers/dist/ovpProvider' | ||
import LoggerFactory from './utils/logger' | ||
import {addKalturaParams} from './utils/kaltura-params' | ||
import './assets/style.css' | ||
|
||
export default class KalturaPlayer { | ||
_player: Player; | ||
_provider: OvpProvider; | ||
_uiManager: PlaykitUI; | ||
_logger: any; | ||
|
||
constructor(player: Player, targetId: string, config: Object) { | ||
this._player = player; | ||
this._logger = LoggerFactory.getLogger('KalturaPlayer' + Utils.Generator.uniqueId(5)); | ||
this._uiManager = new PlaykitUI(this._player, {targetId: targetId}); | ||
this._provider = new OvpProvider(config.partnerId, config.ks, config.env); | ||
this._uiManager.buildDefaultUI(); | ||
return { | ||
loadMedia: this.loadMedia.bind(this) | ||
} | ||
} | ||
|
||
loadMedia(entryId: string, uiConfId: ?number): Promise<*> { | ||
this._logger.debug('loadMedia', {entryId: entryId, uiConfId: uiConfId}); | ||
return this._provider.getConfig(entryId, uiConfId) | ||
.then((data) => { | ||
let playerConfig = {}; | ||
addKalturaParams(data.sources, this._player); | ||
Utils.Object.mergeDeep(playerConfig, this._player.config, data); | ||
this._player.configure(playerConfig); | ||
}); | ||
} | ||
} |
File renamed without changes.
1 change: 1 addition & 0 deletions
1
src/polyfill/performance-now.js → src/polyfills/performance-now.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,4 @@ | ||
// @flow | ||
import PolyfillManager from './polyfill-manager' | ||
import LoggerFactory from '../utils/logger' | ||
|
||
|
1 change: 1 addition & 0 deletions
1
src/polyfill/polyfill-manager.js → src/polyfills/polyfill-manager.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,4 @@ | ||
// @flow | ||
import LoggerFactory from '../utils/logger' | ||
|
||
export default class PolyfillManager { | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,118 +1,22 @@ | ||
//@flow | ||
import {loadPlayer, Utils} from 'playkit-js' | ||
import PlaykitUI from 'playkit-js-ui' | ||
import OvpProvider from 'playkit-js-providers/dist/ovpProvider' | ||
import {addKalturaParams} from './kaltura-params' | ||
import LoggerFactory from './utils/logger' | ||
import './assets/style.css' | ||
// @flow | ||
import {loadPlayer} from 'playkit-js' | ||
import KalturaPlayer from './kaltura-player' | ||
import { | ||
extractPlayerConfig, | ||
extractProvidersConfig, | ||
createKalturaPlayerContainer, | ||
validateTargetId, validateProvidersConfig | ||
} from "./utils/setup-helpers" | ||
|
||
const CONTAINER_CLASS_NAME: string = 'kaltura-player-container'; | ||
const logger = LoggerFactory.getLogger('Setup'); | ||
|
||
/** | ||
* Setup the kaltura player. | ||
* @param {string} targetId - The target id of the dom element which we append the player to. | ||
* @param {Object} userConfig - Optional fully user config which should include also partnerId and entryId. | ||
* @return {Promise<*>} - The response promise. | ||
*/ | ||
export default function setup(targetId: string, userConfig: ?Object): Promise<*> { | ||
let response = {}; | ||
let playerConfig = extractPlayerConfig(userConfig); | ||
logger.debug('Extract player config', playerConfig); | ||
let providerConfig = extractProviderConfig(userConfig); | ||
logger.debug('Extract provider config', providerConfig); | ||
return new Promise((resolve, reject) => { | ||
// Create player container | ||
let containerId = createKalturaPlayerContainer(targetId); | ||
// Create player and handle session id | ||
response.player = loadPlayer(containerId, playerConfig); | ||
response.player.addEventListener(response.player.Event.SOURCE_SELECTED, (event) => { | ||
logger.debug('Add Kaltura params'); | ||
addKalturaParams(event.payload.selectedSource, response.player); | ||
}); | ||
// Prepare config for the ui manager | ||
Utils.Object.mergeDeep(playerConfig, {targetId: containerId}); | ||
// Build UI | ||
buildUI(response.player, playerConfig); | ||
// Handle provider config | ||
if (providerConfig.partnerId) { | ||
logger.debug('Partner id provided, creating ovp provider'); | ||
response.provider = new OvpProvider(providerConfig.partnerId, providerConfig.ks, providerConfig.env); | ||
return response.provider.getConfig(providerConfig.entryId, providerConfig.uiConfId) | ||
.then(data => { | ||
Utils.Object.mergeDeep(playerConfig, data); | ||
response.player.configure(playerConfig); | ||
logger.debug('Finish setup, returning response', response); | ||
resolve(response); | ||
}).catch(error => { | ||
reject(error); | ||
}); | ||
} | ||
logger.debug('Finish setup, returning response', response); | ||
resolve(response); | ||
}); | ||
} | ||
|
||
/** | ||
* Creates the player container dom element. | ||
* @param {string} targetId - The div id which the player will append to. | ||
* @returns {string} - The player container id. | ||
*/ | ||
function createKalturaPlayerContainer(targetId: string): string { | ||
let el = document.createElement("div"); | ||
el.id = Utils.Generator.uniqueId(5); | ||
el.className = CONTAINER_CLASS_NAME; | ||
el.setAttribute('tabindex', '-1'); | ||
let parentNode = document.getElementById(targetId); | ||
if (parentNode && el) { | ||
parentNode.appendChild(el); | ||
} | ||
return el.id; | ||
} | ||
|
||
/** | ||
* Builds the default kaltura ui of the player. | ||
* @param {Player} player - The kaltura player. | ||
* @param {Object} config - The ui configuration. | ||
* @returns {void} | ||
*/ | ||
function buildUI(player: Player, config: Object): void { | ||
let playerUIManager = new PlaykitUI(player, config); | ||
playerUIManager.buildDefaultUI(); | ||
} | ||
|
||
/** | ||
* Extracts the player configuration. | ||
* @param {Object} config - The fully user configuration. | ||
* @returns {Object} - The player configuration. | ||
*/ | ||
function extractPlayerConfig(config: ?Object): Object { | ||
let playerConfig = {}; | ||
Utils.Object.mergeDeep(playerConfig, config); | ||
delete playerConfig.partnerId; | ||
delete playerConfig.entryId; | ||
delete playerConfig.uiConfId; | ||
delete playerConfig.env; | ||
delete playerConfig.ks; | ||
return playerConfig; | ||
} | ||
|
||
/** | ||
* Extracts the provider configuration. | ||
* @param {Object} config - The fully user configuration. | ||
* @returns {Object} - The provider configuration. | ||
*/ | ||
function extractProviderConfig(config: ?Object): Object { | ||
let providerConfig = {}; | ||
if (config) { | ||
providerConfig.partnerId = config.partnerId; | ||
providerConfig.entryId = config.entryId; | ||
providerConfig.uiConfId = config.uiConfId; | ||
providerConfig.env = config.env; | ||
providerConfig.ks = config.ks; | ||
} | ||
return providerConfig; | ||
function setup(targetId: string, options: Object): KalturaPlayer { | ||
validateTargetId(targetId); | ||
validateProvidersConfig(options); | ||
let playerConfig = extractPlayerConfig(options); | ||
let providersConfig = extractProvidersConfig(options); | ||
let containerId = createKalturaPlayerContainer(targetId); | ||
let player = loadPlayer(containerId, playerConfig); | ||
let kalturaPlayer = new KalturaPlayer(player, containerId, providersConfig); | ||
return Object.assign(player, kalturaPlayer); | ||
} | ||
|
||
// Export those functions for automation testing | ||
export {extractProviderConfig, extractPlayerConfig, createKalturaPlayerContainer} | ||
export {setup}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
// @flow | ||
import {Utils} from 'playkit-js' | ||
import {ValidationErrorType} from './validation-error' | ||
|
||
const CONTAINER_CLASS_NAME: string = 'kaltura-player-container'; | ||
|
||
/** | ||
* Validate the initial user input for the providers. | ||
* @param {Object} config - The fully user provider configuration. | ||
* @returns {void} | ||
*/ | ||
function validateProvidersConfig(config: Object) { | ||
if (!config) { | ||
throw new Error(ValidationErrorType.INITIAL_CONFIG_REQUIRED); | ||
} | ||
if (!config.partnerId) { | ||
throw new Error(ValidationErrorType.PARTNER_ID_REQUIRED); | ||
} | ||
} | ||
|
||
/** | ||
* Validate the initial user input for the player. | ||
* @param {string} targetId - The DOM element id which the player will be append to. | ||
* @returns {void} | ||
*/ | ||
function validateTargetId(targetId: string) { | ||
if (!targetId) { | ||
throw new Error(ValidationErrorType.TARGET_ID_REQUIRED); | ||
} | ||
if (!document.getElementById(targetId)) { | ||
throw new Error(ValidationErrorType.DOM_ELEMENT_WITH_TARGET_ID_REQUIRED + targetId); | ||
} | ||
} | ||
|
||
/** | ||
* Extracts the player configuration. | ||
* @param {Object} config - The fully user configuration. | ||
* @returns {Object} - The player configuration. | ||
*/ | ||
function extractPlayerConfig(config: ?Object): Object { | ||
let playerConfig = {}; | ||
Utils.Object.mergeDeep(playerConfig, config); | ||
delete playerConfig.partnerId; | ||
delete playerConfig.entryId; | ||
delete playerConfig.uiConfId; | ||
delete playerConfig.env; | ||
delete playerConfig.ks; | ||
return playerConfig; | ||
} | ||
|
||
/** | ||
* Extracts the provider configuration. | ||
* @param {Object} config - The fully user configuration. | ||
* @returns {Object} - The provider configuration. | ||
*/ | ||
function extractProvidersConfig(config: ?Object): Object { | ||
let providerConfig = {}; | ||
if (config) { | ||
providerConfig.partnerId = config.partnerId; | ||
providerConfig.entryId = config.entryId; | ||
providerConfig.uiConfId = config.uiConfId; | ||
providerConfig.env = config.env; | ||
providerConfig.ks = config.ks; | ||
} | ||
return providerConfig; | ||
} | ||
|
||
/** | ||
* Creates the player container dom element. | ||
* @param {string} targetId - The div id which the player will append to. | ||
* @returns {string} - The player container id. | ||
*/ | ||
function createKalturaPlayerContainer(targetId: string): string { | ||
let el = document.createElement("div"); | ||
el.id = Utils.Generator.uniqueId(5); | ||
el.className = CONTAINER_CLASS_NAME; | ||
el.setAttribute('tabindex', '-1'); | ||
let parentNode = document.getElementById(targetId); | ||
if (parentNode && el) { | ||
parentNode.appendChild(el); | ||
} | ||
return el.id; | ||
} | ||
|
||
export { | ||
extractPlayerConfig, | ||
extractProvidersConfig, | ||
createKalturaPlayerContainer, | ||
validateTargetId, | ||
validateProvidersConfig | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
// @flow | ||
const ValidationErrorType = { | ||
INITIAL_CONFIG_REQUIRED: 'Must provide initial providers config', | ||
PARTNER_ID_REQUIRED: 'Must provide partner id', | ||
TARGET_ID_REQUIRED: 'Must provide target id', | ||
DOM_ELEMENT_WITH_TARGET_ID_REQUIRED: 'Must provide DOM element with id of: ' | ||
}; | ||
|
||
export {ValidationErrorType}; |
Oops, something went wrong.