update components
This commit is contained in:
parent
58cebe2486
commit
93ce8f975b
8 changed files with 232 additions and 82 deletions
|
@ -14,12 +14,12 @@
|
||||||
},
|
},
|
||||||
"devDependencies": {},
|
"devDependencies": {},
|
||||||
"ignore": [],
|
"ignore": [],
|
||||||
"version": "1.4.489",
|
"version": "1.4.490",
|
||||||
"_release": "1.4.489",
|
"_release": "1.4.490",
|
||||||
"_resolution": {
|
"_resolution": {
|
||||||
"type": "version",
|
"type": "version",
|
||||||
"tag": "1.4.489",
|
"tag": "1.4.490",
|
||||||
"commit": "4b7b914b55dba588627036dee142a3358cb1c282"
|
"commit": "d0ee6da0b7661ff97d3501ea7633d113d3cb5a99"
|
||||||
},
|
},
|
||||||
"_source": "https://github.com/MediaBrowser/emby-webcomponents.git",
|
"_source": "https://github.com/MediaBrowser/emby-webcomponents.git",
|
||||||
"_target": "^1.2.1",
|
"_target": "^1.2.1",
|
||||||
|
|
|
@ -23,8 +23,6 @@ define(['browser', 'pluginManager', 'events', 'apphost', 'loading', 'playbackMan
|
||||||
|
|
||||||
var subtitleTrackIndexToSetOnPlaying;
|
var subtitleTrackIndexToSetOnPlaying;
|
||||||
|
|
||||||
var currentSubtitlesElement;
|
|
||||||
var currentTrackEvents;
|
|
||||||
var lastCustomTrackMs = 0;
|
var lastCustomTrackMs = 0;
|
||||||
var currentClock;
|
var currentClock;
|
||||||
var currentAssRenderer;
|
var currentAssRenderer;
|
||||||
|
@ -923,11 +921,6 @@ define(['browser', 'pluginManager', 'events', 'apphost', 'loading', 'playbackMan
|
||||||
window.removeEventListener('resize', onVideoResize);
|
window.removeEventListener('resize', onVideoResize);
|
||||||
window.removeEventListener('orientationchange', onVideoResize);
|
window.removeEventListener('orientationchange', onVideoResize);
|
||||||
|
|
||||||
var videoSubtitlesElem = document.querySelector('.videoSubtitles');
|
|
||||||
if (videoSubtitlesElem) {
|
|
||||||
videoSubtitlesElem.parentNode.removeChild(videoSubtitlesElem);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isPlaying) {
|
if (isPlaying) {
|
||||||
|
|
||||||
var allTracks = mediaElement.textTracks; // get list of tracks
|
var allTracks = mediaElement.textTracks; // get list of tracks
|
||||||
|
@ -942,8 +935,6 @@ define(['browser', 'pluginManager', 'events', 'apphost', 'loading', 'playbackMan
|
||||||
}
|
}
|
||||||
|
|
||||||
customTrackIndex = -1;
|
customTrackIndex = -1;
|
||||||
currentSubtitlesElement = null;
|
|
||||||
currentTrackEvents = null;
|
|
||||||
currentClock = null;
|
currentClock = null;
|
||||||
|
|
||||||
var renderer = currentAssRenderer;
|
var renderer = currentAssRenderer;
|
||||||
|
@ -1084,44 +1075,6 @@ define(['browser', 'pluginManager', 'events', 'apphost', 'loading', 'playbackMan
|
||||||
if (clock) {
|
if (clock) {
|
||||||
clock.seek(timeMs / 1000);
|
clock.seek(timeMs / 1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
var trackEvents = currentTrackEvents;
|
|
||||||
if (!trackEvents) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!currentSubtitlesElement) {
|
|
||||||
var videoSubtitlesElem = document.querySelector('.videoSubtitles');
|
|
||||||
if (!videoSubtitlesElem) {
|
|
||||||
videoSubtitlesElem = document.createElement('div');
|
|
||||||
videoSubtitlesElem.classList.add('videoSubtitles');
|
|
||||||
videoSubtitlesElem.innerHTML = '<div class="videoSubtitlesInner"></div>';
|
|
||||||
videoDialog.appendChild(videoSubtitlesElem);
|
|
||||||
}
|
|
||||||
currentSubtitlesElement = videoSubtitlesElem.querySelector('.videoSubtitlesInner');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (lastCustomTrackMs > 0) {
|
|
||||||
if (Math.abs(lastCustomTrackMs - timeMs) < 500) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
lastCustomTrackMs = new Date().getTime();
|
|
||||||
|
|
||||||
var positionTicks = timeMs * 10000;
|
|
||||||
for (var i = 0, length = trackEvents.length; i < length; i++) {
|
|
||||||
|
|
||||||
var caption = trackEvents[i];
|
|
||||||
if (positionTicks >= caption.StartPositionTicks && positionTicks <= caption.EndPositionTicks) {
|
|
||||||
currentSubtitlesElement.innerHTML = caption.Text;
|
|
||||||
currentSubtitlesElement.classList.remove('hide');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
currentSubtitlesElement.innerHTML = '';
|
|
||||||
currentSubtitlesElement.classList.add('hide');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function getMediaStreamAudioTracks(mediaSource) {
|
function getMediaStreamAudioTracks(mediaSource) {
|
||||||
|
|
|
@ -31,32 +31,14 @@
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.videoSubtitles {
|
.htmlvideoplayer::-webkit-media-text-track-display {
|
||||||
position: fixed;
|
/*Style the text itself*/
|
||||||
bottom: 10%;
|
margin-top: -2.5em;
|
||||||
text-align: center;
|
}
|
||||||
left: 0;
|
|
||||||
right: 0;
|
|
||||||
color: #fff;
|
|
||||||
font-size: 150%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.videoSubtitlesInner {
|
.htmlvideoplayer::cue {
|
||||||
max-width: 70%;
|
background-color: transparent;
|
||||||
background-color: rgba(0,0,0,.8);
|
text-shadow: 2px 2px 2px rgba(0, 0, 0, 1);
|
||||||
padding: .25em;
|
-webkit-font-smoothing: antialiased;
|
||||||
margin: auto;
|
font-family: inherit;
|
||||||
display: inline-block;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
.htmlvideoplayer::-webkit-media-text-track-display {
|
|
||||||
/*Style the text itself*/
|
|
||||||
margin-top: -2.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
::cue {
|
|
||||||
background-color: transparent;
|
|
||||||
text-shadow: 2px 2px 2px rgba(0, 0, 0, 1);
|
|
||||||
-webkit-font-smoothing: antialiased;
|
|
||||||
font-family: inherit;
|
|
||||||
}
|
|
||||||
|
|
|
@ -1594,7 +1594,7 @@ define(['events', 'datetime', 'appSettings', 'pluginManager', 'userSettings', 'g
|
||||||
var player = currentPlayer;
|
var player = currentPlayer;
|
||||||
|
|
||||||
if (player) {
|
if (player) {
|
||||||
player.destroy();
|
destroyPlayer(player);
|
||||||
}
|
}
|
||||||
setCurrentPlayerInternal(null);
|
setCurrentPlayerInternal(null);
|
||||||
|
|
||||||
|
@ -1604,6 +1604,11 @@ define(['events', 'datetime', 'appSettings', 'pluginManager', 'userSettings', 'g
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function destroyPlayer(player) {
|
||||||
|
player.destroy();
|
||||||
|
releaseResourceLocks(player);
|
||||||
|
}
|
||||||
|
|
||||||
function runInterceptors(item, playOptions) {
|
function runInterceptors(item, playOptions) {
|
||||||
|
|
||||||
return new Promise(function (resolve, reject) {
|
return new Promise(function (resolve, reject) {
|
||||||
|
@ -2567,9 +2572,66 @@ define(['events', 'datetime', 'appSettings', 'pluginManager', 'userSettings', 'g
|
||||||
|
|
||||||
events.trigger(player, 'playbackstart', [state]);
|
events.trigger(player, 'playbackstart', [state]);
|
||||||
events.trigger(self, 'playbackstart', [player, state]);
|
events.trigger(self, 'playbackstart', [player, state]);
|
||||||
|
|
||||||
|
acquireResourceLocks(player, streamInfo.mediaType);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function acquireResourceLocks(player, mediaType) {
|
||||||
|
|
||||||
|
if (!player.isLocalPlayer) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var playerData = getPlayerData(player);
|
||||||
|
playerData.resourceLocks = playerData.resourceLocks || {};
|
||||||
|
var locks = playerData.resourceLocks;
|
||||||
|
|
||||||
|
ensureLock(locks, 'network');
|
||||||
|
ensureLock(locks, 'wake');
|
||||||
|
|
||||||
|
if (mediaType === 'Video') {
|
||||||
|
ensureLock(locks, 'screen');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function ensureLock(locks, resourceType) {
|
||||||
|
|
||||||
|
var prop = resourceType + 'Lock';
|
||||||
|
var existingLock = locks[prop];
|
||||||
|
if (existingLock) {
|
||||||
|
existingLock.acquire();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
require(['resourceLockManager'], function (resourceLockManager) {
|
||||||
|
resourceLockManager.request(resourceType).then(function (resourceLock) {
|
||||||
|
locks[prop] = resourceLock;
|
||||||
|
resourceLock.acquire();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function releaseResourceLocks(player) {
|
||||||
|
|
||||||
|
if (!player.isLocalPlayer) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var playerData = getPlayerData(player);
|
||||||
|
var locks = playerData.resourceLocks || {};
|
||||||
|
|
||||||
|
if (locks.wakeLock) {
|
||||||
|
locks.wakeLock.release();
|
||||||
|
}
|
||||||
|
if (locks.networkLock) {
|
||||||
|
locks.networkLock.release();
|
||||||
|
}
|
||||||
|
if (locks.screenLock) {
|
||||||
|
locks.screenLock.release();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function onPlaybackError(e, error) {
|
function onPlaybackError(e, error) {
|
||||||
|
|
||||||
var player = this;
|
var player = this;
|
||||||
|
@ -2666,7 +2728,7 @@ define(['events', 'datetime', 'appSettings', 'pluginManager', 'userSettings', 'g
|
||||||
var newPlayer = nextItem ? getPlayer(nextItem.item, currentPlayOptions) : null;
|
var newPlayer = nextItem ? getPlayer(nextItem.item, currentPlayOptions) : null;
|
||||||
|
|
||||||
if (newPlayer !== player) {
|
if (newPlayer !== player) {
|
||||||
player.destroy();
|
destroyPlayer(player);
|
||||||
setCurrentPlayerInternal(null);
|
setCurrentPlayerInternal(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
95
dashboard-ui/bower_components/emby-webcomponents/playback/playersettingsmenu.js
vendored
Normal file
95
dashboard-ui/bower_components/emby-webcomponents/playback/playersettingsmenu.js
vendored
Normal file
|
@ -0,0 +1,95 @@
|
||||||
|
define(['actionsheet', 'datetime', 'playbackManager', 'globalize', 'appSettings', 'qualityoptions'], function (actionsheet, datetime, playbackManager, globalize, appSettings, qualityoptions) {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
function showQualityMenu(player, btn) {
|
||||||
|
|
||||||
|
var videoStream = playbackManager.currentMediaSource(player).MediaStreams.filter(function (stream) {
|
||||||
|
return stream.Type === "Video";
|
||||||
|
})[0];
|
||||||
|
var videoWidth = videoStream ? videoStream.Width : null;
|
||||||
|
|
||||||
|
var options = qualityoptions.getVideoQualityOptions(playbackManager.getMaxStreamingBitrate(player), videoWidth);
|
||||||
|
|
||||||
|
//if (isStatic) {
|
||||||
|
// options[0].name = "Direct";
|
||||||
|
//}
|
||||||
|
|
||||||
|
var menuItems = options.map(function (o) {
|
||||||
|
|
||||||
|
var opt = {
|
||||||
|
name: o.name,
|
||||||
|
id: o.bitrate
|
||||||
|
};
|
||||||
|
|
||||||
|
if (o.selected) {
|
||||||
|
opt.selected = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return opt;
|
||||||
|
});
|
||||||
|
|
||||||
|
var selectedId = options.filter(function (o) {
|
||||||
|
return o.selected;
|
||||||
|
});
|
||||||
|
|
||||||
|
selectedId = selectedId.length ? selectedId[0].bitrate : null;
|
||||||
|
|
||||||
|
return actionsheet.show({
|
||||||
|
items: menuItems,
|
||||||
|
positionTo: btn
|
||||||
|
|
||||||
|
}).then(function (id) {
|
||||||
|
var bitrate = parseInt(id);
|
||||||
|
if (bitrate !== selectedId) {
|
||||||
|
playbackManager.setMaxStreamingBitrate(bitrate, player);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function showSettingsMenu(player, btn) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function show(options) {
|
||||||
|
|
||||||
|
var player = options.player;
|
||||||
|
var mediaType = options.mediaType;
|
||||||
|
return showQualityMenu(player, options.positionTo);
|
||||||
|
|
||||||
|
//var menuItems = [];
|
||||||
|
|
||||||
|
//menuItems.push({
|
||||||
|
// name: globalize.translate('sharedcomponents#Quality'),
|
||||||
|
// id: 'quality'
|
||||||
|
//});
|
||||||
|
|
||||||
|
//menuItems.push({
|
||||||
|
// name: globalize.translate('sharedcomponents#Settings'),
|
||||||
|
// id: 'settings'
|
||||||
|
//});
|
||||||
|
|
||||||
|
//return actionsheet.show({
|
||||||
|
|
||||||
|
// items: menuItems,
|
||||||
|
// positionTo: options.positionTo
|
||||||
|
|
||||||
|
//}).then(function (id) {
|
||||||
|
|
||||||
|
// switch (id) {
|
||||||
|
|
||||||
|
// case 'quality':
|
||||||
|
// return showQualityMenu(player, options.positionTo);
|
||||||
|
// case 'settings':
|
||||||
|
// return showSettingsMenu(player, options.positionTo);
|
||||||
|
// default:
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// return Promise.reject();
|
||||||
|
//});
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
show: show
|
||||||
|
};
|
||||||
|
});
|
20
dashboard-ui/bower_components/emby-webcomponents/resourcelocks/nullresourcelock.js
vendored
Normal file
20
dashboard-ui/bower_components/emby-webcomponents/resourcelocks/nullresourcelock.js
vendored
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
define([], function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
function ResourceLockInstance() {
|
||||||
|
}
|
||||||
|
|
||||||
|
ResourceLockInstance.prototype.acquire = function () {
|
||||||
|
this._isHeld = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
ResourceLockInstance.prototype.isHeld = function () {
|
||||||
|
return this._isHeld === true;
|
||||||
|
};
|
||||||
|
|
||||||
|
ResourceLockInstance.prototype.release = function () {
|
||||||
|
this._isHeld = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
return ResourceLockInstance;
|
||||||
|
});
|
37
dashboard-ui/bower_components/emby-webcomponents/resourcelocks/resourcelockmanager.js
vendored
Normal file
37
dashboard-ui/bower_components/emby-webcomponents/resourcelocks/resourcelockmanager.js
vendored
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
define([], function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
function getRequirePromise(deps) {
|
||||||
|
|
||||||
|
return new Promise(function (resolve, reject) {
|
||||||
|
|
||||||
|
require(deps, resolve);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function requestResourceLock(resource) {
|
||||||
|
return getRequirePromise([resource]).then(function (factory) {
|
||||||
|
return new factory();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function request(type) {
|
||||||
|
|
||||||
|
switch (type) {
|
||||||
|
|
||||||
|
case 'wake':
|
||||||
|
return requestResourceLock('wakeLock');
|
||||||
|
case 'screen':
|
||||||
|
return requestResourceLock('screenLock');
|
||||||
|
case 'network':
|
||||||
|
return requestResourceLock('networkLock');
|
||||||
|
default:
|
||||||
|
return Promise.reject();
|
||||||
|
}
|
||||||
|
return Promise.resolve(new ResourceLockInstance(type));
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
request: request
|
||||||
|
};
|
||||||
|
});
|
|
@ -383,5 +383,6 @@
|
||||||
"HeaderRemoteControl": "Remote Control",
|
"HeaderRemoteControl": "Remote Control",
|
||||||
"Disconnect": "Disconnect",
|
"Disconnect": "Disconnect",
|
||||||
"EnableDisplayMirroring": "Enable display mirroring",
|
"EnableDisplayMirroring": "Enable display mirroring",
|
||||||
"HeaderSelectPlayer": "Select Player"
|
"HeaderSelectPlayer": "Select Player",
|
||||||
|
"Quality": "Quality"
|
||||||
}
|
}
|
Loading…
Add table
Add a link
Reference in a new issue