Merge branch 'master' into fix-another-usersettings

This commit is contained in:
Dmitry Lyzo 2020-06-05 09:02:14 +03:00 committed by GitHub
commit c4614f085e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
109 changed files with 4670 additions and 3143 deletions

View file

@ -14,10 +14,6 @@ define([], function () {
return true;
}
if (userAgent.indexOf('nintendo') !== -1) {
return true;
}
if (userAgent.indexOf('viera') !== -1) {
return true;
}
@ -93,7 +89,7 @@ define([], function () {
var _supportsCssAnimation;
var _supportsCssAnimationWithPrefix;
function supportsCssAnimation(allowPrefix) {
// TODO: Assess if this is still needed, as all of our targets should natively support CSS animations.
if (allowPrefix) {
if (_supportsCssAnimationWithPrefix === true || _supportsCssAnimationWithPrefix === false) {
return _supportsCssAnimationWithPrefix;
@ -145,7 +141,6 @@ define([], function () {
/(chrome)[ \/]([\w.]+)/.exec(ua) ||
/(safari)[ \/]([\w.]+)/.exec(ua) ||
/(firefox)[ \/]([\w.]+)/.exec(ua) ||
/(msie) ([\w.]+)/.exec(ua) ||
ua.indexOf('compatible') < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
[];
@ -161,14 +156,6 @@ define([], function () {
if (browser === 'edge') {
platform_match = [''];
} else {
if (ua.indexOf('windows phone') !== -1 || ua.indexOf('iemobile') !== -1) {
// http://www.neowin.net/news/ie11-fakes-user-agent-to-fool-gmail-in-windows-phone-81-gdr1-update
browser = 'msie';
} else if (ua.indexOf('like gecko') !== -1 && ua.indexOf('webkit') === -1 && ua.indexOf('opera') === -1 && ua.indexOf('chrome') === -1 && ua.indexOf('safari') === -1) {
browser = 'msie';
}
}
if (browser === 'opr') {
@ -211,7 +198,7 @@ define([], function () {
browser[matched.platform] = true;
}
if (!browser.chrome && !browser.msie && !browser.edge && !browser.opera && userAgent.toLowerCase().indexOf('webkit') !== -1) {
if (!browser.chrome && !browser.edge && !browser.opera && userAgent.toLowerCase().indexOf('webkit') !== -1) {
browser.safari = true;
}
@ -224,7 +211,10 @@ define([], function () {
browser.mobile = true;
}
browser.xboxOne = userAgent.toLowerCase().indexOf('xbox') !== -1;
if (userAgent.toLowerCase().indexOf('xbox') !== -1) {
browser.xboxOne = true;
browser.tv = true;
}
browser.animate = typeof document !== 'undefined' && document.documentElement.animate != null;
browser.tizen = userAgent.toLowerCase().indexOf('tizen') !== -1 || self.tizen != null;
browser.web0s = userAgent.toLowerCase().indexOf('Web0S'.toLowerCase()) !== -1;

View file

@ -188,20 +188,6 @@ define(['browser'], function (browser) {
return browser.tizen || browser.orsay || browser.web0s || browser.edgeUwp;
}
function getFlvMseDirectPlayProfile() {
var videoAudioCodecs = ['aac'];
if (!browser.edge && !browser.msie) {
videoAudioCodecs.push('mp3');
}
return {
Container: 'flv',
Type: 'Video',
VideoCodec: 'h264',
AudioCodec: videoAudioCodecs.join(',')
};
}
function getDirectPlayProfileForVideoContainer(container, videoAudioCodecs, videoTestElement, options) {
var supported = false;
var profileContainer = container;
@ -230,9 +216,6 @@ define(['browser'], function (browser) {
break;
case 'flv':
supported = browser.tizen || browser.orsay;
//if (!supported && window.MediaSource != null && window.MediaSource.isTypeSupported('video/mp4; codecs="avc1.42E01E,mp4a.40.2"')) {
// return getFlvMseDirectPlayProfile();
//}
break;
case '3gp':
case 'mts':

View file

@ -209,7 +209,7 @@ define(['datetime', 'jQuery', 'globalize', 'material-icons'], function (datetime
function onNodeOpen(event, data) {
var page = $(this).parents('.page')[0];
var node = data.node;
if (node.children && node.children) {
if (node.children) {
loadNodesToLoad(page, node);
}
if (node.li_attr && node.id != '#' && !node.li_attr.loadedFromServer) {
@ -221,7 +221,7 @@ define(['datetime', 'jQuery', 'globalize', 'material-icons'], function (datetime
function onNodeLoad(event, data) {
var page = $(this).parents('.page')[0];
var node = data.node;
if (node.children && node.children) {
if (node.children) {
loadNodesToLoad(page, node);
}
if (node.li_attr && node.id != '#' && !node.li_attr.loadedFromServer) {

View file

@ -602,27 +602,25 @@ define(['dom', 'layoutManager', 'inputManager', 'connectionManager', 'events', '
if (libraryMenuOptions) {
getUserViews(apiClient, userId).then(function (result) {
var items = result;
var html = '';
html += '<h3 class="sidebarHeader">';
html += globalize.translate('HeaderMedia');
html += '</h3>';
var html = `<h3 class="sidebarHeader">${globalize.translate('HeaderMedia')}</h3>`;
html += items.map(function (i) {
var icon = i.icon || imageHelper.getLibraryIcon(i.CollectionType);
var itemId = i.Id;
if (i.onclick) {
i.onclick;
}
const linkHtml = `<a is="emby-linkbutton" data-itemid="${itemId}" class="lnkMediaFolder navMenuOption" href="${getItemHref(i, i.CollectionType)}">
<span class="material-icons navMenuOptionIcon ${icon}"></span>
<span class="sectionName navMenuOptionText">${i.Name}</span>
</a>`;
return '<a is="emby-linkbutton" data-itemid="' + itemId + '" class="lnkMediaFolder navMenuOption" href="' + getItemHref(i, i.CollectionType) + '"><span class="material-icons navMenuOptionIcon ' + icon + '"></span><span class="sectionName navMenuOptionText">' + i.Name + '</span></a>';
return linkHtml;
}).join('');
libraryMenuOptions.innerHTML = html;
var elem = libraryMenuOptions;
var sidebarLinks = elem.querySelectorAll('.navMenuOption');
for (var i = 0, length = sidebarLinks.length; i < length; i++) {
sidebarLinks[i].removeEventListener('click', onSidebarLinkClick);
sidebarLinks[i].addEventListener('click', onSidebarLinkClick);
for (const sidebarLink of sidebarLinks) {
sidebarLink.removeEventListener('click', onSidebarLinkClick);
sidebarLink.addEventListener('click', onSidebarLinkClick);
}
});
}
@ -936,6 +934,7 @@ define(['dom', 'layoutManager', 'inputManager', 'connectionManager', 'events', '
updateMenuForPageType(isDashboardPage, isLibraryPage);
// TODO: Seems to do nothing? Check if needed (also in other views).
if (!e.detail.isRestored) {
window.scrollTo(0, 0);
}

View file

@ -69,10 +69,11 @@ define(['loading', 'listView', 'cardBuilder', 'libraryMenu', 'libraryBrowser', '
showLoadingMessage();
var query = getQuery(view);
var promise1 = ApiClient.getItems(Dashboard.getCurrentUserId(), query);
// TODO: promise2 is unused, check if necessary.
var promise2 = Dashboard.getCurrentUser();
Promise.all([promise1, promise2]).then(function (responses) {
var result = responses[0];
responses[1];
// TODO: Is the scroll necessary?
window.scrollTo(0, 0);
var html = '';
var viewStyle = getPageData(view).view;

View file

@ -180,6 +180,20 @@ export class UserSettings {
return val !== 'false';
}
/**
* Get or set 'Blurhash' state.
* @param {boolean|undefined} val - Flag to enable 'Blurhash' or undefined.
* @return {boolean} 'Blurhash' state.
*/
enableBlurhash(val) {
if (val !== undefined) {
return this.set('blurhash', val.toString(), false);
}
val = this.get('blurhash', false);
return val !== 'false';
}
/**
* Get or set 'Backdrops' state.
* @param {boolean|undefined} val - Flag to enable 'Backdrops' or undefined.
@ -444,6 +458,7 @@ export const enableNextVideoInfoOverlay = currentSettings.enableNextVideoInfoOve
export const enableThemeSongs = currentSettings.enableThemeSongs.bind(currentSettings);
export const enableThemeVideos = currentSettings.enableThemeVideos.bind(currentSettings);
export const enableFastFadein = currentSettings.enableFastFadein.bind(currentSettings);
export const enableBlurhash = currentSettings.enableBlurhash.bind(currentSettings);
export const enableBackdrops = currentSettings.enableBackdrops.bind(currentSettings);
export const detailsBanner = currentSettings.detailsBanner.bind(currentSettings);
export const language = currentSettings.language.bind(currentSettings);

View file

@ -375,8 +375,7 @@ var AppInfo = {};
}
}
function initRequireWithBrowser(browser) {
var bowerPath = getBowerPath();
function initRequireWithBrowser() {
var componentsPath = getComponentsPath();
var scriptsPath = getScriptsPath();
@ -385,13 +384,7 @@ var AppInfo = {};
define('lazyLoader', [componentsPath + '/lazyLoader/lazyLoaderIntersectionObserver'], returnFirstDependency);
define('shell', [scriptsPath + '/shell'], returnFirstDependency);
if ('registerElement' in document) {
define('registerElement', []);
} else if (browser.msie) {
define('registerElement', ['webcomponents'], returnFirstDependency);
} else {
define('registerElement', ['document-register-element'], returnFirstDependency);
}
define('registerElement', ['document-register-element'], returnFirstDependency);
define('alert', [componentsPath + '/alert'], returnFirstDependency);
@ -486,21 +479,22 @@ var AppInfo = {};
function loadPlugins(appHost, browser, shell) {
console.debug('loading installed plugins');
var list = [
'components/playback/playaccessvalidation',
'components/playback/experimentalwarnings',
'components/htmlAudioPlayer/plugin',
'components/htmlVideoPlayer/plugin',
'components/photoPlayer/plugin',
'components/youtubeplayer/plugin',
'components/backdropScreensaver/plugin',
'components/logoScreensaver/plugin'
'plugins/playAccessValidation/plugin',
'plugins/experimentalWarnings/plugin',
'plugins/htmlAudioPlayer/plugin',
'plugins/htmlVideoPlayer/plugin',
'plugins/photoPlayer/plugin',
'plugins/bookPlayer/plugin',
'plugins/youtubePlayer/plugin',
'plugins/backdropScreensaver/plugin',
'plugins/logoScreensaver/plugin'
];
if (appHost.supports('remotecontrol')) {
list.push('components/sessionPlayer');
list.push('plugins/sessionPlayer/plugin');
if (browser.chrome || browser.opera) {
list.push('components/chromecast/chromecastplayer');
list.push('plugins/chromecastPlayer/plugin');
}
}
@ -561,6 +555,7 @@ var AppInfo = {};
require(['components/playback/volumeosd']);
}
/* eslint-disable-next-line compat/compat */
if (navigator.mediaSession || window.NativeShell) {
require(['mediaSession']);
}
@ -616,8 +611,8 @@ var AppInfo = {};
/* eslint-enable compat/compat */
}
function onWebComponentsReady(browser) {
initRequireWithBrowser(browser);
function onWebComponentsReady() {
initRequireWithBrowser();
if (self.appMode === 'cordova' || self.appMode === 'android' || self.appMode === 'standalone') {
AppInfo.isNativeApp = true;
@ -659,7 +654,8 @@ var AppInfo = {};
nowPlayingHelper: componentsPath + '/playback/nowplayinghelper',
pluginManager: componentsPath + '/pluginManager',
packageManager: componentsPath + '/packagemanager',
screensaverManager: componentsPath + '/screensavermanager'
screensaverManager: componentsPath + '/screensavermanager',
chromecastHelper: 'plugins/chromecastPlayer/chromecastHelpers'
};
requirejs.onError = onRequireJsError;
@ -677,6 +673,7 @@ var AppInfo = {};
'fetch',
'flvjs',
'jstree',
'epubjs',
'jQuery',
'hlsjs',
'howler',
@ -778,7 +775,6 @@ var AppInfo = {};
define('appSettings', [scriptsPath + '/settings/appSettings'], returnFirstDependency);
define('userSettings', [scriptsPath + '/settings/userSettings'], returnFirstDependency);
define('chromecastHelper', [componentsPath + '/chromecast/chromecasthelpers'], returnFirstDependency);
define('mediaSession', [componentsPath + '/playback/mediasession'], returnFirstDependency);
define('actionsheet', [componentsPath + '/actionSheet/actionSheet'], returnFirstDependency);
define('tunerPicker', [componentsPath + '/tunerPicker'], returnFirstDependency);
@ -1137,7 +1133,7 @@ var AppInfo = {};
});
})();
return require(['browser'], onWebComponentsReady);
return onWebComponentsReady();
}();
pageClassOn('viewshow', 'standalonePage', function () {