diff --git a/src/appservices.html b/src/appservices.html deleted file mode 100644 index 43f37a0980..0000000000 --- a/src/appservices.html +++ /dev/null @@ -1,21 +0,0 @@ -
- -
-
- -
- -
-

${HeaderInstalledServices}

- ${Help} -
- -
-
-
-

${HeaderAvailableServices}

-
-
-
-
-
\ No newline at end of file diff --git a/src/components/apphost.js b/src/components/apphost.js index 8de18f166f..9cffd2d8a4 100644 --- a/src/components/apphost.js +++ b/src/components/apphost.js @@ -143,7 +143,8 @@ define(["appSettings", "browser", "events", "htmlMediaHelper"], function(appSett features.push("displaylanguage"); features.push("otherapppromotions"); features.push("targetblank"); - features.push("multiserver"); + // allows users to connect to more than one server + //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"); browser.tv || browser.ps4 || browser.xboxOne || features.push("fileinput"); diff --git a/src/components/directorybrowser/directorybrowser.js b/src/components/directorybrowser/directorybrowser.js index 7eb91fffa0..c6d811e959 100644 --- a/src/components/directorybrowser/directorybrowser.js +++ b/src/components/directorybrowser/directorybrowser.js @@ -18,18 +18,18 @@ define(['loading', 'dialogHelper', 'dom', 'listViewStyle', 'emby-input', 'emby-b if (path && typeof path !== 'string') { throw new Error("invalid path"); } - + loading.show(); - + var promises = []; if ("Network" === path) { promises.push(ApiClient.getNetworkDevices()) } else { - if (path) { + if (path) { promises.push(ApiClient.getDirectoryContents(path, fileOptions)); promises.push(ApiClient.getParentPath(path)); - } else { + } else { promises.push(ApiClient.getDrives()); } } @@ -42,7 +42,7 @@ define(['loading', 'dialogHelper', 'dom', 'listViewStyle', 'emby-input', 'emby-b page.querySelector(".results").scrollTop = 0; page.querySelector("#txtDirectoryPickerPath").value = path || ""; - + if (path) { html += getItem("lnkPath lnkDirectory", "", parentPath, "..."); } @@ -51,7 +51,7 @@ define(['loading', 'dialogHelper', 'dom', 'listViewStyle', 'emby-input', 'emby-b var cssClass = "File" === folder.Type ? "lnkPath lnkFile" : "lnkPath lnkDirectory"; html += getItem(cssClass, folder.Type, folder.Path, folder.Name); } - + if (!path) { html += getItem("lnkPath lnkDirectory", "", "Network", Globalize.translate("ButtonNetwork")); } @@ -128,7 +128,7 @@ define(['loading', 'dialogHelper', 'dom', 'listViewStyle', 'emby-input', 'emby-b html += ''; } html += ""; - if (!readOnlyAttribute) { + if (!readOnlyAttribute) { html += '
'; } if (options.enableNetworkSharePath) { @@ -222,11 +222,7 @@ define(['loading', 'dialogHelper', 'dom', 'listViewStyle', 'emby-input', 'emby-b var networkSharePath = this.querySelector("#txtNetworkPath"); networkSharePath = networkSharePath ? networkSharePath.value : null; var path = this.querySelector("#txtDirectoryPickerPath").value; - validatePath(path, options.validateWriteable, ApiClient).then( - function() { - options.callback(path, networkSharePath); - } - ); + validatePath(path, options.validateWriteable, ApiClient).then(options.callback(path, networkSharePath)); } e.preventDefault(); e.stopPropagation(); diff --git a/src/dashboard.html b/src/dashboard.html index 61b7a7516d..d2de21f166 100644 --- a/src/dashboard.html +++ b/src/dashboard.html @@ -50,10 +50,8 @@

${HeaderActiveDevices}

-
- @@ -76,7 +74,6 @@
-

${Alerts}

@@ -84,8 +81,12 @@
+
-

${HeaderPaths}

+
+

${HeaderPaths}

+ +
diff --git a/src/dashboard/dashboardgeneral.js b/src/dashboard/dashboardgeneral.js index f220be4cc0..c0ff217ffe 100644 --- a/src/dashboard/dashboardgeneral.js +++ b/src/dashboard/dashboardgeneral.js @@ -2,9 +2,36 @@ define(["jQuery", "loading", "fnchecked", "emby-checkbox", "emby-textarea", "emb "use strict"; function loadPage(page, config, languageOptions, systemInfo) { - systemInfo.CanLaunchWebBrowser ? page.querySelector("#fldRunWebAppAtStartup").classList.remove("hide") : page.querySelector("#fldRunWebAppAtStartup").classList.add("hide"), page.querySelector("#txtCachePath").value = config.CachePath || "", $("#selectLocalizationLanguage", page).html(languageOptions.map(function(l) { - return '" - })).val(config.UICulture), currentLanguage = config.UICulture, systemInfo.CanSelfUpdate ? page.querySelector(".fldAutomaticUpdates").classList.remove("hide") : page.querySelector(".fldAutomaticUpdates").classList.add("hide"), $("#chkEnableAutomaticServerUpdates", page).checked(config.EnableAutoUpdate), $("#chkEnableAutomaticRestart", page).checked(config.EnableAutomaticRestart), systemInfo.CanSelfRestart ? page.querySelector("#fldEnableAutomaticRestart").classList.remove("hide") : page.querySelector("#fldEnableAutomaticRestart").classList.add("hide"), systemInfo.CanSelfRestart || systemInfo.CanSelfUpdate ? $(".autoUpdatesContainer", page).removeClass("hide") : $(".autoUpdatesContainer", page).addClass("hide"), loading.hide() + if (systemInfo.CanLaunchWebBrowser) { + page.querySelector("#fldRunWebAppAtStartup").classList.remove("hide"); + } else { + page.querySelector("#fldRunWebAppAtStartup").classList.add("hide"); + } + page.querySelector("#txtCachePath").value = config.CachePath || ""; + $("#txtMetadataPath", page).val(config.MetadataPath || ""); + $("#txtMetadataNetworkPath", page).val(config.MetadataNetworkPath || ""); + $("#selectLocalizationLanguage", page).html(languageOptions.map(function(language) { + return '" + })).val(config.UICulture); + currentLanguage = config.UICulture; + if (systemInfo.CanSelfUpdate) { + page.querySelector(".fldAutomaticUpdates").classList.remove("hide"); + } else { + page.querySelector(".fldAutomaticUpdates").classList.add("hide"); + } + $("#chkEnableAutomaticServerUpdates", page).checked(config.EnableAutoUpdate); + $("#chkEnableAutomaticRestart", page).checked(config.EnableAutomaticRestart); + if (systemInfo.CanSelfRestart) { + page.querySelector("#fldEnableAutomaticRestart").classList.remove("hide"); + } else { + page.querySelector("#fldEnableAutomaticRestart").classList.add("hide"); + } + if (systemInfo.CanSelfRestart || systemInfo.CanSelfUpdate) { + $(".autoUpdatesContainer", page).removeClass("hide"); + } else { + $(".autoUpdatesContainer", page).addClass("hide"); + } + loading.hide(); } function onSubmit() { @@ -12,40 +39,89 @@ define(["jQuery", "loading", "fnchecked", "emby-checkbox", "emby-textarea", "emb var form = this; $(form).parents(".page"); return ApiClient.getServerConfiguration().then(function(config) { - config.UICulture = $("#selectLocalizationLanguage", form).val(), config.CachePath = form.querySelector("#txtCachePath").value; - var requiresReload = !1; - config.UICulture !== currentLanguage && (requiresReload = !0), config.EnableAutomaticRestart = $("#chkEnableAutomaticRestart", form).checked(), config.EnableAutoUpdate = $("#chkEnableAutomaticServerUpdates", form).checked(), ApiClient.updateServerConfiguration(config).then(function() { + config.UICulture = $("#selectLocalizationLanguage", form).val(); + config.CachePath = form.querySelector("#txtCachePath").value; + config.MetadataPath = $("#txtMetadataPath", form).val(); + config.MetadataNetworkPath = $("#txtMetadataNetworkPath", form).val(); + var requiresReload = (config.UICulture !== currentLanguage); + config.EnableAutomaticRestart = $("#chkEnableAutomaticRestart", form).checked(); + config.EnableAutoUpdate = $("#chkEnableAutomaticServerUpdates", form).checked(); + ApiClient.updateServerConfiguration(config).then(function() { ApiClient.getNamedConfiguration(brandingConfigKey).then(function(brandingConfig) { - brandingConfig.LoginDisclaimer = form.querySelector("#txtLoginDisclaimer").value, brandingConfig.CustomCss = form.querySelector("#txtCustomCss").value, currentBrandingOptions && brandingConfig.CustomCss !== currentBrandingOptions.CustomCss && (requiresReload = !0), ApiClient.updateNamedConfiguration(brandingConfigKey, brandingConfig).then(function() { - Dashboard.processServerConfigurationUpdateResult(), requiresReload && !AppInfo.isNativeApp && window.location.reload(!0) - }) + brandingConfig.LoginDisclaimer = form.querySelector("#txtLoginDisclaimer").value; + brandingConfig.CustomCss = form.querySelector("#txtCustomCss").value; + if (currentBrandingOptions && brandingConfig.CustomCss !== currentBrandingOptions.CustomCss) { + requiresReload = true; + } + ApiClient.updateNamedConfiguration(brandingConfigKey, brandingConfig).then(function() { + Dashboard.processServerConfigurationUpdateResult(); + if (requiresReload && !AppInfo.isNativeApp) { + window.location.reload(true); + } + }); }) }) }), !1 } - var currentBrandingOptions, currentLanguage, brandingConfigKey = "branding"; + + var currentBrandingOptions; + var currentLanguage; + var brandingConfigKey = "branding"; + return function(view, params) { $("#btnSelectCachePath", view).on("click.selectDirectory", function() { require(["directorybrowser"], function(directoryBrowser) { var picker = new directoryBrowser; picker.show({ callback: function(path) { - path && (view.querySelector("#txtCachePath").value = path), picker.close() + if (path) { + view.querySelector("#txtCachePath").value = path; + } + picker.close(); }, - validateWriteable: !0, + validateWriteable: true, header: Globalize.translate("HeaderSelectServerCachePath"), instruction: Globalize.translate("HeaderSelectServerCachePathHelp") }) }) - }), $(".dashboardGeneralForm", view).off("submit", onSubmit).on("submit", onSubmit), view.addEventListener("viewshow", function() { - var promise1 = ApiClient.getServerConfiguration(), - promise2 = ApiClient.getJSON(ApiClient.getUrl("Localization/Options")), - promise3 = ApiClient.getSystemInfo(); - Promise.all([promise1, promise2, promise3]).then(function(responses) { - loadPage(view, responses[0], responses[1], responses[2]) - }), ApiClient.getNamedConfiguration(brandingConfigKey).then(function(config) { - currentBrandingOptions = config, view.querySelector("#txtLoginDisclaimer").value = config.LoginDisclaimer || "", view.querySelector("#txtCustomCss").value = config.CustomCss || "" + }); + + $("#btnSelectMetadataPath", view).on("click.selectDirectory", function() { + require(["directorybrowser"], function(directoryBrowser) { + var picker = new directoryBrowser(); + picker.show({ + path: $("#txtMetadataPath", view).val(), + networkSharePath: $("#txtMetadataNetworkPath", view).val(), + callback: function(path, networkPath) { + if (path) { + $("#txtMetadataPath", view).val(path); + } + if (networkPath) { + $("#txtMetadataNetworkPath", view).val(networkPath)); + } + picker.close(); + }, + validateWriteable: true, + header: Globalize.translate("HeaderSelectMetadataPath"), + instruction: Globalize.translate("HeaderSelectMetadataPathHelp"), + enableNetworkSharePath: true + }) }) - }) + }); + + $(".dashboardGeneralForm", view).off("submit", onSubmit).on("submit", onSubmit); + view.addEventListener("viewshow", function() { + var promiseConfig = ApiClient.getServerConfiguration(); + var promiseLanguageOptions = ApiClient.getJSON(ApiClient.getUrl("Localization/Options")); + var promiseSystemInfo = ApiClient.getSystemInfo(); + Promise.all([promiseConfig, promiseLanguageOptions, promiseSystemInfo]).then(function(responses) { + loadPage(view, responses[0], responses[1], responses[2]); + }); + ApiClient.getNamedConfiguration(brandingConfigKey).then(function(config) { + currentBrandingOptions = config; + view.querySelector("#txtLoginDisclaimer").value = config.LoginDisclaimer || ""; + view.querySelector("#txtCustomCss").value = config.CustomCss || ""; + }); + }); } }); diff --git a/src/dashboard/librarysettings.js b/src/dashboard/librarysettings.js index afbf033dfb..5e700b6fb0 100644 --- a/src/dashboard/librarysettings.js +++ b/src/dashboard/librarysettings.js @@ -2,45 +2,47 @@ define(["jQuery", "loading", "libraryMenu", "fnchecked", "emby-checkbox", "emby- "use strict"; function loadPage(page, config) { - config.MergeMetadataAndImagesByName ? $(".fldImagesByName", page).hide() : $(".fldImagesByName", page).show(), $("#chkSaveMetadataHidden", page).checked(config.SaveMetadataHidden), $("#txtMetadataPath", page).val(config.MetadataPath || ""), $("#txtMetadataNetworkPath", page).val(config.MetadataNetworkPath || ""), loading.hide() + $("#chkSaveMetadataHidden", page).checked(config.SaveMetadataHidden); + loading.hide(); } function loadMetadataConfig(page, config) { - $("#selectDateAdded", page).val(config.UseFileCreationTimeForDateAdded ? "1" : "0") + $("#selectDateAdded", page).val(config.UseFileCreationTimeForDateAdded ? "1" : "0"); } function loadFanartConfig(page, config) { - $("#txtFanartApiKey", page).val(config.UserApiKey || "") + $("#txtFanartApiKey", page).val(config.UserApiKey || ""); } function saveFanart(form) { ApiClient.getNamedConfiguration("fanart").then(function(config) { - config.UserApiKey = $("#txtFanartApiKey", form).val(), ApiClient.updateNamedConfiguration("fanart", config) - }) + config.UserApiKey = $("#txtFanartApiKey", form).val(), ApiClient.updateNamedConfiguration("fanart", config); + }); } function saveMetadata(form) { ApiClient.getNamedConfiguration("metadata").then(function(config) { - config.UseFileCreationTimeForDateAdded = "1" === $("#selectDateAdded", form).val(), ApiClient.updateNamedConfiguration("metadata", config) + config.UseFileCreationTimeForDateAdded = "1" === $("#selectDateAdded", form).val(), ApiClient.updateNamedConfiguration("metadata", config); }) } function alertText(options) { require(["alert"], function(alert) { - alert(options) - }) - } - - function onSubmitFail(response) { - loading.hide(), response && 404 === response.status ? alertText("The metadata path entered could not be found. Please ensure the path is valid and try again.") : response && 500 === response.status && alertText("The metadata path entered is not valid. Please ensure the path exists and that Jellyfin server has write access to the folder.") + alert(options); + }); } function onSubmit() { loading.show(); var form = this; - return ApiClient.getServerConfiguration().then(function(config) { - config.SaveMetadataHidden = $("#chkSaveMetadataHidden", form).checked(), config.EnableTvDbUpdates = $("#chkEnableTvdbUpdates", form).checked(), config.EnableTmdbUpdates = $("#chkEnableTmdbUpdates", form).checked(), config.EnableFanArtUpdates = $("#chkEnableFanartUpdates", form).checked(), config.MetadataPath = $("#txtMetadataPath", form).val(), config.MetadataNetworkPath = $("#txtMetadataNetworkPath", form).val(), config.FanartApiKey = $("#txtFanartApiKey", form).val(), ApiClient.updateServerConfiguration(config).then(Dashboard.processServerConfigurationUpdateResult, onSubmitFail) - }), saveMetadata(form), saveFanart(form), !1 + ApiClient.getServerConfiguration().then(function(config) { + config.SaveMetadataHidden = $("#chkSaveMetadataHidden", form).checked(); + config.FanartApiKey = $("#txtFanartApiKey", form).val(); + ApiClient.updateServerConfiguration(config).then(Dashboard.processServerConfigurationUpdateResult); + }); + saveMetadata(form); + saveFanart(form); + return false; } function getTabs() { @@ -61,34 +63,29 @@ define(["jQuery", "loading", "libraryMenu", "fnchecked", "emby-checkbox", "emby- name: Globalize.translate("TabAdvanced") }] } + return function(view, params) { - $("#btnSelectMetadataPath", view).on("click.selectDirectory", function() { - require(["directorybrowser"], function(directoryBrowser) { - var picker = new directoryBrowser; - picker.show({ - path: $("#txtMetadataPath", view).val(), - networkSharePath: $("#txtMetadataNetworkPath", view).val(), - callback: function(path, networkPath) { - path && ($("#txtMetadataPath", view).val(path), $("#txtMetadataNetworkPath", view).val(networkPath)), picker.close() - }, - validateWriteable: !0, - header: Globalize.translate("HeaderSelectMetadataPath"), - instruction: Globalize.translate("HeaderSelectMetadataPathHelp"), - enableNetworkSharePath: !0 - }) - }) - }), $(".librarySettingsForm").off("submit", onSubmit).on("submit", onSubmit), view.addEventListener("viewshow", function() { - libraryMenu.setTabs("librarysetup", 4, getTabs), loading.show(); + $(".librarySettingsForm").off("submit", onSubmit).on("submit", onSubmit); + view.addEventListener("viewshow", function() { + libraryMenu.setTabs("librarysetup", 4, getTabs); + loading.show(); var page = this; ApiClient.getServerConfiguration().then(function(config) { loadPage(page, config) - }), ApiClient.getNamedConfiguration("metadata").then(function(metadata) { + }); + ApiClient.getNamedConfiguration("metadata").then(function(metadata) { loadMetadataConfig(page, metadata) - }), ApiClient.getNamedConfiguration("fanart").then(function(metadata) { + }); + ApiClient.getNamedConfiguration("fanart").then(function(metadata) { loadFanartConfig(page, metadata) - }), ApiClient.getSystemInfo().then(function(info) { - "Windows" === info.OperatingSystem ? page.querySelector(".fldSaveMetadataHidden").classList.remove("hide") : page.querySelector(".fldSaveMetadataHidden").classList.add("hide") - }) - }) + }); + ApiClient.getSystemInfo().then(function(info) { + if ("Windows" === info.OperatingSystem) { + page.querySelector(".fldSaveMetadataHidden").classList.remove("hide"); + } else { + page.querySelector(".fldSaveMetadataHidden").classList.add("hide"); + } + }); + }); } }); diff --git a/src/dashboard/livetvtuner.js b/src/dashboard/livetvtuner.js index b32e01b2d2..8d27093af1 100644 --- a/src/dashboard/livetvtuner.js +++ b/src/dashboard/livetvtuner.js @@ -2,31 +2,57 @@ define(["globalize", "loading", "libraryMenu", "dom", "emby-input", "emby-button "use strict"; function isM3uVariant(type) { - return -1 !== ["nextpvr"].indexOf(type || "") + return ["nextpvr"].indexOf(type || "") !== -1; } function fillTypes(view, currentId) { - return ApiClient.getJSON(ApiClient.getUrl("LiveTv/TunerHosts/Types")).then(function(types) { + ApiClient.getJSON(ApiClient.getUrl("LiveTv/TunerHosts/Types")).then(function(types) { var selectType = view.querySelector(".selectType"); - selectType.innerHTML = types.map(function(t) { - return '" - }).join("") + '", selectType.disabled = null != currentId, selectType.value = "", onTypeChange.call(selectType) - }) + var html = ""; + html += types.map(function(tuner) { + return '"; + }).join(""); + html += '"; + selectType.innerHTML = html; + + selectType.disabled = null != currentId; + selectType.value = ""; + onTypeChange.call(selectType); + }); } function reload(view, providerId) { - view.querySelector(".txtDevicePath").value = "", view.querySelector(".chkFavorite").checked = !1, view.querySelector(".txtDevicePath").value = "", providerId && ApiClient.getNamedConfiguration("livetv").then(function(config) { - var info = config.TunerHosts.filter(function(i) { - return i.Id === providerId - })[0]; - fillTunerHostInfo(view, info) - }) + view.querySelector(".txtDevicePath").value = ""; + view.querySelector(".chkFavorite").checked = false; + view.querySelector(".txtDevicePath").value = ""; + if (providerId) { + ApiClient.getNamedConfiguration("livetv").then(function(config) { + var info = config.TunerHosts.filter(function(i) { + return i.Id === providerId; + })[0]; + fillTunerHostInfo(view, info); + }); + } } function fillTunerHostInfo(view, info) { - var selectType = view.querySelector(".selectType"), - type = info.Type || ""; - info.Source && isM3uVariant(info.Source) && (type = info.Source), selectType.value = type, onTypeChange.call(selectType), view.querySelector(".txtDevicePath").value = info.Url || "", view.querySelector(".txtFriendlyName").value = info.FriendlyName || "", view.querySelector(".txtUserAgent").value = info.UserAgent || "", view.querySelector(".fldDeviceId").value = info.DeviceId || "", view.querySelector(".chkFavorite").checked = info.ImportFavoritesOnly, view.querySelector(".chkTranscode").checked = info.AllowHWTranscoding, view.querySelector(".chkStreamLoop").checked = info.EnableStreamLooping, view.querySelector(".txtTunerCount").value = info.TunerCount || "0" + var selectType = view.querySelector(".selectType"); + var type = info.Type || ""; + if (info.Source && isM3uVariant(info.Source)) { + type = info.Source; + } + selectType.value = type; + onTypeChange.call(selectType); + view.querySelector(".txtDevicePath").value = info.Url || ""; + view.querySelector(".txtFriendlyName").value = info.FriendlyName || ""; + view.querySelector(".txtUserAgent").value = info.UserAgent || ""; + view.querySelector(".fldDeviceId").value = info.DeviceId || ""; + view.querySelector(".chkFavorite").checked = info.ImportFavoritesOnly; + view.querySelector(".chkTranscode").checked = info.AllowHWTranscoding; + view.querySelector(".chkStreamLoop").checked = info.EnableStreamLooping; + view.querySelector(".txtTunerCount").value = info.TunerCount || "0"; } function submitForm(page) { @@ -74,16 +100,6 @@ define(["globalize", "loading", "libraryMenu", "dom", "emby-input", "emby-button }) } - function getTabs() { - return [{ - href: "livetvstatus.html", - name: globalize.translate("TabDevices") - }, { - href: "appservices.html?context=livetv", - name: globalize.translate("TabServices") - }] - } - function onTypeChange() { var value = this.value, view = dom.parentWithClass(this, "page"), @@ -102,7 +118,6 @@ define(["globalize", "loading", "libraryMenu", "dom", "emby-input", "emby-button } return function(view, params) { params.id || view.querySelector(".btnDetect").classList.remove("hide"), view.addEventListener("viewshow", function() { - libraryMenu.setTabs("livetvadmin", 0, getTabs); var currentId = params.id; fillTypes(view, currentId).then(function() { reload(view, currentId) diff --git a/src/dashboardgeneral.html b/src/dashboardgeneral.html index 16d170e62b..f95246708f 100644 --- a/src/dashboardgeneral.html +++ b/src/dashboardgeneral.html @@ -34,7 +34,7 @@
-

${Advanced}

+

${HeaderPaths}

@@ -44,6 +44,17 @@
${LabelCachePathHelp}
+ +
+
+
+ +
+ +
+
${LabelMetadataPathHelp}
+ +
@@ -62,6 +73,7 @@
+

${HeaderBranding}

${LabelLoginDisclaimerHelp}
diff --git a/src/devices/devices.html b/src/devices/devices.html index f79d7954fd..6997f42eda 100644 --- a/src/devices/devices.html +++ b/src/devices/devices.html @@ -1,8 +1,6 @@
-
-

${TabDevices}

@@ -11,9 +9,6 @@
- - -
diff --git a/src/dlnasettings.html b/src/dlnasettings.html index a3cb1f10fa..5eb5cd452d 100644 --- a/src/dlnasettings.html +++ b/src/dlnasettings.html @@ -10,11 +10,6 @@

${TabSettings}

${Help}
- -
- -
${LabelRemoteClientBitrateLimitHelp}
-
diff --git a/src/librarysettings.html b/src/librarysettings.html index 7b75ff7e19..abf06b0928 100644 --- a/src/librarysettings.html +++ b/src/librarysettings.html @@ -1,5 +1,4 @@
-
@@ -11,16 +10,7 @@
${LabelDateAddedBehaviorHelp}
-
-
-
- -
- -
-
${LabelMetadataPathHelp}
- -
+
\ No newline at end of file diff --git a/src/livetvstatus.html b/src/livetvstatus.html index 281c1e7a97..f6a0c8aeb2 100644 --- a/src/livetvstatus.html +++ b/src/livetvstatus.html @@ -1,11 +1,7 @@ -
- +
- -
-

@@ -31,8 +27,8 @@
-
+
diff --git a/src/livetvtuner.html b/src/livetvtuner.html index 47fd5e2b26..71ddde77d7 100644 --- a/src/livetvtuner.html +++ b/src/livetvtuner.html @@ -1,8 +1,6 @@ -
- +
-
@@ -47,6 +45,7 @@
${ImportFavoriteChannelsHelp}
+
${AllowHWTranscodingHelp}
+
${EnableStreamLoopingHelp}
+

${DrmChannelsNotImported}

${ForAdditionalLiveTvOptions}


diff --git a/src/mypreferencesmenu.html b/src/mypreferencesmenu.html index 13bf648440..7269fe3521 100644 --- a/src/mypreferencesmenu.html +++ b/src/mypreferencesmenu.html @@ -82,6 +82,16 @@
+
diff --git a/src/notificationsettings.html b/src/notificationsettings.html index 279e1bc565..e0747c34b3 100644 --- a/src/notificationsettings.html +++ b/src/notificationsettings.html @@ -1,13 +1,9 @@ -
- +
-
-
-
diff --git a/src/opensubtitles.html b/src/opensubtitles.html deleted file mode 100644 index 51e337ae63..0000000000 --- a/src/opensubtitles.html +++ /dev/null @@ -1,27 +0,0 @@ -
-
-
- -
- -
- -
-
-
- - -
-
- -
-
- -
-
${SubtitleDownloadInstructions}
- -
-
-
diff --git a/src/scripts/appservices.js b/src/scripts/appservices.js deleted file mode 100644 index 03ec8225bf..0000000000 --- a/src/scripts/appservices.js +++ /dev/null @@ -1,56 +0,0 @@ -define(["loading", "libraryMenu"], function(loading, libraryMenu) { - "use strict"; - - function reloadList(page) { - loading.show(); - var promise1 = ApiClient.getAvailablePlugins({ - TargetSystems: "Server" - }), - promise2 = ApiClient.getInstalledPlugins(); - Promise.all([promise1, promise2]).then(function(responses) { - renderInstalled(page, responses[0], responses[1]), renderCatalog(page, responses[0], responses[1]) - }) - } - - function getCategories() { - var context = getParameterByName("context"), - categories = []; - return "sync" == context ? categories.push("Sync") : "livetv" == context ? categories.push("Live TV") : "notifications" == context && categories.push("Notifications"), categories - } - - function renderInstalled(page, availablePlugins, installedPlugins) { - requirejs(["scripts/pluginspage"], function() { - var category = getCategories()[0]; - installedPlugins = installedPlugins.filter(function(i) { - var catalogEntry = availablePlugins.filter(function(a) { - return (a.guid || "").toLowerCase() == (i.Id || "").toLowerCase() - })[0]; - return !!catalogEntry && catalogEntry.category == category - }), PluginsPage.renderPlugins(page, installedPlugins) - }) - } - - function renderCatalog(page, availablePlugins, installedPlugins) { - requirejs(["scripts/plugincatalogpage"], function() { - var categories = getCategories(); - PluginCatalog.renderCatalog({ - catalogElement: page.querySelector(".catalog"), - availablePlugins: availablePlugins, - installedPlugins: installedPlugins, - categories: categories, - showCategory: !1, - context: getParameterByName("context"), - targetSystem: "Server" - }) - }) - } - - function onPageShow() { - var page = this, - context = getParameterByName("context"); - "sync" == context ? (libraryMenu.setTitle(Globalize.translate("TitleSync")), page.querySelector(".headerHelpButton").setAttribute("href", "https://web.archive.org/web/20181216120305/https://github.com/MediaBrowser/Wiki/wiki/Sync")) : "livetv" == context ? (libraryMenu.setTitle(Globalize.translate("TitleLiveTV")), page.querySelector(".headerHelpButton").setAttribute("href", "https://web.archive.org/web/20181216120305/https://github.com/MediaBrowser/Wiki/wiki/Live-TV")) : "notifications" == context && (libraryMenu.setTitle(Globalize.translate("TitleNotifications")), page.querySelector(".headerHelpButton").setAttribute("href", "https://web.archive.org/web/20181216120305/https://github.com/MediaBrowser/Wiki/wiki/Notifications")) - } - pageIdOn("pagebeforeshow", "appServicesPage", onPageShow), pageIdOn("pageshow", "appServicesPage", onPageShow), pageIdOn("pageshow", "appServicesPage", function() { - reloadList(this) - }) -}); \ No newline at end of file diff --git a/src/scripts/librarymenu.js b/src/scripts/librarymenu.js index 145ae42479..fb4d100971 100644 --- a/src/scripts/librarymenu.js +++ b/src/scripts/librarymenu.js @@ -189,6 +189,7 @@ define(["dom", "layoutManager", "inputManager", "connectionManager", "events", " html += globalize.translate("HeaderAdmin"); html += "

"; html += 'dashboard' + globalize.translate("TabDashboard") + ""; + html += 'mode_edit' + globalize.translate("Metadata") + ""; html += "
"; } @@ -198,7 +199,9 @@ define(["dom", "layoutManager", "inputManager", "connectionManager", "events", " html += ""; if (user.localUser) { html += 'settings' + globalize.translate("ButtonSettings") + ""; - html += 'wifi' + globalize.translate("ButtonSelectServer") + ""; + if (appHost.supports("multiserver")) { + html += 'wifi' + globalize.translate("ButtonSelectServer") + ""; + } if (!user.localUser.EnableAutoLogin) { html += 'exit_to_app' + globalize.translate("ButtonSignOut") + ""; } @@ -271,7 +274,7 @@ define(["dom", "layoutManager", "inputManager", "connectionManager", "events", " pageIds: ["dashboardPage", "serverActivityPage"], icon: "dashboard" }, { - name: globalize.translate("TabSettings"), + name: globalize.translate("General"), href: "dashboardgeneral.html", pageIds: ["dashboardGeneralPage"], icon: "settings" @@ -297,11 +300,6 @@ define(["dom", "layoutManager", "inputManager", "connectionManager", "events", " icon: "swap_horiz", href: "encodingsettings.html", pageIds: ["encodingSettingsPage"] - }, { - name: "Open Subtitles", - href: "opensubtitles.html", - pageIds: ["openSubtitlesPage"], - icon: "closed_caption" }]; addPluginPagesToMainMenu(links, pluginItems, "server"); links.push({ @@ -373,12 +371,6 @@ define(["dom", "layoutManager", "inputManager", "connectionManager", "events", " pageIds: ["scheduledTasksPage", "scheduledTaskPage"], icon: "schedule" }); - links.push({ - name: globalize.translate("MetadataManager"), - href: "edititemmetadata.html", - pageIds: [], - icon: "mode_edit" - }); addPluginPagesToMainMenu(links, pluginItems); return links; } diff --git a/src/scripts/livetvstatus.js b/src/scripts/livetvstatus.js index 96f7b3dd91..3a7078ccd8 100644 --- a/src/scripts/livetvstatus.js +++ b/src/scripts/livetvstatus.js @@ -188,16 +188,6 @@ define(["jQuery", "globalize", "scripts/taskbutton", "dom", "libraryMenu", "layo Dashboard.navigate("livetvtuner.html") } - function getTabs() { - return [{ - href: "livetvstatus.html", - name: globalize.translate("TabDevices") - }, { - href: "appservices.html?context=livetv", - name: globalize.translate("TabServices") - }] - } - function showDeviceMenu(button, tunerDeviceId) { var items = []; items.push({ @@ -240,7 +230,6 @@ define(["jQuery", "globalize", "scripts/taskbutton", "dom", "libraryMenu", "layo addProvider(this) }), page.querySelector(".devicesList").addEventListener("click", onDevicesListClick) }).on("pageshow", "#liveTvStatusPage", function() { - libraryMenu.setTabs("livetvadmin", 0, getTabs); var page = this; reload(page), taskButton({ mode: "on", diff --git a/src/scripts/notificationsettings.js b/src/scripts/notificationsettings.js index b0c8bfe573..b167ca00e4 100644 --- a/src/scripts/notificationsettings.js +++ b/src/scripts/notificationsettings.js @@ -2,29 +2,59 @@ define(["loading", "libraryMenu", "globalize", "listViewStyle", "emby-linkbutton "use strict"; function reload(page) { - loading.show(), ApiClient.getJSON(ApiClient.getUrl("Notifications/Types")).then(function(list) { - var html = "", - lastCategory = "", - showHelp = !0; - html += list.map(function(i) { + loading.show(); + ApiClient.getJSON(ApiClient.getUrl("Notifications/Types")).then(function(list) { + var html = ""; + var lastCategory = ""; + var showHelp = true; + html += list.map(function(notification) { var itemHtml = ""; - return i.Category != lastCategory && (lastCategory = i.Category, lastCategory && (itemHtml += "
", itemHtml += "
"), itemHtml += '
', itemHtml += '
', itemHtml += '

', itemHtml += i.Category, itemHtml += "

", showHelp && (showHelp = !1, itemHtml += '' + globalize.translate("Help") + ""), itemHtml += "
", itemHtml += '", html += "
"), page.querySelector(".notificationList").innerHTML = html, loading.hide() + if (notification.Category !== lastCategory) { + lastCategory = notification.Category; + if (lastCategory) { + itemHtml += "
"; + itemHtml += "
"; + } + itemHtml += '
'; + itemHtml += '
'; + itemHtml += '

'; + itemHtml += notification.Category; + itemHtml += "

"; + if (showHelp) { + showHelp = false; + itemHtml += ''; + itemHtml += globalize.translate("Help"); + itemHtml += ""; + } + itemHtml += "
"; + itemHtml += '"; + html += "
"; + } + page.querySelector(".notificationList").innerHTML = html; + loading.hide(); }) } - function getTabs() { - return [{ - href: "notificationsettings.html", - name: globalize.translate("TabNotifications") - }, { - href: "appservices.html?context=notifications", - name: globalize.translate("TabServices") - }] - } return function(view, params) { view.addEventListener("viewshow", function() { - libraryMenu.setTabs("notifications", 0, getTabs), reload(view) - }) + reload(view); + }); } -}); \ No newline at end of file +}); diff --git a/src/scripts/opensubtitles.js b/src/scripts/opensubtitles.js deleted file mode 100644 index 99ec982dc1..0000000000 --- a/src/scripts/opensubtitles.js +++ /dev/null @@ -1,36 +0,0 @@ -define(["loading", "fnchecked", "emby-linkbutton", "emby-input", "emby-checkbox", "emby-button"], function (loading) { - "use strict"; - - function loadPage(page, config) { - page.querySelector("#txtOpenSubtitleUsername").value = config.OpenSubtitlesUsername; - page.querySelector("#txtOpenSubtitlePassword").value = config.OpenSubtitlesPasswordHash || ""; - loading.hide(); - } - - function onSubmit(evt) { - evt.preventDefault(); - loading.show(); - var form = this; - ApiClient.getNamedConfiguration("subtitles").then(function (config) { - config.OpenSubtitlesUsername = form.querySelector("#txtOpenSubtitleUsername").value; - var newPassword = form.querySelector("#txtOpenSubtitlePassword").value; - - if (newPassword) { - config.OpenSubtitlesPasswordHash = newPassword; - } - - ApiClient.updateNamedConfiguration("subtitles", config).then(Dashboard.processServerConfigurationUpdateResult); - }); - return false; - } - - $(document).on("pageinit", "#openSubtitlesPage", function() { - $(".metadataSubtitlesForm").off("submit", onSubmit).on("submit", onSubmit) - }).on("pageshow", "#openSubtitlesPage", function() { - loading.show(); - var page = this; - ApiClient.getNamedConfiguration("subtitles").then(function (response) { - loadPage(page, response); - }); - }); -}); diff --git a/src/scripts/plugincatalogpage.js b/src/scripts/plugincatalogpage.js index 40d57560b5..b399ba098a 100644 --- a/src/scripts/plugincatalogpage.js +++ b/src/scripts/plugincatalogpage.js @@ -41,84 +41,37 @@ define(["loading", "libraryMenu", "globalize", "cardStyle", "emby-linkbutton", " if (!options.targetSystem || plugin.targetSystem == options.targetSystem) { return "UserInstalled" == plugin.type; } - - return false; } - return false; }); - availablePlugins = allPlugins.sort(function (a__e, b__r) { - var aName = a__e.category; - var bName = b__r.category; - if (aName > bName) { + availablePlugins = allPlugins.sort(function (a, b) { + if (a.category > b.category) { return 1; - } - - if (bName > aName) { + } else if (b.category > a.category) { return -1; } - - aName = a__e.name; - bName = b__r.name; - - if (aName > bName) { + if (a.name > b.name) { return 1; - } - - if (bName > aName) { + } else if (b.name > a.name) { return -1; } - return 0; }); - var i__q; + var length; var plugin; var currentCategory; var html = ""; - if (!options.categories) { - currentCategory = globalize.translate("HeaderTopPlugins"); - html += '
'; - html += '

' + currentCategory + "

"; - var topPlugins = allPlugins.slice(0).sort(function (a__t, b__y) { - if (a__t.installs > b__y.installs) { - return -1; - } - - if (b__y.installs > a__t.installs) { - return 1; - } - - var aName = a__t.name; - var bName = b__y.name; - - if (aName > bName) { - return 1; - } - - if (bName > aName) { - return -1; - } - - return 0; - }); - html += '
'; - var limit = screen.availWidth >= 1920 ? 15 : 12; - - for (i__q = 0, length = Math.min(topPlugins.length, limit); i__q < length; i__q++) { - html += getPluginHtml(topPlugins[i__q], options, installedPlugins); - } - - html += "
"; - html += "
"; - } - var hasOpenTag = false; - - for (currentCategory = null, false === options.showCategory && (html += '
', hasOpenTag = true), i__q = 0, length = availablePlugins.length; i__q < length; i__q++) { - plugin = availablePlugins[i__q]; + currentCategory = null; + if (options.showCategory === false) { + html += '
'; + hasOpenTag = true; + } + for (var i = 0; i < availablePlugins.length; i++) { + plugin = availablePlugins[i]; var category = plugin.categoryDisplayName; if (category != currentCategory) { @@ -128,16 +81,13 @@ define(["loading", "libraryMenu", "globalize", "cardStyle", "emby-linkbutton", " html += "
"; html += "
"; } - html += '
'; html += '

' + category + "

"; html += '
'; hasOpenTag = true; } - currentCategory = category; } - html += getPluginHtml(plugin, options, installedPlugins); } diff --git a/src/scripts/site.js b/src/scripts/site.js index 2d6c15b1eb..78122b3c36 100644 --- a/src/scripts/site.js +++ b/src/scripts/site.js @@ -423,11 +423,6 @@ var Dashboard = { autoFocus: !1, roles: "admin", controller: "scripts/addpluginpage" - }), defineRoute({ - path: "/appservices.html", - dependencies: [], - autoFocus: !1, - roles: "admin" }), defineRoute({ path: "/autoorganizelog.html", dependencies: [], @@ -503,11 +498,6 @@ var Dashboard = { dependencies: [], autoFocus: !1, roles: "admin" - }), defineRoute({ - path: "/opensubtitles.html", - dependencies: [], - autoFocus: !1, - roles: "admin" }), defineRoute({ path: "/forgotpassword.html", dependencies: ["emby-input", "emby-button"], diff --git a/src/strings/en-us.json b/src/strings/en-us.json index c8a73f205a..5ac13f0aad 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -563,7 +563,7 @@ "HeaderGuideProviders": "TV Guide Data Providers", "HeaderHomePage": "Home Page", "HeaderHomeScreen": "Home Screen", - "HeaderHomeScreenSettings": "Home Screen settings", + "HeaderHomeScreenSettings": "Home Screen Settings", "HeaderHttpHeaders": "Http Headers", "HeaderIdentification": "Identification", "HeaderIdentificationCriteriaHelp": "Enter at least one identification criteria.",