define(['require', 'browser', 'layoutManager', 'appSettings', 'pluginManager', 'apphost', 'focusManager', 'datetime', 'globalize', 'loading', 'connectionManager', 'skinManager', 'dom', 'events', 'emby-select', 'emby-checkbox', 'emby-linkbutton'], function (require, browser, layoutManager, appSettings, pluginManager, appHost, focusManager, datetime, globalize, loading, connectionManager, skinManager, dom, events) { "use strict"; function fillThemes(select, isDashboard) { select.innerHTML = skinManager.getThemes().map(function (t) { var value = t.id; if (t.isDefault && !isDashboard) { value = ''; } else if (t.isDefaultServerDashboard && isDashboard) { value = ''; } return ''; }).join(''); } function loadScreensavers(context, userSettings) { var selectScreensaver = context.querySelector('.selectScreensaver'); var options = pluginManager.ofType('screensaver').map(function (plugin) { return { name: plugin.name, value: plugin.id }; }); options.unshift({ name: globalize.translate('None'), value: 'none' }); selectScreensaver.innerHTML = options.map(function (o) { return ''; }).join(''); selectScreensaver.value = userSettings.screensaver(); if (!selectScreensaver.value) { // TODO: set the default instead of none selectScreensaver.value = 'none'; } } function loadSoundEffects(context, userSettings) { var selectSoundEffects = context.querySelector('.selectSoundEffects'); var options = pluginManager.ofType('soundeffects').map(function (plugin) { return { name: plugin.name, value: plugin.id }; }); options.unshift({ name: globalize.translate('None'), value: 'none' }); selectSoundEffects.innerHTML = options.map(function (o) { return ''; }).join(''); selectSoundEffects.value = userSettings.soundEffects(); if (!selectSoundEffects.value) { // TODO: set the default instead of none selectSoundEffects.value = 'none'; } } function loadSkins(context, userSettings) { var selectSkin = context.querySelector('.selectSkin'); var options = pluginManager.ofType('skin').map(function (plugin) { return { name: plugin.name, value: plugin.id }; }); selectSkin.innerHTML = options.map(function (o) { return ''; }).join(''); selectSkin.value = userSettings.skin(); if (!selectSkin.value && options.length) { selectSkin.value = options[0].value; } if (options.length > 1 && appHost.supports('skins')) { context.querySelector('.selectSkinContainer').classList.remove('hide'); } else { context.querySelector('.selectSkinContainer').classList.add('hide'); } } function showOrHideMissingEpisodesField(context, user, apiClient) { if (browser.tizen || browser.web0s) { context.querySelector('.fldDisplayMissingEpisodes').classList.add('hide'); return; } context.querySelector('.fldDisplayMissingEpisodes').classList.remove('hide'); } function loadForm(context, user, userSettings, apiClient) { var loggedInUserId = apiClient.getCurrentUserId(); var userId = user.Id; if (user.Policy.IsAdministrator) { context.querySelector('.selectDashboardThemeContainer').classList.remove('hide'); } else { context.querySelector('.selectDashboardThemeContainer').classList.add('hide'); } if (appHost.supports('displaylanguage')) { context.querySelector('.languageSection').classList.remove('hide'); } else { context.querySelector('.languageSection').classList.add('hide'); } if (appHost.supports('displaymode')) { context.querySelector('.fldDisplayMode').classList.remove('hide'); } else { context.querySelector('.fldDisplayMode').classList.add('hide'); } if (appHost.supports('externallinks')) { context.querySelector('.learnHowToContributeContainer').classList.remove('hide'); } else { context.querySelector('.learnHowToContributeContainer').classList.add('hide'); } if (appHost.supports('runatstartup')) { context.querySelector('.fldAutorun').classList.remove('hide'); } else { context.querySelector('.fldAutorun').classList.add('hide'); } if (appHost.supports('soundeffects')) { context.querySelector('.fldSoundEffects').classList.remove('hide'); } else { context.querySelector('.fldSoundEffects').classList.add('hide'); } if (appHost.supports('screensaver')) { context.querySelector('.selectScreensaverContainer').classList.remove('hide'); } else { context.querySelector('.selectScreensaverContainer').classList.add('hide'); } if (datetime.supportsLocalization()) { context.querySelector('.fldDateTimeLocale').classList.remove('hide'); } else { context.querySelector('.fldDateTimeLocale').classList.add('hide'); } if (!browser.tizen && !browser.web0s) { context.querySelector('.fldBackdrops').classList.remove('hide'); context.querySelector('.fldThemeSong').classList.remove('hide'); context.querySelector('.fldThemeVideo').classList.remove('hide'); } else { context.querySelector('.fldBackdrops').classList.add('hide'); context.querySelector('.fldThemeSong').classList.add('hide'); context.querySelector('.fldThemeVideo').classList.add('hide'); } context.querySelector('.chkRunAtStartup').checked = appSettings.runAtStartup(); var selectTheme = context.querySelector('#selectTheme'); var selectDashboardTheme = context.querySelector('#selectDashboardTheme'); fillThemes(selectTheme); fillThemes(selectDashboardTheme, true); loadScreensavers(context, userSettings); loadSoundEffects(context, userSettings); loadSkins(context, userSettings); context.querySelector('.chkDisplayMissingEpisodes').checked = user.Configuration.DisplayMissingEpisodes || false; context.querySelector('#chkThemeSong').checked = userSettings.enableThemeSongs(); context.querySelector('#chkThemeVideo').checked = userSettings.enableThemeVideos(); context.querySelector('#chkBackdrops').checked = userSettings.enableBackdrops(); context.querySelector('#selectLanguage').value = userSettings.language() || ''; context.querySelector('.selectDateTimeLocale').value = userSettings.dateTimeLocale() || ''; selectDashboardTheme.value = userSettings.dashboardTheme() || ''; selectTheme.value = userSettings.theme() || ''; context.querySelector('.selectLayout').value = layoutManager.getSavedLayout() || ''; showOrHideMissingEpisodesField(context, user, apiClient); loading.hide(); } function saveUser(context, user, userSettingsInstance, apiClient) { appSettings.runAtStartup(context.querySelector('.chkRunAtStartup').checked); user.Configuration.DisplayMissingEpisodes = context.querySelector('.chkDisplayMissingEpisodes').checked; if (appHost.supports('displaylanguage')) { userSettingsInstance.language(context.querySelector('#selectLanguage').value); } userSettingsInstance.dateTimeLocale(context.querySelector('.selectDateTimeLocale').value); userSettingsInstance.enableThemeSongs(context.querySelector('#chkThemeSong').checked); userSettingsInstance.enableThemeVideos(context.querySelector('#chkThemeVideo').checked); userSettingsInstance.dashboardTheme(context.querySelector('#selectDashboardTheme').value); userSettingsInstance.theme(context.querySelector('#selectTheme').value); userSettingsInstance.soundEffects(context.querySelector('.selectSoundEffects').value); userSettingsInstance.screensaver(context.querySelector('.selectScreensaver').value); userSettingsInstance.skin(context.querySelector('.selectSkin').value); userSettingsInstance.enableBackdrops(context.querySelector('#chkBackdrops').checked); if (user.Id === apiClient.getCurrentUserId()) { skinManager.setTheme(userSettingsInstance.theme()); } layoutManager.setLayout(context.querySelector('.selectLayout').value); return apiClient.updateUserConfiguration(user.Id, user.Configuration); } function save(instance, context, userId, userSettings, apiClient, enableSaveConfirmation) { loading.show(); apiClient.getUser(userId).then(function (user) { saveUser(context, user, userSettings, apiClient).then(function () { loading.hide(); if (enableSaveConfirmation) { require(['toast'], function (toast) { toast(globalize.translate('SettingsSaved')); }); } events.trigger(instance, 'saved'); }, function () { loading.hide(); }); }); } function onSubmit(e) { var self = this; var apiClient = connectionManager.getApiClient(self.options.serverId); var userId = self.options.userId; var userSettings = self.options.userSettings; userSettings.setUserInfo(userId, apiClient).then(function () { var enableSaveConfirmation = self.options.enableSaveConfirmation; save(self, self.options.element, userId, userSettings, apiClient, enableSaveConfirmation); }); // Disable default form submission if (e) { e.preventDefault(); } return false; } function embed(options, self) { require(['text!./displaysettings.template.html'], function (template) { options.element.innerHTML = globalize.translateDocument(template, 'core'); options.element.querySelector('form').addEventListener('submit', onSubmit.bind(self)); if (options.enableSaveButton) { options.element.querySelector('.btnSave').classList.remove('hide'); } self.loadData(options.autoFocus); }); } function DisplaySettings(options) { this.options = options; embed(options, this); } DisplaySettings.prototype.loadData = function (autoFocus) { var self = this; var context = self.options.element; loading.show(); var userId = self.options.userId; var apiClient = connectionManager.getApiClient(self.options.serverId); var userSettings = self.options.userSettings; return apiClient.getUser(userId).then(function (user) { return userSettings.setUserInfo(userId, apiClient).then(function () { self.dataLoaded = true; loadForm(context, user, userSettings, apiClient); if (autoFocus) { focusManager.autoFocus(context); } }); }); }; DisplaySettings.prototype.submit = function () { onSubmit.call(this); }; DisplaySettings.prototype.destroy = function () { this.options = null; }; return DisplaySettings; });