Merge branch 'master' into migrate-to-ES6-67

This commit is contained in:
Cameron 2020-08-16 12:18:24 +01:00 committed by GitHub
commit d95497cb23
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
203 changed files with 4938 additions and 6191 deletions

View file

@ -1,12 +1,10 @@
(function() {
'use strict';
function injectScriptElement(src, onload) {
if (!src) {
return;
}
var script = document.createElement('script');
const script = document.createElement('script');
if (self.dashboardVersion) {
src += `?v=${self.dashboardVersion}`;
}

View file

@ -3,6 +3,10 @@ import skinManager from 'skinManager';
import connectionManager from 'connectionManager';
import events from 'events';
// Set the default theme when loading
skinManager.setTheme(userSettings.theme());
// Set the user's prefered theme when signing in
events.on(connectionManager, 'localusersignedin', function (e, user) {
skinManager.setTheme(userSettings.theme());
});

View file

@ -24,7 +24,7 @@ import globalize from 'globalize';
// parse strings, leading zeros into proper ints
const a = [1, 2, 3, 4, 5, 6, 10, 11];
for (let i in a) {
for (const i in a) {
d[a[i]] = parseInt(d[a[i]], 10);
}
d[7] = parseFloat(d[7]);

View file

@ -15,7 +15,7 @@ export function deleteItem(options) {
const item = options.item;
const parentId = item.SeasonId || item.SeriesId || item.ParentId;
let apiClient = connectionManager.getApiClient(item.ServerId);
const apiClient = connectionManager.getApiClient(item.ServerId);
return confirm({
@ -34,7 +34,7 @@ export function deleteItem(options) {
}
}
}, function (err) {
let result = function () {
const result = function () {
return Promise.reject(err);
};

View file

@ -86,7 +86,7 @@ import 'material-icons';
if (result.TotalRecordCount) {
nodes.push({
id: 'livetv',
text: globalize.translate('HeaderLiveTV'),
text: globalize.translate('LiveTV'),
state: {
opened: false
},

View file

@ -22,6 +22,8 @@
require(['apphost'], function (appHost) {
'use strict';
appHost = appHost.default || appHost;
var _GAMEPAD_A_BUTTON_INDEX = 0;
var _GAMEPAD_B_BUTTON_INDEX = 1;
var _GAMEPAD_DPAD_UP_BUTTON_INDEX = 12;

View file

@ -63,11 +63,11 @@ import events from 'events';
}
function ensureTranslations(culture) {
for (let i in allTranslations) {
for (const i in allTranslations) {
ensureTranslation(allTranslations[i], culture);
}
if (culture !== fallbackCulture) {
for (let i in allTranslations) {
for (const i in allTranslations) {
ensureTranslation(allTranslations[i], fallbackCulture);
}
}

View file

@ -39,7 +39,7 @@ import appHost from 'apphost';
dom.removeEventListener(scope, 'command', fn, {});
}
let commandTimes = {};
const commandTimes = {};
function checkCommandTime(command) {
const last = commandTimes[command] || 0;

View file

@ -11,7 +11,7 @@ function renderItems(page, item) {
if (item.ArtistCount) {
sections.push({
name: globalize.translate('TabArtists'),
name: globalize.translate('Artists'),
type: 'MusicArtist'
});
}
@ -25,14 +25,14 @@ function renderItems(page, item) {
if (item.MovieCount) {
sections.push({
name: globalize.translate('TabMovies'),
name: globalize.translate('Movies'),
type: 'Movie'
});
}
if (item.SeriesCount) {
sections.push({
name: globalize.translate('TabShows'),
name: globalize.translate('Shows'),
type: 'Series'
});
}
@ -53,7 +53,7 @@ function renderItems(page, item) {
if (item.AlbumCount) {
sections.push({
name: globalize.translate('TabAlbums'),
name: globalize.translate('Albums'),
type: 'MusicAlbum'
});
}

View file

@ -105,7 +105,7 @@ export function getQueryPagingHtml (options) {
}
if (options.sortButton) {
html += '<button is="paper-icon-button-light" class="btnSort autoSize" title="' + globalize.translate('ButtonSort') + '"><span class="material-icons sort_by_alpha"></span></button>';
html += '<button is="paper-icon-button-light" class="btnSort autoSize" title="' + globalize.translate('Sort') + '"><span class="material-icons sort_by_alpha"></span></button>';
}
if (options.filterButton) {

View file

@ -33,7 +33,7 @@ import 'flexStyles';
html += `<button is="paper-icon-button-light" class="headerSyncButton syncButton headerButton headerButtonRight hide" title="${globalize.translate('ButtonSyncPlay')}"><span class="material-icons sync_disabled"></span></button>`;
html += `<button is="paper-icon-button-light" class="headerAudioPlayerButton audioPlayerButton headerButton headerButtonRight hide" title="${globalize.translate('ButtonPlayer')}"><span class="material-icons music_note"></span></button>`;
html += `<button is="paper-icon-button-light" class="headerCastButton castButton headerButton headerButtonRight hide" title="${globalize.translate('ButtonCast')}"><span class="material-icons cast"></span></button>`;
html += `<button type="button" is="paper-icon-button-light" class="headerButton headerButtonRight headerSearchButton hide" title="${globalize.translate('ButtonSearch')}"><span class="material-icons search"></span></button>`;
html += `<button type="button" is="paper-icon-button-light" class="headerButton headerButtonRight headerSearchButton hide" title="${globalize.translate('Search')}"><span class="material-icons search"></span></button>`;
html += '<button is="paper-icon-button-light" class="headerButton headerButtonRight headerUserButton hide"><span class="material-icons person"></span></button>';
html += '</div>';
html += '</div>';
@ -377,7 +377,7 @@ import 'flexStyles';
pageIds: ['dashboardGeneralPage'],
icon: 'settings'
}, {
name: globalize.translate('TabUsers'),
name: globalize.translate('HeaderUsers'),
href: 'userprofiles.html',
pageIds: ['userProfilesPage', 'newUserPage', 'editUserPage', 'userLibraryAccessPage', 'userParentalControlPage', 'userPasswordPage'],
icon: 'people'
@ -387,7 +387,7 @@ import 'flexStyles';
pageIds: ['mediaLibraryPage', 'librarySettingsPage', 'libraryDisplayPage', 'metadataImagesConfigurationPage', 'metadataNfoPage'],
icon: 'folder'
}, {
name: globalize.translate('TabPlayback'),
name: globalize.translate('TitlePlayback'),
icon: 'play_arrow',
href: 'encodingsettings.html',
pageIds: ['encodingSettingsPage', 'playbackConfigurationPage', 'streamingSettingsPage']
@ -395,10 +395,10 @@ import 'flexStyles';
addPluginPagesToMainMenu(links, pluginItems, 'server');
links.push({
divider: true,
name: globalize.translate('TabDevices')
name: globalize.translate('HeaderDevices')
});
links.push({
name: globalize.translate('TabDevices'),
name: globalize.translate('HeaderDevices'),
href: 'devices.html',
pageIds: ['devicesPage', 'devicePage'],
icon: 'devices'
@ -417,16 +417,16 @@ import 'flexStyles';
});
links.push({
divider: true,
name: globalize.translate('TabLiveTV')
name: globalize.translate('LiveTV')
});
links.push({
name: globalize.translate('TabLiveTV'),
name: globalize.translate('LiveTV'),
href: 'livetvstatus.html',
pageIds: ['liveTvStatusPage', 'liveTvTunerPage'],
icon: 'live_tv'
});
links.push({
name: globalize.translate('TabDVR'),
name: globalize.translate('HeaderDVR'),
href: 'livetvsettings.html',
pageIds: ['liveTvSettingsPage'],
icon: 'dvr'
@ -567,7 +567,7 @@ import 'flexStyles';
view.ImageTags = {};
view.icon = 'live_tv';
const guideView = Object.assign({}, view);
guideView.Name = globalize.translate('ButtonGuide');
guideView.Name = globalize.translate('Guide');
guideView.ImageTags = {};
guideView.icon = 'dvr';
guideView.url = 'livetv.html?tab=1';

View file

@ -1,21 +1,40 @@
let data;
function getConfig() {
async function getConfig() {
if (data) return Promise.resolve(data);
return fetch('config.json?nocache=' + new Date().getUTCMilliseconds()).then(response => {
data = response.json();
try {
const response = await fetch('config.json', {
cache: 'no-cache'
});
if (!response.ok) {
throw new Error('network response was not ok');
}
data = await response.json();
return data;
}).catch(error => {
console.warn('web config file is missing so the template will be used');
} catch (error) {
console.warn('failed to fetch the web config file:', error);
return getDefaultConfig();
});
}
}
function getDefaultConfig() {
return fetch('config.template.json').then(function (response) {
data = response.json();
async function getDefaultConfig() {
try {
const response = await fetch('config.template.json', {
cache: 'no-cache'
});
if (!response.ok) {
throw new Error('network response was not ok');
}
data = await response.json();
return data;
});
} catch (error) {
console.error('failed to fetch the default web config file:', error);
}
}
export function getMultiServer() {

View file

@ -271,17 +271,16 @@ function initClient() {
}
function createConnectionManager() {
return require(['connectionManagerFactory', 'apphost', 'credentialprovider', 'events', 'userSettings'], function (ConnectionManager, apphost, credentialProvider, events, userSettings) {
return require(['connectionManagerFactory', 'apphost', 'credentialprovider', 'events', 'userSettings'], function (ConnectionManager, appHost, credentialProvider, events, userSettings) {
appHost = appHost.default || appHost;
var credentialProviderInstance = new credentialProvider();
var promises = [apphost.getSyncProfile(), apphost.init()];
var promises = [appHost.init()];
return Promise.all(promises).then(function (responses) {
var deviceProfile = responses[0];
var capabilities = Dashboard.capabilities(apphost);
var capabilities = Dashboard.capabilities(appHost);
capabilities.DeviceProfile = deviceProfile;
var connectionManager = new ConnectionManager(credentialProviderInstance, apphost.appName(), apphost.appVersion(), apphost.deviceName(), apphost.deviceId(), capabilities);
var connectionManager = new ConnectionManager(credentialProviderInstance, appHost.appName(), appHost.appVersion(), appHost.deviceName(), appHost.deviceId(), capabilities);
defineConnectionManager(connectionManager);
bindConnectionManagerEvents(connectionManager, events, userSettings);
@ -292,7 +291,7 @@ function initClient() {
return require(['apiclient'], function (apiClientFactory) {
console.debug('creating ApiClient singleton');
var apiClient = new apiClientFactory(Dashboard.serverAddress(), apphost.appName(), apphost.appVersion(), apphost.deviceName(), apphost.deviceId());
var apiClient = new apiClientFactory(Dashboard.serverAddress(), appHost.appName(), appHost.appVersion(), appHost.deviceName(), appHost.deviceId());
apiClient.enableAutomaticNetworking = false;
apiClient.manualAddressOnly = true;
@ -351,6 +350,7 @@ function initClient() {
function getLayoutManager(layoutManager, appHost) {
layoutManager = layoutManager.default || layoutManager;
appHost = appHost.default || appHost;
if (appHost.getDefaultLayout) {
layoutManager.defaultLayout = appHost.getDefaultLayout();
}
@ -470,6 +470,8 @@ function initClient() {
}
require(['apphost', 'css!assets/css/librarybrowser'], function (appHost) {
appHost = appHost.default || appHost;
loadPlugins(appHost, browser).then(function () {
onAppReady(browser);
});
@ -518,6 +520,8 @@ function initClient() {
// ensure that appHost is loaded in this point
require(['apphost', 'appRouter'], function (appHost, appRouter) {
appHost = appHost.default || appHost;
window.Emby = {};
console.debug('onAppReady: loading dependencies');