2018-10-23 01:05:09 +03:00
|
|
|
define(["connectionManager", "actionsheet", "datetime", "playbackManager", "globalize", "appSettings", "qualityoptions"], function(connectionManager, actionsheet, datetime, playbackManager, globalize, appSettings, qualityoptions) {
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
function showQualityMenu(player, btn) {
|
|
|
|
var videoStream = playbackManager.currentMediaSource(player).MediaStreams.filter(function(stream) {
|
|
|
|
return "Video" === stream.Type
|
|
|
|
})[0],
|
|
|
|
videoWidth = videoStream ? videoStream.Width : null,
|
|
|
|
options = qualityoptions.getVideoQualityOptions({
|
|
|
|
currentMaxBitrate: playbackManager.getMaxStreamingBitrate(player),
|
|
|
|
isAutomaticBitrateEnabled: playbackManager.enableAutomaticBitrateDetection(player),
|
|
|
|
videoWidth: videoWidth,
|
|
|
|
enableAuto: !0
|
|
|
|
}),
|
|
|
|
menuItems = options.map(function(o) {
|
|
|
|
var opt = {
|
|
|
|
name: o.name,
|
|
|
|
id: o.bitrate,
|
|
|
|
asideText: o.secondaryText
|
|
|
|
};
|
|
|
|
return o.selected && (opt.selected = !0), opt
|
|
|
|
}),
|
|
|
|
selectedId = options.filter(function(o) {
|
|
|
|
return o.selected
|
|
|
|
});
|
|
|
|
return selectedId = selectedId.length ? selectedId[0].bitrate : null, actionsheet.show({
|
|
|
|
items: menuItems,
|
|
|
|
positionTo: btn
|
|
|
|
}).then(function(id) {
|
|
|
|
var bitrate = parseInt(id);
|
|
|
|
bitrate !== selectedId && playbackManager.setMaxStreamingBitrate({
|
|
|
|
enableAutomaticBitrateDetection: !bitrate,
|
|
|
|
maxBitrate: bitrate
|
|
|
|
}, player)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
function showRepeatModeMenu(player, btn) {
|
|
|
|
var menuItems = [],
|
|
|
|
currentValue = playbackManager.getRepeatMode(player);
|
|
|
|
return menuItems.push({
|
|
|
|
name: globalize.translate("sharedcomponents#RepeatAll"),
|
|
|
|
id: "RepeatAll",
|
|
|
|
selected: "RepeatAll" === currentValue
|
|
|
|
}), menuItems.push({
|
|
|
|
name: globalize.translate("sharedcomponents#RepeatOne"),
|
|
|
|
id: "RepeatOne",
|
|
|
|
selected: "RepeatOne" === currentValue
|
|
|
|
}), menuItems.push({
|
|
|
|
name: globalize.translate("sharedcomponents#None"),
|
|
|
|
id: "RepeatNone",
|
|
|
|
selected: "RepeatNone" === currentValue
|
|
|
|
}), actionsheet.show({
|
|
|
|
items: menuItems,
|
|
|
|
positionTo: btn
|
|
|
|
}).then(function(mode) {
|
|
|
|
mode && playbackManager.setRepeatMode(mode, player)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
function getQualitySecondaryText(player) {
|
|
|
|
var state = playbackManager.getPlayerState(player),
|
|
|
|
videoStream = (playbackManager.enableAutomaticBitrateDetection(player), playbackManager.getMaxStreamingBitrate(player), playbackManager.currentMediaSource(player).MediaStreams.filter(function(stream) {
|
|
|
|
return "Video" === stream.Type
|
|
|
|
})[0]),
|
|
|
|
videoWidth = videoStream ? videoStream.Width : null,
|
|
|
|
options = qualityoptions.getVideoQualityOptions({
|
|
|
|
currentMaxBitrate: playbackManager.getMaxStreamingBitrate(player),
|
|
|
|
isAutomaticBitrateEnabled: playbackManager.enableAutomaticBitrateDetection(player),
|
|
|
|
videoWidth: videoWidth,
|
|
|
|
enableAuto: !0
|
|
|
|
}),
|
|
|
|
selectedOption = (options.map(function(o) {
|
|
|
|
var opt = {
|
|
|
|
name: o.name,
|
|
|
|
id: o.bitrate,
|
|
|
|
asideText: o.secondaryText
|
|
|
|
};
|
|
|
|
return o.selected && (opt.selected = !0), opt
|
|
|
|
}), options.filter(function(o) {
|
|
|
|
return o.selected
|
|
|
|
}));
|
|
|
|
if (!selectedOption.length) return null;
|
|
|
|
selectedOption = selectedOption[0];
|
|
|
|
var text = selectedOption.name;
|
|
|
|
return selectedOption.autoText && (state.PlayState && "Transcode" !== state.PlayState.PlayMethod ? text += " - Direct" : text += " " + selectedOption.autoText), text
|
|
|
|
}
|
|
|
|
|
|
|
|
function showAspectRatioMenu(player, btn) {
|
|
|
|
var currentId = playbackManager.getAspectRatio(player),
|
|
|
|
menuItems = playbackManager.getSupportedAspectRatios(player).map(function(i) {
|
|
|
|
return {
|
|
|
|
id: i.id,
|
|
|
|
name: i.name,
|
|
|
|
selected: i.id === currentId
|
|
|
|
}
|
|
|
|
});
|
|
|
|
return actionsheet.show({
|
|
|
|
items: menuItems,
|
|
|
|
positionTo: btn
|
|
|
|
}).then(function(id) {
|
|
|
|
return id ? (playbackManager.setAspectRatio(id, player), Promise.resolve()) : Promise.reject()
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
function showWithUser(options, player, user) {
|
|
|
|
var supportedCommands = playbackManager.getSupportedCommands(player),
|
|
|
|
menuItems = (options.mediaType, []);
|
|
|
|
if (-1 !== supportedCommands.indexOf("SetAspectRatio")) {
|
|
|
|
var currentAspectRatioId = playbackManager.getAspectRatio(player),
|
|
|
|
currentAspectRatio = playbackManager.getSupportedAspectRatios(player).filter(function(i) {
|
|
|
|
return i.id === currentAspectRatioId
|
|
|
|
})[0];
|
|
|
|
menuItems.push({
|
|
|
|
name: globalize.translate("sharedcomponents#AspectRatio"),
|
|
|
|
id: "aspectratio",
|
|
|
|
asideText: currentAspectRatio ? currentAspectRatio.name : null
|
|
|
|
})
|
|
|
|
}
|
|
|
|
if (menuItems.push({
|
|
|
|
name: globalize.translate("sharedcomponents#PlaybackSettings"),
|
|
|
|
id: "playbacksettings"
|
|
|
|
}), user && user.Policy.EnableVideoPlaybackTranscoding) {
|
|
|
|
var secondaryQualityText = getQualitySecondaryText(player);
|
|
|
|
menuItems.push({
|
|
|
|
name: globalize.translate("sharedcomponents#Quality"),
|
|
|
|
id: "quality",
|
|
|
|
asideText: secondaryQualityText
|
|
|
|
})
|
|
|
|
}
|
|
|
|
var repeatMode = playbackManager.getRepeatMode(player);
|
|
|
|
return -1 !== supportedCommands.indexOf("SetRepeatMode") && playbackManager.currentMediaSource(player).RunTimeTicks && menuItems.push({
|
|
|
|
name: globalize.translate("sharedcomponents#RepeatMode"),
|
|
|
|
id: "repeatmode",
|
|
|
|
asideText: "RepeatNone" === repeatMode ? globalize.translate("sharedcomponents#None") : globalize.translate("sharedcomponents#" + repeatMode)
|
|
|
|
}), options.stats && menuItems.push({
|
|
|
|
name: globalize.translate("sharedcomponents#StatsForNerds"),
|
|
|
|
id: "stats",
|
|
|
|
asideText: null
|
|
|
|
}), menuItems.push({
|
|
|
|
name: globalize.translate("sharedcomponents#SubtitleSettings"),
|
|
|
|
id: "subtitlesettings"
|
|
|
|
}), actionsheet.show({
|
|
|
|
items: menuItems,
|
|
|
|
positionTo: options.positionTo
|
|
|
|
}).then(function(id) {
|
|
|
|
return handleSelectedOption(id, options, player)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
function show(options) {
|
|
|
|
var player = options.player,
|
|
|
|
currentItem = playbackManager.currentItem(player);
|
|
|
|
return currentItem && currentItem.ServerId ? connectionManager.getApiClient(currentItem.ServerId).getCurrentUser().then(function(user) {
|
|
|
|
return showWithUser(options, player, user)
|
|
|
|
}) : showWithUser(options, player, null)
|
|
|
|
}
|
|
|
|
|
|
|
|
function alertText(text) {
|
|
|
|
return new Promise(function(resolve, reject) {
|
|
|
|
require(["alert"], function(alert) {
|
|
|
|
alert(text).then(resolve)
|
|
|
|
})
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
function showSubtitleSettings(player, btn) {
|
|
|
|
return alertText(globalize.translate("sharedcomponents#SubtitleSettingsIntro"))
|
|
|
|
}
|
|
|
|
|
|
|
|
function showPlaybackSettings(player, btn) {
|
|
|
|
return alertText(globalize.translate("sharedcomponents#PlaybackSettingsIntro"))
|
|
|
|
}
|
|
|
|
|
|
|
|
function handleSelectedOption(id, options, player) {
|
|
|
|
switch (id) {
|
|
|
|
case "quality":
|
|
|
|
return showQualityMenu(player, options.positionTo);
|
|
|
|
case "aspectratio":
|
|
|
|
return showAspectRatioMenu(player, options.positionTo);
|
|
|
|
case "repeatmode":
|
|
|
|
return showRepeatModeMenu(player, options.positionTo);
|
|
|
|
case "subtitlesettings":
|
|
|
|
return showSubtitleSettings(player, options.positionTo);
|
|
|
|
case "playbacksettings":
|
|
|
|
return showPlaybackSettings(player, options.positionTo);
|
|
|
|
case "stats":
|
|
|
|
return options.onOption && options.onOption("stats"), Promise.resolve()
|
|
|
|
}
|
|
|
|
return Promise.reject()
|
|
|
|
}
|
|
|
|
return {
|
|
|
|
show: show
|
|
|
|
}
|
|
|
|
});
|