deuglify apphost.js

This commit is contained in:
vitorsemeano 2019-03-17 21:52:56 +00:00
parent 91ef01cbc0
commit 9967edcb35

View file

@ -1,109 +1,178 @@
define(["appSettings", "browser", "events", "htmlMediaHelper"], function(appSettings, browser, events, htmlMediaHelper) { define(["appSettings", "browser", "events", "htmlMediaHelper"], function (appSettings, browser, events, htmlMediaHelper) {
"use strict"; "use strict";
function getBaseProfileOptions(item) { function getBaseProfileOptions(item) {
var disableHlsVideoAudioCodecs = []; var disableHlsVideoAudioCodecs = [];
return item && htmlMediaHelper.enableHlsJsPlayer(item.RunTimeTicks, item.MediaType) && ((browser.edge || browser.msie) && disableHlsVideoAudioCodecs.push("mp3"), disableHlsVideoAudioCodecs.push("ac3"), disableHlsVideoAudioCodecs.push("eac3"), disableHlsVideoAudioCodecs.push("opus")), {
enableMkvProgressive: !1, if (item && htmlMediaHelper.enableHlsJsPlayer(item.RunTimeTicks, item.MediaType)) {
disableHlsVideoAudioCodecs: disableHlsVideoAudioCodecs if (browser.edge || browser.msie) {
disableHlsVideoAudioCodecs.push("mp3");
} }
disableHlsVideoAudioCodecs.push("ac3");
disableHlsVideoAudioCodecs.push("eac3");
disableHlsVideoAudioCodecs.push("opus");
}
return {
enableMkvProgressive: false,
disableHlsVideoAudioCodecs: disableHlsVideoAudioCodecs
};
} }
function getDeviceProfileForWindowsUwp(item) { function getDeviceProfileForWindowsUwp(item) {
return new Promise(function(resolve, reject) { return new Promise(function (resolve, reject) {
require(["browserdeviceprofile", "environments/windows-uwp/mediacaps"], function(profileBuilder, uwpMediaCaps) { require(["browserdeviceprofile", "environments/windows-uwp/mediacaps"], function (profileBuilder, uwpMediaCaps) {
var profileOptions = getBaseProfileOptions(item); var profileOptions = getBaseProfileOptions(item);
profileOptions.supportsDts = uwpMediaCaps.supportsDTS(), profileOptions.supportsTrueHd = uwpMediaCaps.supportsDolby(), profileOptions.audioChannels = uwpMediaCaps.getAudioChannels(), resolve(profileBuilder(profileOptions)) profileOptions.supportsDts = uwpMediaCaps.supportsDTS();
}) profileOptions.supportsTrueHd = uwpMediaCaps.supportsDolby();
}) profileOptions.audioChannels = uwpMediaCaps.getAudioChannels();
resolve(profileBuilder(profileOptions));
});
});
} }
function getDeviceProfile(item, options) { function getDeviceProfile(item, options) {
return options = options || {}, self.Windows ? getDeviceProfileForWindowsUwp(item) : new Promise(function(resolve, reject) { options = options || {};
require(["browserdeviceprofile"], function(profileBuilder) {
if (self.Windows) {
return getDeviceProfileForWindowsUwp(item);
}
return new Promise(function (resolve, reject) {
require(["browserdeviceprofile"], function (profileBuilder) {
var profile = profileBuilder(getBaseProfileOptions(item)); var profile = profileBuilder(getBaseProfileOptions(item));
item && !options.isRetry && "allcomplexformats" !== appSettings.get("subtitleburnin") && (browser.orsay || browser.tizen || (profile.SubtitleProfiles.push({
if (item && !options.isRetry && "allcomplexformats" !== appSettings.get("subtitleburnin")) {
if (!(browser.orsay || browser.tizen)) {
profile.SubtitleProfiles.push({
Format: "ass", Format: "ass",
Method: "External" Method: "External"
}), profile.SubtitleProfiles.push({ });
profile.SubtitleProfiles.push({
Format: "ssa", Format: "ssa",
Method: "External" Method: "External"
}))), resolve(profile) });
}) }
}) }
resolve(profile);
});
});
} }
function escapeRegExp(str) { function escapeRegExp(str) {
return str.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1") return str.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1");
} }
function replaceAll(originalString, strReplace, strWith) { function replaceAll(originalString, strReplace, strWith) {
var strReplace2 = escapeRegExp(strReplace), var strReplace2 = escapeRegExp(strReplace);
reg = new RegExp(strReplace2, "ig"); var reg = new RegExp(strReplace2, "ig");
return originalString.replace(reg, strWith) return originalString.replace(reg, strWith);
} }
function generateDeviceId() { function generateDeviceId() {
var keys = []; var keys = [];
if (keys.push(navigator.userAgent), keys.push((new Date).getTime()), self.btoa) {
if (keys.push(navigator.userAgent), keys.push(new Date().getTime()), self.btoa) {
var result = replaceAll(btoa(keys.join("|")), "=", "1"); var result = replaceAll(btoa(keys.join("|")), "=", "1");
return Promise.resolve(result) return Promise.resolve(result);
} }
return Promise.resolve((new Date).getTime())
return Promise.resolve(new Date().getTime());
} }
function getDeviceId() { function getDeviceId() {
var key = "_deviceId2", var key = "_deviceId2";
deviceId = appSettings.get(key); var deviceId = appSettings.get(key);
return deviceId ? Promise.resolve(deviceId) : generateDeviceId().then(function(deviceId) {
return appSettings.set(key, deviceId), deviceId if (deviceId) {
}) return Promise.resolve(deviceId);
}
return generateDeviceId().then(function (deviceId) {
appSettings.set(key, deviceId);
return deviceId;
});
} }
function getDeviceName() { function getDeviceName() {
var deviceName; var deviceName;
return deviceName = browser.tizen ? "Samsung Smart TV" : browser.web0s ? "LG Smart TV" : browser.operaTv ? "Opera TV" : browser.xboxOne ? "Xbox One" : browser.ps4 ? "Sony PS4" : browser.chrome ? "Chrome" : browser.edge ? "Edge" : browser.firefox ? "Firefox" : browser.msie ? "Internet Explorer" : browser.opera ? "Opera" : "Web Browser", browser.ipad ? deviceName += " Ipad" : browser.iphone ? deviceName += " Iphone" : browser.android && (deviceName += " Android"), deviceName deviceName = browser.tizen ? "Samsung Smart TV" : browser.web0s ? "LG Smart TV" : browser.operaTv ? "Opera TV" : browser.xboxOne ? "Xbox One" : browser.ps4 ? "Sony PS4" : browser.chrome ? "Chrome" : browser.edge ? "Edge" : browser.firefox ? "Firefox" : browser.msie ? "Internet Explorer" : browser.opera ? "Opera" : "Web Browser";
if (browser.ipad) {
deviceName += " Ipad";
} else {
if (browser.iphone) {
deviceName += " Iphone";
} else {
if (browser.android) {
deviceName += " Android";
}
}
}
return deviceName;
} }
function supportsVoiceInput() { function supportsVoiceInput() {
return !browser.tv && (window.SpeechRecognition || window.webkitSpeechRecognition || window.mozSpeechRecognition || window.oSpeechRecognition || window.msSpeechRecognition) if (!browser.tv) {
return window.SpeechRecognition || window.webkitSpeechRecognition || window.mozSpeechRecognition || window.oSpeechRecognition || window.msSpeechRecognition;
}
return false;
} }
function supportsFullscreen() { function supportsFullscreen() {
if (browser.tv) return !1; if (browser.tv) {
return false;
}
var element = document.documentElement; var element = document.documentElement;
return !!(element.requestFullscreen || element.mozRequestFullScreen || element.webkitRequestFullscreen || element.msRequestFullscreen) || !!document.createElement("video").webkitEnterFullscreen return !!(element.requestFullscreen || element.mozRequestFullScreen || element.webkitRequestFullscreen || element.msRequestFullscreen) || !!document.createElement("video").webkitEnterFullscreen;
} }
function getSyncProfile() { function getSyncProfile() {
return new Promise(function(resolve, reject) { return new Promise(function (resolve, reject) {
require(["browserdeviceprofile", "appSettings"], function(profileBuilder, appSettings) { require(["browserdeviceprofile", "appSettings"], function (profileBuilder, appSettings) {
var profile = profileBuilder(); var profile = profileBuilder();
profile.MaxStaticMusicBitrate = appSettings.maxStaticMusicBitrate(), resolve(profile) profile.MaxStaticMusicBitrate = appSettings.maxStaticMusicBitrate();
}) resolve(profile);
}) });
});
} }
function getDefaultLayout() { function getDefaultLayout() {
return "desktop" return "desktop";
} }
function supportsHtmlMediaAutoplay() { function supportsHtmlMediaAutoplay() {
if (browser.edgeUwp || browser.tizen || browser.web0s || browser.orsay || browser.operaTv || browser.ps4 || browser.xboxOne) return !0; if (browser.edgeUwp || browser.tizen || browser.web0s || browser.orsay || browser.operaTv || browser.ps4 || browser.xboxOne) {
if (browser.mobile) return !1; return true;
}
if (browser.mobile) {
return false;
}
var savedResult = appSettings.get(htmlMediaAutoplayAppStorageKey); var savedResult = appSettings.get(htmlMediaAutoplayAppStorageKey);
return "true" === savedResult || "false" !== savedResult && null return "true" === savedResult || "false" !== savedResult && null;
} }
function cueSupported() { function cueSupported() {
try { try {
var video = document.createElement("video"), var video = document.createElement("video");
style = document.createElement("style"); var style = document.createElement("style");
style.textContent = "video::cue {background: inherit}", document.body.appendChild(style), document.body.appendChild(video); style.textContent = "video::cue {background: inherit}";
document.body.appendChild(style);
document.body.appendChild(video);
var cue = window.getComputedStyle(video, "::cue").background; var cue = window.getComputedStyle(video, "::cue").background;
return document.body.removeChild(style), document.body.removeChild(video), !!cue.length document.body.removeChild(style);
document.body.removeChild(video);
return !!cue.length;
} catch (err) { } catch (err) {
return console.log("Error detecting cue support:" + err), !1 console.log("Error detecting cue support:" + err);
return false;
} }
} }
@ -123,41 +192,104 @@ define(["appSettings", "browser", "events", "htmlMediaHelper"], function(appSett
} }
var htmlMediaAutoplayAppStorageKey = "supportshtmlmediaautoplay0"; var htmlMediaAutoplayAppStorageKey = "supportshtmlmediaautoplay0";
var supportedFeatures = function() {
var supportedFeatures = function () {
var features = []; var features = [];
navigator.share && features.push("sharing");
browser.edgeUwp || browser.tv || browser.xboxOne || browser.ps4 || features.push("filedownload"); if (navigator.share) {
browser.operaTv || browser.tizen || browser.orsay || browser.web0s features.push("sharing");
? features.push("exit") }
: (features.push("exitmenu"), features.push("plugins"));
browser.operaTv || browser.tizen || browser.orsay || browser.web0s || browser.ps4 || (features.push("externallinks"), features.push("externalpremium")); if (!(browser.edgeUwp || browser.tv || browser.xboxOne || browser.ps4)) {
browser.operaTv || features.push("externallinkdisplay"); features.push("filedownload");
supportsVoiceInput() && features.push("voiceinput"); }
!browser.tv && !browser.xboxOne && browser.ps4, supportsHtmlMediaAutoplay() && (features.push("htmlaudioautoplay"), features.push("htmlvideoautoplay"));
browser.edgeUwp && features.push("sync"); if (browser.operaTv || browser.tizen || browser.orsay || browser.web0s) {
supportsFullscreen() && features.push("fullscreenchange"); features.push("exit");
(browser.chrome || browser.edge && !browser.slow) && (browser.noAnimation || browser.edgeUwp || browser.xboxOne || features.push("imageanalysis")); } else {
(browser.tv || browser.xboxOne || browser.ps4 || browser.mobile) && features.push("physicalvolumecontrol"); features.push("exitmenu");
browser.tv || browser.xboxOne || browser.ps4 || features.push("remotecontrol"); features.push("plugins");
browser.operaTv || browser.tizen || browser.orsay || browser.web0s || browser.edgeUwp || features.push("remotevideo"); }
if (!(browser.operaTv || browser.tizen || browser.orsay || browser.web0s || browser.ps4)) {
features.push("externallinks");
features.push("externalpremium");
}
if (!browser.operaTv) {
features.push("externallinkdisplay");
}
if (supportsVoiceInput()) {
features.push("voiceinput");
}
if (!browser.tv && !browser.xboxOne) {
browser.ps4;
}
if (supportsHtmlMediaAutoplay()) {
features.push("htmlaudioautoplay");
features.push("htmlvideoautoplay");
}
if (browser.edgeUwp) {
features.push("sync");
}
if (supportsFullscreen()) {
features.push("fullscreenchange");
}
if (browser.chrome || browser.edge && !browser.slow) {
if (!(browser.noAnimation || browser.edgeUwp || browser.xboxOne)) {
features.push("imageanalysis");
}
}
if (browser.tv || browser.xboxOne || browser.ps4 || browser.mobile) {
features.push("physicalvolumecontrol");
}
if (!(browser.tv || browser.xboxOne || browser.ps4)) {
features.push("remotecontrol");
}
if (!(browser.operaTv || browser.tizen || browser.orsay || browser.web0s || browser.edgeUwp)) {
features.push("remotevideo");
}
features.push("displaylanguage"); features.push("displaylanguage");
features.push("otherapppromotions"); features.push("otherapppromotions");
features.push("targetblank"); features.push("targetblank"); // allows users to connect to more than one server
// allows users to connect to more than one server
//features.push("multiserver"); //features.push("multiserver");
browser.orsay || browser.tizen || browser.msie || !(browser.firefox || browser.ps4 || browser.edge || cueSupported()) || features.push("subtitleappearancesettings");
browser.orsay || browser.tizen || features.push("subtitleburnsettings"); if (!(browser.orsay || browser.tizen || browser.msie || !(browser.firefox || browser.ps4 || browser.edge || cueSupported()))) {
browser.tv || browser.ps4 || browser.xboxOne || features.push("fileinput"); features.push("subtitleappearancesettings");
browser.chrome && features.push("chromecast"); }
if (!(browser.orsay || browser.tizen)) {
features.push("subtitleburnsettings");
}
if (!(browser.tv || browser.ps4 || browser.xboxOne)) {
features.push("fileinput");
}
if (browser.chrome) {
features.push("chromecast");
}
return features; return features;
}(); }();
if (supportedFeatures.indexOf("htmlvideoautoplay") === -1 && supportsHtmlMediaAutoplay() !== false) { if (supportedFeatures.indexOf("htmlvideoautoplay") === -1 && supportsHtmlMediaAutoplay() !== false) {
require(["autoPlayDetect"], function(autoPlayDetect) { require(["autoPlayDetect"], function (autoPlayDetect) {
autoPlayDetect.supportsHtmlMediaAutoplay().then(function() { autoPlayDetect.supportsHtmlMediaAutoplay().then(function () {
appSettings.set(htmlMediaAutoplayAppStorageKey, "true"); appSettings.set(htmlMediaAutoplayAppStorageKey, "true");
supportedFeatures.push("htmlvideoautoplay"); supportedFeatures.push("htmlvideoautoplay");
supportedFeatures.push("htmlaudioautoplay"); supportedFeatures.push("htmlaudioautoplay");
}, function() { }, function () {
appSettings.set(htmlMediaAutoplayAppStorageKey, "false"); appSettings.set(htmlMediaAutoplayAppStorageKey, "false");
}); });
}); });
@ -169,73 +301,155 @@ define(["appSettings", "browser", "events", "htmlMediaHelper"], function(appSett
var visibilityState; var visibilityState;
var appVersion = window.dashboardVersion || "3.0"; var appVersion = window.dashboardVersion || "3.0";
var appHost = { var appHost = {
getWindowState: function() { getWindowState: function () {
return document.windowState || "Normal" return document.windowState || "Normal";
}, },
setWindowState: function(state) { setWindowState: function (state) {
alert("setWindowState is not supported and should not be called") alert("setWindowState is not supported and should not be called");
}, },
exit: function() { exit: function () {
if (browser.tizen) try { if (browser.tizen) {
tizen.application.getCurrentApplication().exit() try {
tizen.application.getCurrentApplication().exit();
} catch (err) { } catch (err) {
console.log("error closing application: " + err) console.log("error closing application: " + err);
} else window.close() }
} else {
window.close();
}
}, },
supports: function(command) { supports: function (command) {
return -1 !== supportedFeatures.indexOf(command.toLowerCase()) return -1 !== supportedFeatures.indexOf(command.toLowerCase());
}, },
preferVisualCards: browser.android || browser.chrome, preferVisualCards: browser.android || browser.chrome,
moreIcon: browser.android ? "dots-vert" : "dots-horiz", moreIcon: browser.android ? "dots-vert" : "dots-horiz",
getSyncProfile: getSyncProfile, getSyncProfile: getSyncProfile,
getDefaultLayout: getDefaultLayout, getDefaultLayout: getDefaultLayout,
getDeviceProfile: getDeviceProfile, getDeviceProfile: getDeviceProfile,
init: function() { init: function () {
return deviceName = getDeviceName(), getDeviceId().then(function(resolvedDeviceId) { deviceName = getDeviceName();
deviceId = resolvedDeviceId return getDeviceId().then(function (resolvedDeviceId) {
}) deviceId = resolvedDeviceId;
});
}, },
deviceName: function() { deviceName: function () {
return deviceName return deviceName;
}, },
deviceId: function() { deviceId: function () {
return deviceId return deviceId;
}, },
appName: function() { appName: function () {
return "Jellyfin Web" return "Jellyfin Web";
}, },
appVersion: function() { appVersion: function () {
return appVersion return appVersion;
}, },
getPushTokenInfo: function() { getPushTokenInfo: function () {
return {} return {};
}, },
setThemeColor: function(color) { setThemeColor: function (color) {
var metaThemeColor = document.querySelector("meta[name=theme-color]"); var metaThemeColor = document.querySelector("meta[name=theme-color]");
metaThemeColor && metaThemeColor.setAttribute("content", color)
if (metaThemeColor) {
metaThemeColor.setAttribute("content", color);
}
}, },
setUserScalable: function(scalable) { setUserScalable: function (scalable) {
if (!browser.tv) { if (!browser.tv) {
var att = scalable ? "width=device-width, initial-scale=1, minimum-scale=1, user-scalable=yes" : "width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no"; var att = scalable ? "width=device-width, initial-scale=1, minimum-scale=1, user-scalable=yes" : "width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no";
document.querySelector("meta[name=viewport]").setAttribute("content", att) document.querySelector("meta[name=viewport]").setAttribute("content", att);
} }
}, },
deviceIconUrl: function() { deviceIconUrl: function () {
return browser.edgeUwp, browser.edgeUwp ? "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/windowsrt.png" : browser.opera || browser.operaTv ? "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/opera.png" : browser.orsay || browser.tizen ? "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/samsungtv.png" : browser.web0s ? "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/lgtv.png" : browser.ps4 ? "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/ps4.png" : browser.chromecast ? "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/chromecast.png" : browser.chrome ? "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/chrome.png" : browser.edge ? "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/edge.png" : browser.firefox ? "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/firefox.png" : browser.msie ? "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/internetexplorer.png" : browser.safari ? "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/safari.png" : "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/html5.png" browser.edgeUwp;
if (browser.edgeUwp) {
return "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/windowsrt.png";
}
if (browser.opera || browser.operaTv) {
return "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/opera.png";
}
if (browser.orsay || browser.tizen) {
return "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/samsungtv.png";
}
if (browser.web0s) {
return "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/lgtv.png";
}
if (browser.ps4) {
return "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/ps4.png";
}
if (browser.chromecast) {
return "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/chromecast.png";
}
if (browser.chrome) {
return "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/chrome.png";
}
if (browser.edge) {
return "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/edge.png";
}
if (browser.firefox) {
return "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/firefox.png";
}
if (browser.msie) {
return "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/internetexplorer.png";
}
if (browser.safari) {
return "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/safari.png";
}
return "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/html5.png";
} }
}; };
var doc = self.document; var doc = self.document;
doc && (void 0 !== doc.visibilityState ? (visibilityChange = "visibilitychange", visibilityState = "hidden") : void 0 !== doc.mozHidden ? (visibilityChange = "mozvisibilitychange", visibilityState = "mozVisibilityState") : void 0 !== doc.msHidden ? (visibilityChange = "msvisibilitychange", visibilityState = "msVisibilityState") : void 0 !== doc.webkitHidden && (visibilityChange = "webkitvisibilitychange", visibilityState = "webkitVisibilityState"));
var isHidden = false;
if (doc) { if (doc) {
doc.addEventListener(visibilityChange, function() { if (void 0 !== doc.visibilityState) {
document[visibilityState] ? onAppHidden() : onAppVisible() visibilityChange = "visibilitychange";
visibilityState = "hidden";
} else {
if (void 0 !== doc.mozHidden) {
visibilityChange = "mozvisibilitychange";
visibilityState = "mozVisibilityState";
} else {
if (void 0 !== doc.msHidden) {
visibilityChange = "msvisibilitychange";
visibilityState = "msVisibilityState";
} else {
if (void 0 !== doc.webkitHidden) {
visibilityChange = "webkitvisibilitychange";
visibilityState = "webkitVisibilityState";
}
}
}
}
}
var isHidden = false;
if (doc) {
doc.addEventListener(visibilityChange, function () {
if (document[visibilityState]) {
onAppHidden();
} else {
onAppVisible();
}
}); });
} }
if (self.addEventListener) { if (self.addEventListener) {
self.addEventListener("focus", onAppVisible); self.addEventListener("focus", onAppVisible);
self.addEventListener("blur", onAppHidden); self.addEventListener("blur", onAppHidden);
} }
return appHost; return appHost;
}); });