xgplayer
Version:
video player
363 lines (362 loc) • 11.3 kB
JavaScript
import { addObserver, unObserver } from "./resizeObserver.js";
import util from "../utils/util.js";
var pluginsManager = {
pluginGroup: {},
init: function init(player) {
var cgid = player._pluginInfoId;
if (!cgid) {
cgid = new Date().getTime();
player._pluginInfoId = cgid;
}
!player.config.closeResizeObserver && addObserver(player.root, function() {
player.resize();
});
if (Object.keys(this.pluginGroup).length === 0) {
player.isUserActive = true;
}
this.pluginGroup[cgid] = {
_player: player,
_originalOptions: player.config || {},
_plugins: {}
};
},
checkPlayerRoot: function checkPlayerRoot(root) {
if (this.pluginGroup) {
var _keys = Object.keys(this.pluginGroup);
for (var i = 0; i < _keys.length; i++) {
var _p = this.pluginGroup[_keys[i]]._player;
if (_p.root === root) {
return _p;
}
}
return null;
}
return null;
},
formatPluginInfo: function formatPluginInfo(plugin, config) {
var PLUFGIN = null;
var options = null;
if (plugin.plugin && typeof plugin.plugin === "function") {
PLUFGIN = plugin.plugin;
options = plugin.options;
} else {
PLUFGIN = plugin;
options = {};
}
if (config) {
options.config = config || {};
}
return {
PLUFGIN,
options
};
},
checkPluginIfExits: function checkPluginIfExits(pluginName, plugins) {
for (var i = 0; i < plugins.length; i++) {
if (pluginName.toLowerCase() === plugins[i].pluginName.toLowerCase()) {
return true;
}
}
return false;
},
getRootByConfig: function getRootByConfig(pluginName, playerConfig) {
var keys = Object.keys(playerConfig);
var _pConfig = null;
for (var i = 0; i < keys.length; i++) {
if (pluginName.toLowerCase() === keys[i].toLowerCase()) {
_pConfig = playerConfig[keys[i]];
break;
}
}
if (util.typeOf(_pConfig) === "Object") {
return {
root: _pConfig.root,
position: _pConfig.position
};
}
return {};
},
lazyRegister: function lazyRegister(player, lazyPlugin) {
var _this = this;
var timeout = lazyPlugin.timeout || 1500;
return Promise.race([lazyPlugin.loader().then(function(plugin) {
var result;
if (plugin && plugin.__esModule) {
result = plugin.default;
} else {
result = plugin;
}
_this.register(player, result, plugin.options);
}), new Promise(function(resolve, reject) {
setTimeout(function() {
reject(new Error("timeout"));
}, timeout);
})]);
},
register: function register(player, plugin) {
var options = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {};
if (!player || !plugin || typeof plugin !== "function" || plugin.prototype === void 0) {
return;
}
var cgid = player._pluginInfoId;
if (!cgid || !this.pluginGroup[cgid]) {
return;
}
if (!this.pluginGroup[cgid]._plugins) {
this.pluginGroup[cgid]._plugins = {};
}
var plugins = this.pluginGroup[cgid]._plugins;
var originalOptions = this.pluginGroup[cgid]._originalOptions;
options.player = this.pluginGroup[cgid]._player;
var pluginName = options.pluginName || plugin.pluginName;
if (!pluginName) {
throw new Error("The property pluginName is necessary");
}
if (plugin.isSupported && !plugin.isSupported(player.config.mediaType, player.config.codecType)) {
console.warn("not supported plugin [".concat(pluginName, "]"));
return;
}
if (!options.config) {
options.config = {};
}
var keys = Object.keys(originalOptions);
for (var i = 0; i < keys.length; i++) {
if (pluginName.toLowerCase() === keys[i].toLowerCase()) {
var config = originalOptions[keys[i]];
if (util.typeOf(config) === "Object") {
options.config = Object.assign({}, options.config, originalOptions[keys[i]]);
} else if (util.typeOf(config) === "Boolean") {
options.config.disable = !config;
}
break;
}
}
if (plugin.defaultConfig) {
Object.keys(plugin.defaultConfig).forEach(function(key) {
if (typeof options.config[key] === "undefined") {
options.config[key] = plugin.defaultConfig[key];
}
});
}
if (!options.root) {
options.root = player.root;
} else if (typeof options.root === "string") {
options.root = player[options.root];
}
options.index = options.config.index || 0;
try {
if (plugins[pluginName.toLowerCase()]) {
this.unRegister(cgid, pluginName.toLowerCase());
console.warn("the is one plugin with same pluginName [".concat(pluginName, "] exist, destroy the old instance"));
}
var _instance = new plugin(options);
plugins[pluginName.toLowerCase()] = _instance;
plugins[pluginName.toLowerCase()].func = plugin;
if (_instance && typeof _instance.afterCreate === "function") {
_instance.afterCreate();
}
return _instance;
} catch (err) {
console.error(err);
throw err;
}
},
unRegister: function unRegister(cgid, name) {
if (cgid._pluginInfoId) {
cgid = cgid._pluginInfoId;
}
name = name.toLowerCase();
try {
var plugin = this.pluginGroup[cgid]._plugins[name];
if (plugin) {
plugin.pluginName && plugin.__destroy();
delete this.pluginGroup[cgid]._plugins[name];
}
} catch (e) {
console.error("[unRegister:".concat(name, "] cgid:[").concat(cgid, "] error"), e);
}
},
deletePlugin: function deletePlugin(player, name) {
var cgid = player._pluginInfoId;
if (cgid && this.pluginGroup[cgid] && this.pluginGroup[cgid]._plugins) {
delete this.pluginGroup[cgid]._plugins[name];
}
},
getPlugins: function getPlugins(player) {
var cgid = player._pluginInfoId;
return cgid && this.pluginGroup[cgid] ? this.pluginGroup[cgid]._plugins : {};
},
findPlugin: function findPlugin(player, name) {
var cgid = player._pluginInfoId;
if (!cgid || !this.pluginGroup[cgid]) {
return null;
}
var cName = name.toLowerCase();
return this.pluginGroup[cgid]._plugins[cName];
},
beforeInit: function beforeInit(player) {
var _this2 = this;
function retPromise(fun) {
if (!fun || !fun.then) {
return new Promise(function(resolve) {
resolve();
});
} else {
return fun;
}
}
return new Promise(function(resolve) {
if (!_this2.pluginGroup) {
return;
}
var prevTask;
if (player._loadingPlugins && player._loadingPlugins.length) {
prevTask = Promise.all(player._loadingPlugins);
} else {
prevTask = Promise.resolve();
}
return prevTask.then(function() {
var cgid = player._pluginInfoId;
if (!_this2.pluginGroup[cgid]) {
resolve();
return;
}
var plugins = _this2.pluginGroup[cgid]._plugins;
var pluginsRet = [];
Object.keys(plugins).forEach(function(pName) {
if (plugins[pName] && plugins[pName].beforePlayerInit) {
try {
var ret = plugins[pName].beforePlayerInit();
pluginsRet.push(retPromise(ret));
} catch (e) {
pluginsRet.push(retPromise(null));
throw e;
}
}
});
Promise.all([].concat(pluginsRet)).then(function() {
resolve();
}).catch(function(e) {
console.error(e);
resolve();
});
});
});
},
afterInit: function afterInit(player) {
var cgid = player._pluginInfoId;
if (!cgid || !this.pluginGroup[cgid]) {
return;
}
var plugins = this.pluginGroup[cgid]._plugins;
Object.keys(plugins).forEach(function(pName) {
if (plugins[pName] && plugins[pName].afterPlayerInit) {
plugins[pName].afterPlayerInit();
}
});
},
setLang: function setLang(lang, player) {
var cgid = player._pluginInfoId;
if (!cgid || !this.pluginGroup[cgid]) {
return;
}
var plugins = this.pluginGroup[cgid]._plugins;
Object.keys(plugins).forEach(function(item) {
if (plugins[item].updateLang) {
plugins[item].updateLang(lang);
} else {
try {
plugins[item].lang = lang;
} catch (error) {
console.warn("".concat(item, " setLang"));
}
}
});
},
reRender: function reRender(player) {
var _this3 = this;
var cgid = player._pluginInfoId;
if (!cgid || !this.pluginGroup[cgid]) {
return;
}
var _pList = [];
var plugins = this.pluginGroup[cgid]._plugins;
Object.keys(plugins).forEach(function(pName) {
if (pName !== "controls" && plugins[pName]) {
_pList.push({
plugin: plugins[pName].func,
options: plugins[pName].__args
});
_this3.unRegister(cgid, pName);
}
});
_pList.forEach(function(item) {
_this3.register(player, item.plugin, item.options);
});
},
onPluginsReady: function onPluginsReady(player) {
var cgid = player._pluginInfoId;
if (!cgid || !this.pluginGroup[cgid]) {
return;
}
var plugins = this.pluginGroup[cgid]._plugins || {};
Object.keys(plugins).forEach(function(key) {
if (plugins[key].onPluginsReady && typeof plugins[key].onPluginsReady === "function") {
plugins[key].onPluginsReady();
}
});
},
setCurrentUserActive: function setCurrentUserActive(playerId, isActive) {
if (!this.pluginGroup[playerId]) {
return;
}
if (!isActive) {
this.pluginGroup[playerId]._player.isUserActive = isActive;
return playerId;
}
var keys = Object.keys(this.pluginGroup);
for (var i = 0; i < keys.length; i++) {
var c = this.pluginGroup[keys[i]];
if (c && c._player) {
this.pluginGroup[keys[i]]._player.isUserActive = false;
}
}
this.pluginGroup[playerId]._player.isUserActive = isActive;
return playerId;
},
getCurrentUseActiveId: function getCurrentUseActiveId() {
if (!this.pluginGroup) {
return;
}
var keys = Object.keys(this.pluginGroup);
for (var i = 0; i < keys.length; i++) {
var c = this.pluginGroup[keys[i]];
if (c && c._player && c._player.isUserActive) {
return keys[i];
}
}
return null;
},
destroy: function destroy(player) {
var cgid = player._pluginInfoId;
if (!this.pluginGroup[cgid]) {
return;
}
unObserver(player.root);
var plugins = this.pluginGroup[cgid]._plugins;
for (var _i = 0, _Object$keys = Object.keys(plugins); _i < _Object$keys.length; _i++) {
var item = _Object$keys[_i];
this.unRegister(cgid, item);
}
var _isUseActive = player.isUseActive;
delete this.pluginGroup[cgid];
delete player._pluginInfoId;
if (_isUseActive) {
var keys = Object.keys(this.pluginGroup);
if (keys.length > 0) {
this.setCurrentUserActive(keys[keys.length - 1], true);
}
}
}
};
export { pluginsManager as default };