update components

This commit is contained in:
Luke Pulverenti 2017-01-25 01:14:35 -05:00
parent 58cebe2486
commit 93ce8f975b
8 changed files with 232 additions and 82 deletions

View file

@ -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",

View file

@ -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) {

View file

@ -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;
}

View file

@ -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);
} }

View 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
};
});

View 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;
});

View 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
};
});

View file

@ -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"
} }