From 4dbb912ff4993d30f3586d0f9d2906e9b4c25dc3 Mon Sep 17 00:00:00 2001 From: cvium Date: Thu, 10 Jan 2019 21:12:58 +0100 Subject: [PATCH 01/11] add paths back --- src/dashboard.html | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/dashboard.html b/src/dashboard.html index 7923a71e45..6796026d67 100644 --- a/src/dashboard.html +++ b/src/dashboard.html @@ -84,7 +84,36 @@
+
+

${HeaderPaths}

+
+
+
+
${LabelCache}
+
+
+
+
+
+
${LabelLogs}
+
+
+
+
+
+
${LabelMetadata}
+
+
+
+
+
+
${LabelTranscodingTemporaryFiles}
+
+
+
+
+
From 8a4d86df62757cb4ffa60eeaff973cbc2039ee8e Mon Sep 17 00:00:00 2001 From: cvium Date: Thu, 10 Jan 2019 21:13:18 +0100 Subject: [PATCH 02/11] remove premiere stuff and fix lingering js crashes --- src/addplugin.html | 38 ------------ src/components/tvproviders/xmltv.js | 2 +- src/css/dashboard.css | 3 +- src/css/site.css | 30 ---------- src/livetv.html | 9 +-- src/scripts/dashboardpage.js | 92 ++--------------------------- src/scripts/livetvsuggested.js | 19 +----- src/scripts/plugincatalogpage.js | 2 +- 8 files changed, 13 insertions(+), 182 deletions(-) diff --git a/src/addplugin.html b/src/addplugin.html index 1c8f0d4bc3..c8b1d4ecff 100644 --- a/src/addplugin.html +++ b/src/addplugin.html @@ -35,44 +35,6 @@

- -
diff --git a/src/components/tvproviders/xmltv.js b/src/components/tvproviders/xmltv.js index 1c73417916..038033a071 100644 --- a/src/components/tvproviders/xmltv.js +++ b/src/components/tvproviders/xmltv.js @@ -1,4 +1,4 @@ -define(["jQuery", "registrationServices", "loading", "emby-checkbox", "emby-input", "listViewStyle", "paper-icon-button-light"], function ($__q, registrationServices, loading) { +define(["jQuery", "loading", "emby-checkbox", "emby-input", "listViewStyle", "paper-icon-button-light"], function ($__q, loading) { "use strict"; return function (page, providerId, options) { diff --git a/src/css/dashboard.css b/src/css/dashboard.css index 945a056c83..c3ed0bfe36 100644 --- a/src/css/dashboard.css +++ b/src/css/dashboard.css @@ -176,8 +176,7 @@ div[data-role=controlgroup] a.ui-btn-active { flex-grow: 1 } -.activeSession:not(.playingSession) .sessionNowPlayingContent, -.supporterMembershipDisabled .tabSupporterMembership { +.activeSession:not(.playingSession) .sessionNowPlayingContent { display: none } diff --git a/src/css/site.css b/src/css/site.css index cf606abf41..0111b3823d 100644 --- a/src/css/site.css +++ b/src/css/site.css @@ -77,42 +77,12 @@ div[data-role=page] { padding-bottom: 2em !important } -.supporterPromotionContainer { - margin: 0 0 2em -} - -@media all and (min-width:80em) { - .supporterPromotionContainer { - margin: 0 - } -} - @media all and (min-width:50em) { .readOnlyContent, form { max-width: 54em } - - .supporterPromotionContainer { - display: -webkit-box; - display: -webkit-flex; - display: flex; - -webkit-box-orient: horizontal; - -webkit-box-direction: reverse; - -webkit-flex-direction: row-reverse; - flex-direction: row-reverse - } - - .supporterPromotion { - text-align: center; - padding: 0 2em - } - - .supporterPromotion button { - padding-left: 2em; - padding-right: 2em - } } .imageDropZone { diff --git a/src/livetv.html b/src/livetv.html index 88b141511f..ef824ae346 100644 --- a/src/livetv.html +++ b/src/livetv.html @@ -1,13 +1,6 @@ 
-
-

- -
- -
+
diff --git a/src/scripts/dashboardpage.js b/src/scripts/dashboardpage.js index abc32b753b..7c3a88feb2 100644 --- a/src/scripts/dashboardpage.js +++ b/src/scripts/dashboardpage.js @@ -107,21 +107,6 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa return list } - function getPluginSecurityInfo() { - var apiClient = window.ApiClient; - return apiClient ? connectionManager.getRegistrationInfo("themes", apiClient, { - viewOnly: !0 - }).then(function(result) { - return { - IsMBSupporter: !0 - } - }, function() { - return { - IsMBSupporter: !1 - } - }) : Promise.reject() - } - function refreshActiveRecordings(view, apiClient) { apiClient.getLiveTvRecordings({ UserId: Dashboard.getCurrentUserId(), @@ -158,12 +143,12 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa apiClient.getSystemInfo().then(function(systemInfo) { view.querySelector(".serverNameHeader").innerHTML = systemInfo.ServerName; var localizedVersion = globalize.translate("LabelVersionNumber", systemInfo.Version); - systemInfo.SystemUpdateLevel && "Release" != systemInfo.SystemUpdateLevel && (localizedVersion += " " + globalize.translate("Option" + systemInfo.SystemUpdateLevel).toLowerCase()), systemInfo.CanSelfRestart ? view.querySelector("#btnRestartServer").classList.remove("hide") : view.querySelector("#btnRestartServer").classList.add("hide"), view.querySelector("#appVersionNumber").innerHTML = localizedVersion, systemInfo.SupportsHttps ? view.querySelector("#ports").innerHTML = globalize.translate("LabelRunningOnPorts", systemInfo.HttpServerPortNumber, systemInfo.HttpsPortNumber) : view.querySelector("#ports").innerHTML = globalize.translate("LabelRunningOnPort", systemInfo.HttpServerPortNumber), DashboardPage.renderUrls(view, systemInfo), DashboardPage.renderPendingInstallations(view, systemInfo), systemInfo.CanSelfUpdate ? (view.querySelector("#btnUpdateApplicationContainer").classList.remove("hide"), view.querySelector("#btnManualUpdateContainer").classList.add("hide")) : (view.querySelector("#btnUpdateApplicationContainer").classList.add("hide"), view.querySelector("#btnManualUpdateContainer").classList.remove("hide")), "synology" == systemInfo.PackageName ? view.querySelector("#btnManualUpdateContainer").innerHTML = globalize.translate("SynologyUpdateInstructions") : view.querySelector("#btnManualUpdateContainer").innerHTML = '' + globalize.translate("PleaseUpdateManually") + "", DashboardPage.renderPaths(view, systemInfo), renderHasPendingRestart(view, apiClient, systemInfo.HasPendingRestart) + systemInfo.SystemUpdateLevel && "Release" != systemInfo.SystemUpdateLevel && (localizedVersion += " " + globalize.translate("Option" + systemInfo.SystemUpdateLevel).toLowerCase()), systemInfo.CanSelfRestart ? view.querySelector("#btnRestartServer").classList.remove("hide") : view.querySelector("#btnRestartServer").classList.add("hide"), view.querySelector("#appVersionNumber").innerHTML = localizedVersion, systemInfo.SupportsHttps ? view.querySelector("#ports").innerHTML = globalize.translate("LabelRunningOnPorts", systemInfo.HttpServerPortNumber, systemInfo.HttpsPortNumber) : view.querySelector("#ports").innerHTML = globalize.translate("LabelRunningOnPort", systemInfo.HttpServerPortNumber), DashboardPage.renderUrls(view, systemInfo), DashboardPage.renderPaths(view, systemInfo), renderHasPendingRestart(view, apiClient, systemInfo.HasPendingRestart) }) } function renderInfo(view, sessions, forceUpdate) { - sessions = filterSessions(sessions), renderActiveConnections(view, sessions), DashboardPage.renderPluginUpdateInfo(view, forceUpdate), loading.hide() + sessions = filterSessions(sessions), renderActiveConnections(view, sessions), loading.hide() } function pollForInfo(view, apiClient, forceUpdate) { @@ -215,9 +200,7 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa var html = ""; tasks = tasks.filter(function(t) { return "Idle" != t.State && !t.IsHidden - }), tasks.length ? view.querySelector(".runningTasksContainer").classList.remove("hide") : view.querySelector(".runningTasksContainer").classList.add("hide"), tasks.filter(function(t) { - return t.Key == DashboardPage.systemUpdateTaskKey - }).length ? buttonEnabled(view.querySelector("#btnUpdateApplication"), !1) : buttonEnabled(view.querySelector("#btnUpdateApplication"), !0); + }), tasks.length ? view.querySelector(".runningTasksContainer").classList.remove("hide") : view.querySelector(".runningTasksContainer").classList.add("hide"); for (var i = 0, length = tasks.length; i < length; i++) { var task = tasks[i]; if (html += "

", html += task.Name + "
", "Running" == task.State) { @@ -229,16 +212,9 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa view.querySelector("#divRunningTasks").innerHTML = html } return window.DashboardPage = { - newsStartIndex: 0, renderPaths: function(page, systemInfo) { page.querySelector("#cachePath").innerHTML = systemInfo.CachePath, page.querySelector("#logPath").innerHTML = systemInfo.LogPath, page.querySelector("#transcodingTemporaryPath").innerHTML = systemInfo.TranscodingTempPath, page.querySelector("#metadataPath").innerHTML = systemInfo.InternalMetadataPath }, - reloadNews: function(page) { - var query = { - StartIndex: DashboardPage.newsStartIndex, - Limit: 4 - }; - }, startInterval: function(apiClient) { apiClient.sendMessage("SessionsStart", "0,1500"), apiClient.sendMessage("ScheduledTasksInfoStart", "0,1000") }, @@ -380,52 +356,6 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa externalUrlElem.innerHTML = remoteAccessHtml + helpButton, externalUrlElem.classList.remove("hide") } else externalUrlElem.classList.add("hide") }, - renderSupporterIcon: function(page, pluginSecurityInfo) { - var imgUrl, text, supporterIconContainer = page.querySelector(".supporterIconContainer"); - pluginSecurityInfo.IsMBSupporter ? (supporterIconContainer.classList.remove("hide"), imgUrl = "css/images/supporter/supporterbadge.png", text = globalize.translate("MessageThankYouForSupporting"), supporterIconContainer.innerHTML = '') : supporterIconContainer.classList.add("hide") - }, - renderPendingInstallations: function(page, systemInfo) { - if (!systemInfo.CompletedInstallations.length) return void page.querySelector("#collapsiblePendingInstallations").classList.add("hide"); - page.querySelector("#collapsiblePendingInstallations").classList.remove("hide"); - for (var html = "", i = 0, length = systemInfo.CompletedInstallations.length; i < length; i++) { - var update = systemInfo.CompletedInstallations[i]; - html += "

" + update.Name + " (" + update.Version + ")
" - } - page.querySelector("#pendingInstallations").innerHTML = html - }, - renderPluginUpdateInfo: function(page, forceUpdate) { - !forceUpdate && DashboardPage.lastPluginUpdateCheck && (new Date).getTime() - DashboardPage.lastPluginUpdateCheck < 18e5 || (DashboardPage.lastPluginUpdateCheck = (new Date).getTime(), ApiClient.getAvailablePluginUpdates().then(function(updates) { - var elem = page.querySelector("#pPluginUpdates"); - if (!updates.length) return void elem.classList.add("hide"); - elem.classList.remove("hide"); - for (var html = "", i = 0, length = updates.length; i < length; i++) { - var update = updates[i]; - html += "

" + globalize.translate("NewVersionOfSomethingAvailable").replace("{0}", update.name) + "

", html += '" - } - elem.innerHTML = html - })) - }, - installPluginUpdate: function(button) { - buttonEnabled(button, !1); - var name = button.getAttribute("data-name"), - guid = button.getAttribute("data-guid"), - version = button.getAttribute("data-version"), - classification = button.getAttribute("data-classification"); - loading.show(), ApiClient.installPlugin(name, guid, classification, version).then(function() { - loading.hide() - }) - }, - updateApplication: function(btn) { - var page = dom.parentWithClass(btn, "page"); - buttonEnabled(page.querySelector("#btnUpdateApplication"), !1), loading.show(), ApiClient.getScheduledTasks().then(function(tasks) { - var task = tasks.filter(function(t) { - return t.Key == DashboardPage.systemUpdateTaskKey - })[0]; - ApiClient.startScheduledTask(task.Id).then(function() { - pollForInfo(page, ApiClient), loading.hide() - }) - }) - }, stopTask: function(btn, id) { var page = dom.parentWithClass(btn, "page"); ApiClient.stopScheduledTask(id).then(function() { @@ -458,16 +388,7 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa }) }) } - }, pageClassOn("pageshow", "type-interior", function() { - var page = this; - page.querySelector(".customSupporterPromotion") || getPluginSecurityInfo().then(function(pluginSecurityInfo) { - var supporterPromotionElem = page.querySelector(".supporterPromotion"); - if (supporterPromotionElem && supporterPromotionElem.parentNode.removeChild(supporterPromotionElem), !pluginSecurityInfo.IsMBSupporter) { - var html = '", page.querySelector(".content-primary").insertAdjacentHTML("afterbegin", html) - } - }) - }), + }, function(view, params) { function onRestartRequired(e, apiClient) { apiClient.serverId() === serverId && renderHasPendingRestart(view, apiClient, !0) @@ -502,9 +423,7 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa apiClient = ApiClient; if (apiClient) { loading.show(), pollForInfo(page, apiClient), DashboardPage.startInterval(apiClient), events.on(serverNotifications, "RestartRequired", onRestartRequired), events.on(serverNotifications, "ServerShuttingDown", onServerShuttingDown), events.on(serverNotifications, "ServerRestarting", onServerRestarting), events.on(serverNotifications, "PackageInstalling", onPackageInstalling), events.on(serverNotifications, "PackageInstallationCompleted", onPackageInstallationCompleted), events.on(serverNotifications, "Sessions", onSessionsUpdate), - events.on(serverNotifications, "ScheduledTasksInfo", onScheduledTasksUpdate), DashboardPage.lastAppUpdateCheck = null, DashboardPage.lastPluginUpdateCheck = null, getPluginSecurityInfo().then(function(pluginSecurityInfo) { - DashboardPage.renderSupporterIcon(page, pluginSecurityInfo) - }), reloadSystemInfo(page, ApiClient), page.userActivityLog || (page.userActivityLog = new ActivityLog({ + events.on(serverNotifications, "ScheduledTasksInfo", onScheduledTasksUpdate), DashboardPage.lastAppUpdateCheck = null, reloadSystemInfo(page, ApiClient), page.userActivityLog || (page.userActivityLog = new ActivityLog({ serverId: ApiClient.serverId(), element: page.querySelector(".userActivityItems") })), ApiClient.isMinServerVersion("3.4.1.25") && (page.serverActivityLog || (page.serverActivityLog = new ActivityLog({ @@ -515,6 +434,7 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa } }), view.addEventListener("viewbeforehide", function() { var apiClient = ApiClient; + // TODO we currently don't support packages and thus these events are useless events.off(serverNotifications, "RestartRequired", onRestartRequired), events.off(serverNotifications, "ServerShuttingDown", onServerShuttingDown), events.off(serverNotifications, "ServerRestarting", onServerRestarting), events.off(serverNotifications, "PackageInstalling", onPackageInstalling), events.off(serverNotifications, "PackageInstallationCompleted", onPackageInstallationCompleted), events.off(serverNotifications, "Sessions", onSessionsUpdate), events.off(serverNotifications, "ScheduledTasksInfo", onScheduledTasksUpdate), apiClient && DashboardPage.stopInterval(apiClient) }), view.addEventListener("viewdestroy", function() { var page = this, diff --git a/src/scripts/livetvsuggested.js b/src/scripts/livetvsuggested.js index 4377195338..653097b146 100644 --- a/src/scripts/livetvsuggested.js +++ b/src/scripts/livetvsuggested.js @@ -1,4 +1,4 @@ -define(["layoutManager", "userSettings", "inputManager", "loading", "registrationServices", "globalize", "libraryBrowser", "mainTabsManager", "cardBuilder", "apphost", "imageLoader", "scrollStyles", "emby-itemscontainer", "emby-tabs", "emby-button"], function(layoutManager, userSettings, inputManager, loading, registrationServices, globalize, libraryBrowser, mainTabsManager, cardBuilder, appHost, imageLoader) { +define(["layoutManager", "userSettings", "inputManager", "loading", "globalize", "libraryBrowser", "mainTabsManager", "cardBuilder", "apphost", "imageLoader", "scrollStyles", "emby-itemscontainer", "emby-tabs", "emby-button"], function(layoutManager, userSettings, inputManager, loading, globalize, libraryBrowser, mainTabsManager, cardBuilder, appHost, imageLoader) { "use strict"; function enableScrollX() { @@ -145,17 +145,6 @@ define(["layoutManager", "userSettings", "inputManager", "loading", "registratio }] } - function validateUnlock(view, showDialog) { - registrationServices.validateFeature("livetv", { - showDialog: showDialog, - viewOnly: !0 - }).then(function() { - view.querySelector(".liveTvContainer").classList.remove("hide"), view.querySelector(".unlockContainer").classList.add("hide") - }, function() { - view.querySelector(".liveTvContainer").classList.add("hide"), view.querySelector(".unlockContainer").classList.remove("hide") - }) - } - function setScrollClasses(elem, scrollX) { scrollX ? (elem.classList.add("hiddenScrollX"), layoutManager.tv && elem.classList.add("smoothScrollX"), elem.classList.add("scrollX"), elem.classList.remove("vertical-wrap")) : (elem.classList.remove("hiddenScrollX"), elem.classList.remove("smoothScrollX"), elem.classList.remove("scrollX"), elem.classList.add("vertical-wrap")) } @@ -248,7 +237,7 @@ define(["layoutManager", "userSettings", "inputManager", "loading", "registratio [].forEach.call(view.querySelectorAll(".sectionTitleTextButton-programs"), function(link) { var href = link.href; href && (link.href = href + "&serverId=" + ApiClient.serverId()) - }), view.querySelector(".unlockText").innerHTML = globalize.translate("sharedcomponents#LiveTvRequiresUnlock"), validateUnlock(view, !1), self.initTab = function() { + }), self.initTab = function() { for (var tabContent = view.querySelector(".pageTabContent[data-index='0']"), containers = tabContent.querySelectorAll(".itemsContainer"), i = 0, length = containers.length; i < length; i++) setScrollClasses(containers[i], enableScrollX()) }, self.renderTab = function() { var tabContent = view.querySelector(".pageTabContent[data-index='0']"); @@ -256,9 +245,7 @@ define(["layoutManager", "userSettings", "inputManager", "loading", "registratio }; var currentTabController, tabControllers = [], renderedTabs = []; - view.querySelector(".btnUnlock").addEventListener("click", function() { - validateUnlock(view, !0) - }), view.addEventListener("viewbeforeshow", function(e) { + view.addEventListener("viewbeforeshow", function(e) { isViewRestored = e.detail.isRestored, initTabs() }), view.addEventListener("viewshow", function(e) { isViewRestored = e.detail.isRestored, isViewRestored || mainTabsManager.selectedTabIndex(initialTabIndex), inputManager.on(window, onInputCommand) diff --git a/src/scripts/plugincatalogpage.js b/src/scripts/plugincatalogpage.js index cebbbb08f3..cb26e84431 100644 --- a/src/scripts/plugincatalogpage.js +++ b/src/scripts/plugincatalogpage.js @@ -68,7 +68,7 @@ define(["loading", "libraryMenu", "globalize", "cardStyle", "emby-linkbutton", " href = plugin.externalUrl ? plugin.externalUrl : "addplugin.html?name=" + encodeURIComponent(plugin.name) + "&guid=" + plugin.guid; options.context && (href += "&context=" + options.context); var target = plugin.externalUrl ? ' target="_blank"' : ""; - html += "
", html += '
', html += '", html += '
', html += "
", html += plugin.name, html += "
"; + html += "
", html += '
', html += '", html += '
', html += "
", html += plugin.name, html += "
"; var installedPlugin = plugin.isApp ? null : installedPlugins.filter(function(ip) { return ip.Id == plugin.guid })[0]; From c93cd267740227a1562199ab693dbd2dee765563 Mon Sep 17 00:00:00 2001 From: cvium Date: Thu, 10 Jan 2019 21:34:44 +0100 Subject: [PATCH 03/11] xmltv cleanup --- src/components/tvproviders/xmltv.js | 372 ++++++++++++++-------------- 1 file changed, 184 insertions(+), 188 deletions(-) diff --git a/src/components/tvproviders/xmltv.js b/src/components/tvproviders/xmltv.js index 038033a071..dd9ab7e93b 100644 --- a/src/components/tvproviders/xmltv.js +++ b/src/components/tvproviders/xmltv.js @@ -1,197 +1,193 @@ define(["jQuery", "loading", "emby-checkbox", "emby-input", "listViewStyle", "paper-icon-button-light"], function ($__q, loading) { - "use strict"; + "use strict"; - return function (page, providerId, options) { - function getListingProvider(config, id) { - if (config && id) { - var result = config.ListingProviders.filter(function (i__w) { - return i__w.Id === id; - })[0]; + return function (page, providerId, options) { + function getListingProvider(config, id) { + if (config && id) { + var result = config.ListingProviders.filter(function (provider) { + return provider.Id === id; + })[0]; - if (result) { - return Promise.resolve(result); - } + if (result) { + return Promise.resolve(result); + } - return getListingProvider(); - } - - return ApiClient.getJSON(ApiClient.getUrl("LiveTv/ListingProviders/Default")); - } - - function reload() { - loading.show(); - ApiClient.getNamedConfiguration("livetv").then(function (config) { - getListingProvider(config, providerId).then(function (info) { - page.querySelector(".txtPath").value = info.Path || ""; - page.querySelector(".txtKids").value = (info.KidsCategories || []).join("|"); - page.querySelector(".txtNews").value = (info.NewsCategories || []).join("|"); - page.querySelector(".txtSports").value = (info.SportsCategories || []).join("|"); - page.querySelector(".txtMovies").value = (info.MovieCategories || []).join("|"); - page.querySelector(".txtMoviePrefix").value = info.MoviePrefix || ""; - page.querySelector(".txtUserAgent").value = info.UserAgent || ""; - page.querySelector(".chkAllTuners").checked = info.EnableAllTuners; - - if (page.querySelector(".chkAllTuners").checked) { - page.querySelector(".selectTunersSection").classList.add("hide"); - } else { - page.querySelector(".selectTunersSection").classList.remove("hide"); - } - - refreshTunerDevices(page, info, config.TunerHosts); - loading.hide(); - }); - }); - } - - function getCategories(txtInput) { - var value = txtInput.value; - - if (value) { - return value.split("|"); - } - - return []; - } - - function submitListingsForm() { - loading.show(); - var id = providerId; - ApiClient.getNamedConfiguration("livetv").then(function (config) { - var info = config.ListingProviders.filter(function (i__e) { - return i__e.Id === id; - })[0] || {}; - info.Type = "xmltv"; - info.Path = page.querySelector(".txtPath").value; - info.MoviePrefix = page.querySelector(".txtMoviePrefix").value || null; - info.UserAgent = page.querySelector(".txtUserAgent").value || null; - info.MovieCategories = getCategories(page.querySelector(".txtMovies")); - info.KidsCategories = getCategories(page.querySelector(".txtKids")); - info.NewsCategories = getCategories(page.querySelector(".txtNews")); - info.SportsCategories = getCategories(page.querySelector(".txtSports")); - info.EnableAllTuners = page.querySelector(".chkAllTuners").checked; - info.EnabledTuners = info.EnableAllTuners ? [] : $__q(".chkTuner", page).get().filter(function (i__r) { - return i__r.checked; - }).map(function (i__t) { - return i__t.getAttribute("data-id"); - }); - ApiClient.ajax({ - type: "POST", - url: ApiClient.getUrl("LiveTv/ListingProviders", { - ValidateListings: true - }), - data: JSON.stringify(info), - contentType: "application/json" - }).then(function (result) { - loading.hide(); - - if (false !== options.showConfirmation) { - Dashboard.processServerConfigurationUpdateResult(); - } - - Events.trigger(self, "submitted"); - }, function () { - loading.hide(); - Dashboard.alert({ - message: Globalize.translate("ErrorAddingXmlTvFile") - }); - }); - }); - } - - function getTunerName(providerId) { - switch (providerId = providerId.toLowerCase()) { - case "m3u": - return "M3U Playlist"; - - case "hdhomerun": - return "HDHomerun"; - - case "satip": - return "DVB"; - - default: - return "Unknown"; - } - } - - function refreshTunerDevices(page, providerInfo, devices) { - var html = ""; - - for (var i__y = 0, length = devices.length; i__y < length; i__y++) { - var device = devices[i__y]; - html += '
'; - var enabledTuners = providerInfo.EnabledTuners || []; - var isChecked = providerInfo.EnableAllTuners || -1 !== enabledTuners.indexOf(device.Id); - var checkedAttribute = isChecked ? " checked" : ""; - html += '"; - html += '
'; - html += '
'; - html += device.FriendlyName || getTunerName(device.Type); - html += "
"; - html += '
'; - html += device.Url; - html += "
"; - html += "
"; - html += "
"; - } - - page.querySelector(".tunerList").innerHTML = html; - } - - function onSelectPathClick(e__u) { - var page = $__q(e__u.target).parents(".xmltvForm")[0]; - - require(["directorybrowser"], function (directoryBrowser) { - var picker = new directoryBrowser(); - picker.show({ - includeFiles: true, - callback: function (path) { - if (path) { - var txtPath = page.querySelector(".txtPath"); - txtPath.value = path; - txtPath.focus(); + return getListingProvider(); } - picker.close(); - } - }); - }); - } - - var self = this; - - self.submit = function () { - page.querySelector(".btnSubmitListings").click(); - }; - - self.init = function () { - options = options || {}; - - if (false !== options.showCancelButton) { - page.querySelector(".btnCancel").classList.remove("hide"); - } else { - page.querySelector(".btnCancel").classList.add("hide"); - } - - if (false !== options.showSubmitButton) { - page.querySelector(".btnSubmitListings").classList.remove("hide"); - } else { - page.querySelector(".btnSubmitListings").classList.add("hide"); - } - - $__q("form", page).on("submit", function () { - submitListingsForm(); - return false; - }); - page.querySelector("#btnSelectPath").addEventListener("click", onSelectPathClick); - page.querySelector(".chkAllTuners").addEventListener("change", function (e__i) { - if (e__i.target.checked) { - page.querySelector(".selectTunersSection").classList.add("hide"); - } else { - page.querySelector(".selectTunersSection").classList.remove("hide"); + return ApiClient.getJSON(ApiClient.getUrl("LiveTv/ListingProviders/Default")); } - }); - reload(); + + function reload() { + loading.show(); + ApiClient.getNamedConfiguration("livetv").then(function (config) { + getListingProvider(config, providerId).then(function (info) { + page.querySelector(".txtPath").value = info.Path || ""; + page.querySelector(".txtKids").value = (info.KidsCategories || []).join("|"); + page.querySelector(".txtNews").value = (info.NewsCategories || []).join("|"); + page.querySelector(".txtSports").value = (info.SportsCategories || []).join("|"); + page.querySelector(".txtMovies").value = (info.MovieCategories || []).join("|"); + page.querySelector(".txtMoviePrefix").value = info.MoviePrefix || ""; + page.querySelector(".txtUserAgent").value = info.UserAgent || ""; + page.querySelector(".chkAllTuners").checked = info.EnableAllTuners; + + if (page.querySelector(".chkAllTuners").checked) { + page.querySelector(".selectTunersSection").classList.add("hide"); + } else { + page.querySelector(".selectTunersSection").classList.remove("hide"); + } + + refreshTunerDevices(page, info, config.TunerHosts); + loading.hide(); + }); + }); + } + + function getCategories(txtInput) { + var value = txtInput.value; + + if (value) { + return value.split("|"); + } + + return []; + } + + function submitListingsForm() { + loading.show(); + var id = providerId; + ApiClient.getNamedConfiguration("livetv").then(function (config) { + var info = config.ListingProviders.filter(function (provider) { + return provider.Id === id; + })[0] || {}; + info.Type = "xmltv"; + info.Path = page.querySelector(".txtPath").value; + info.MoviePrefix = page.querySelector(".txtMoviePrefix").value || null; + info.UserAgent = page.querySelector(".txtUserAgent").value || null; + info.MovieCategories = getCategories(page.querySelector(".txtMovies")); + info.KidsCategories = getCategories(page.querySelector(".txtKids")); + info.NewsCategories = getCategories(page.querySelector(".txtNews")); + info.SportsCategories = getCategories(page.querySelector(".txtSports")); + info.EnableAllTuners = page.querySelector(".chkAllTuners").checked; + info.EnabledTuners = info.EnableAllTuners ? [] : $__q(".chkTuner", page).get().filter(function (tuner) { + return tuner.checked; + }).map(function (tuner) { + return tuner.getAttribute("data-id"); + }); + ApiClient.ajax({ + type: "POST", + url: ApiClient.getUrl("LiveTv/ListingProviders", { + ValidateListings: true + }), + data: JSON.stringify(info), + contentType: "application/json" + }).then(function (result) { + loading.hide(); + + if (false !== options.showConfirmation) { + Dashboard.processServerConfigurationUpdateResult(); + } + + Events.trigger(self, "submitted"); + }, function () { + loading.hide(); + Dashboard.alert({ + message: Globalize.translate("ErrorAddingXmlTvFile") + }); + }); + }); + } + + function getTunerName(providerId) { + switch (providerId = providerId.toLowerCase()) { + case "m3u": + return "M3U Playlist"; + case "hdhomerun": + return "HDHomerun"; + case "satip": + return "DVB"; + default: + return "Unknown"; + } + } + + function refreshTunerDevices(page, providerInfo, devices) { + var html = ""; + + for (var i = 0, length = devices.length; i < length; i__yi { + var device = devices[i]; + html += '
'; + var enabledTuners = providerInfo.EnabledTuners || []; + var isChecked = providerInfo.EnableAllTuners || -1 !== enabledTuners.indexOf(device.Id); + var checkedAttribute = isChecked ? " checked" : ""; + html += '"; + html += '
'; + html += '
'; + html += device.FriendlyName || getTunerName(device.Type); + html += "
"; + html += '
'; + html += device.Url; + html += "
"; + html += "
"; + html += "
"; + } + + page.querySelector(".tunerList").innerHTML = html; + } + + function onSelectPathClick(e__u) { + var page = $__q(e__u.target).parents(".xmltvForm")[0]; + + require(["directorybrowser"], function (directoryBrowser) { + var picker = new directoryBrowser(); + picker.show({ + includeFiles: true, + callback: function (path) { + if (path) { + var txtPath = page.querySelector(".txtPath"); + txtPath.value = path; + txtPath.focus(); + } + picker.close(); + } + }); + }); + } + + var self = this; + + self.submit = function () { + page.querySelector(".btnSubmitListings").click(); + }; + + self.init = function () { + options = options || {}; + + if (false !== options.showCancelButton) { + page.querySelector(".btnCancel").classList.remove("hide"); + } else { + page.querySelector(".btnCancel").classList.add("hide"); + } + + if (false !== options.showSubmitButton) { + page.querySelector(".btnSubmitListings").classList.remove("hide"); + } else { + page.querySelector(".btnSubmitListings").classList.add("hide"); + } + + $__q("form", page).on("submit", function () { + submitListingsForm(); + return false; + }); + page.querySelector("#btnSelectPath").addEventListener("click", onSelectPathClick); + page.querySelector(".chkAllTuners").addEventListener("change", function (evt) { + if (evt.target.checked) { + page.querySelector(".selectTunersSection").classList.add("hide"); + } else { + page.querySelector(".selectTunersSection").classList.remove("hide"); + } + }); + reload(); + }; }; - }; }); From dee0e6a5c739fabe71f3abb3a8ae5fdf11e65cb5 Mon Sep 17 00:00:00 2001 From: cvium Date: Thu, 10 Jan 2019 21:37:02 +0100 Subject: [PATCH 04/11] deuglification --- src/scripts/dashboardpage.js | 1049 ++++++++++++++++++++++-------- src/scripts/livetvsuggested.js | 432 +++++++----- src/scripts/plugincatalogpage.js | 246 +++++-- 3 files changed, 1240 insertions(+), 487 deletions(-) diff --git a/src/scripts/dashboardpage.js b/src/scripts/dashboardpage.js index 7c3a88feb2..02567f419d 100644 --- a/src/scripts/dashboardpage.js +++ b/src/scripts/dashboardpage.js @@ -1,447 +1,928 @@ -define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globalize", "loading", "connectionManager", "playMethodHelper", "cardBuilder", "imageLoader", "components/activitylog", "humanedate", "listViewStyle", "emby-linkbutton", "flexStyles", "emby-button", "emby-itemscontainer"], function(datetime, events, itemHelper, serverNotifications, dom, globalize, loading, connectionManager, playMethodHelper, cardBuilder, imageLoader, ActivityLog) { +define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globalize", "loading", "connectionManager", "playMethodHelper", "cardBuilder", "imageLoader", "components/activitylog", "humanedate", "listViewStyle", "emby-linkbutton", "flexStyles", "emby-button", "emby-itemscontainer"], function (datetime, events, itemHelper, serverNotifications, dom, globalize, loading, connectionManager, playMethodHelper, cardBuilder, imageLoader, ActivityLog) { "use strict"; - function onConnectionHelpClick(e) { - return e.preventDefault(), !1 + function onConnectionHelpClick(e__q) { + e__q.preventDefault(); + return false; } function buttonEnabled(elem, enabled) { - enabled ? (elem.setAttribute("disabled", ""), elem.removeAttribute("disabled")) : elem.setAttribute("disabled", "disabled") + if (enabled) { + elem.setAttribute("disabled", ""); + elem.removeAttribute("disabled"); + } else { + elem.setAttribute("disabled", "disabled"); + } } - function onEditServerNameClick(e) { + function onEditServerNameClick(e__w) { var page = dom.parentWithClass(this, "page"); - return require(["prompt"], function(prompt) { + + require(["prompt"], function (prompt) { prompt({ label: globalize.translate("LabelFriendlyServerName"), description: globalize.translate("LabelFriendlyServerNameHelp"), value: page.querySelector(".serverNameHeader").innerHTML, confirmText: globalize.translate("ButtonSave") - }).then(function(value) { - loading.show(), ApiClient.getServerConfiguration().then(function(config) { - config.ServerName = value, ApiClient.updateServerConfiguration(config).then(function() { - page.querySelector(".serverNameHeader").innerHTML = value, loading.hide() - }) - }) - }) - }), e.preventDefault(), !1 + }).then(function (value) { + loading.show(); + ApiClient.getServerConfiguration().then(function (config) { + config.ServerName = value; + ApiClient.updateServerConfiguration(config).then(function () { + page.querySelector(".serverNameHeader").innerHTML = value; + loading.hide(); + }); + }); + }); + }); + + e__w.preventDefault(); + return false; } function showPlaybackInfo(btn, session) { - require(["alert"], function(alert) { - var showTranscodeReasons, title, text = [], - displayPlayMethod = playMethodHelper.getDisplayPlayMethod(session), - isDirectStream = "DirectStream" === displayPlayMethod, - isTranscode = "Transcode" === displayPlayMethod; - isDirectStream ? (title = globalize.translate("sharedcomponents#DirectStreaming"), text.push(globalize.translate("sharedcomponents#DirectStreamHelp1")), text.push("
"), text.push(globalize.translate("sharedcomponents#DirectStreamHelp2"))) : isTranscode && (title = globalize.translate("sharedcomponents#Transcoding"), text.push(globalize.translate("sharedcomponents#MediaIsBeingConverted")), session.TranscodingInfo && session.TranscodingInfo.TranscodeReasons && session.TranscodingInfo.TranscodeReasons.length && (text.push("
"), text.push(globalize.translate("sharedcomponents#LabelReasonForTranscoding")), showTranscodeReasons = !0)), showTranscodeReasons && session.TranscodingInfo.TranscodeReasons.forEach(function(t) { - text.push(globalize.translate("sharedcomponents#" + t)) - }), alert({ + require(["alert"], function (alert) { + var showTranscodeReasons; + var title; + var text = []; + var displayPlayMethod = playMethodHelper.getDisplayPlayMethod(session); + var isDirectStream = "DirectStream" === displayPlayMethod; + var isTranscode = "Transcode" === displayPlayMethod; + + if (isDirectStream) { + title = globalize.translate("sharedcomponents#DirectStreaming"); + text.push(globalize.translate("sharedcomponents#DirectStreamHelp1")); + text.push("
"); + text.push(globalize.translate("sharedcomponents#DirectStreamHelp2")); + } else { + if (isTranscode) { + title = globalize.translate("sharedcomponents#Transcoding"); + text.push(globalize.translate("sharedcomponents#MediaIsBeingConverted")); + + if (session.TranscodingInfo && session.TranscodingInfo.TranscodeReasons && session.TranscodingInfo.TranscodeReasons.length) { + text.push("
"); + text.push(globalize.translate("sharedcomponents#LabelReasonForTranscoding")); + showTranscodeReasons = true; + } + } + } + + if (showTranscodeReasons) { + session.TranscodingInfo.TranscodeReasons.forEach(function (t__e) { + text.push(globalize.translate("sharedcomponents#" + t__e)); + }); + } + + alert({ text: text.join("
"), title: title - }) - }) + }); + }); } function showSendMessageForm(btn, session) { - require(["prompt"], function(prompt) { + require(["prompt"], function (prompt) { prompt({ title: globalize.translate("HeaderSendMessage"), label: globalize.translate("LabelMessageText"), confirmText: globalize.translate("ButtonSend") - }).then(function(text) { + }).then(function (text) { if (text) { connectionManager.getApiClient(session.ServerId).sendMessageCommand(session.Id, { Text: text, TimeoutMs: 5e3 - }) + }); } - }) - }) + }); + }); } function showOptionsMenu(btn, session) { - require(["actionsheet"], function(actionsheet) { + require(["actionsheet"], function (actionsheet) { var menuItems = []; - return session.ServerId && session.DeviceId !== connectionManager.deviceId() && menuItems.push({ - name: globalize.translate("SendMessage"), - id: "sendmessage" - }), session.TranscodingInfo && session.TranscodingInfo.TranscodeReasons && session.TranscodingInfo.TranscodeReasons.length && menuItems.push({ - name: globalize.translate("ViewPlaybackInfo"), - id: "transcodinginfo" - }), actionsheet.show({ + + if (session.ServerId && session.DeviceId !== connectionManager.deviceId()) { + menuItems.push({ + name: globalize.translate("SendMessage"), + id: "sendmessage" + }); + } + + if (session.TranscodingInfo && session.TranscodingInfo.TranscodeReasons && session.TranscodingInfo.TranscodeReasons.length) { + menuItems.push({ + name: globalize.translate("ViewPlaybackInfo"), + id: "transcodinginfo" + }); + } + + return actionsheet.show({ items: menuItems, positionTo: btn - }).then(function(id) { + }).then(function (id) { switch (id) { case "sendmessage": showSendMessageForm(btn, session); break; + case "transcodinginfo": - showPlaybackInfo(btn, session) + showPlaybackInfo(btn, session); } - }) - }) + }); + }); } - function onActiveDevicesClick(e) { - var btn = dom.parentWithClass(e.target, "sessionCardButton"); + function onActiveDevicesClick(e__r) { + var btn = dom.parentWithClass(e__r.target, "sessionCardButton"); + if (btn) { var card = dom.parentWithClass(btn, "card"); + if (card) { - var sessionId = card.id, - session = (DashboardPage.sessionsList || []).filter(function(s) { - return "session" + s.Id === sessionId - })[0]; - session && (btn.classList.contains("btnCardOptions") ? showOptionsMenu(btn, session) : btn.classList.contains("btnSessionInfo") ? showPlaybackInfo(btn, session) : btn.classList.contains("btnSessionSendMessage") ? showSendMessageForm(btn, session) : btn.classList.contains("btnSessionStop") ? connectionManager.getApiClient(session.ServerId).sendPlayStateCommand(session.Id, "Stop") : btn.classList.contains("btnSessionPlayPause") && session.PlayState && connectionManager.getApiClient(session.ServerId).sendPlayStateCommand(session.Id, "PlayPause")) + var sessionId = card.id; + var session = (DashboardPage.sessionsList || []).filter(function (s__t) { + return "session" + s__t.Id === sessionId; + })[0]; + + if (session) { + if (btn.classList.contains("btnCardOptions")) { + showOptionsMenu(btn, session); + } else { + if (btn.classList.contains("btnSessionInfo")) { + showPlaybackInfo(btn, session); + } else { + if (btn.classList.contains("btnSessionSendMessage")) { + showSendMessageForm(btn, session); + } else { + if (btn.classList.contains("btnSessionStop")) { + connectionManager.getApiClient(session.ServerId).sendPlayStateCommand(session.Id, "Stop"); + } else { + if (btn.classList.contains("btnSessionPlayPause") && session.PlayState) { + connectionManager.getApiClient(session.ServerId).sendPlayStateCommand(session.Id, "PlayPause"); + } + } + } + } + } + } } } } function filterSessions(sessions) { - for (var list = [], minActiveDate = (new Date).getTime() - 9e5, i = 0, length = sessions.length; i < length; i++) { - var session = sessions[i]; + var list = []; + var minActiveDate = new Date().getTime() - 9e5; + + for (var i__y = 0, length = sessions.length; i__y < length; i__y++) { + var session = sessions[i__y]; + if (session.NowPlayingItem || session.UserId) { - datetime.parseISO8601Date(session.LastActivityDate, !0).getTime() >= minActiveDate && list.push(session) + if (datetime.parseISO8601Date(session.LastActivityDate, true).getTime() >= minActiveDate) { + list.push(session); + } } } - return list + + return list; } function refreshActiveRecordings(view, apiClient) { apiClient.getLiveTvRecordings({ UserId: Dashboard.getCurrentUserId(), - IsInProgress: !0, + IsInProgress: true, Fields: "CanDelete,PrimaryImageAspectRatio", - EnableTotalRecordCount: !1, + EnableTotalRecordCount: false, EnableImageTypes: "Primary,Thumb,Backdrop" - }).then(function(result) { + }).then(function (result) { var itemsContainer = view.querySelector(".activeRecordingItems"); - if (!result.Items.length) return view.querySelector(".activeRecordingsSection").classList.add("hide"), void(itemsContainer.innerHTML = ""); + + if (!result.Items.length) { + view.querySelector(".activeRecordingsSection").classList.add("hide"); + return void (itemsContainer.innerHTML = ""); + } + view.querySelector(".activeRecordingsSection").classList.remove("hide"); itemsContainer.innerHTML = cardBuilder.getCardsHtml({ items: result.Items, shape: "auto", defaultShape: "backdrop", - showTitle: !0, - showParentTitle: !0, - coverImage: !0, - cardLayout: !1, - centerText: !0, + showTitle: true, + showParentTitle: true, + coverImage: true, + cardLayout: false, + centerText: true, preferThumb: "auto", - overlayText: !1, - overlayMoreButton: !0, + overlayText: false, + overlayMoreButton: true, action: "none", - centerPlayButton: !0 - }), imageLoader.lazyChildren(itemsContainer) - }) + centerPlayButton: true + }); + imageLoader.lazyChildren(itemsContainer); + }); } - function renderHasPendingRestart(view, apiClient, hasPendingRestart) { - } + function renderHasPendingRestart(view, apiClient, hasPendingRestart) { } function reloadSystemInfo(view, apiClient) { - apiClient.getSystemInfo().then(function(systemInfo) { + apiClient.getSystemInfo().then(function (systemInfo) { view.querySelector(".serverNameHeader").innerHTML = systemInfo.ServerName; var localizedVersion = globalize.translate("LabelVersionNumber", systemInfo.Version); - systemInfo.SystemUpdateLevel && "Release" != systemInfo.SystemUpdateLevel && (localizedVersion += " " + globalize.translate("Option" + systemInfo.SystemUpdateLevel).toLowerCase()), systemInfo.CanSelfRestart ? view.querySelector("#btnRestartServer").classList.remove("hide") : view.querySelector("#btnRestartServer").classList.add("hide"), view.querySelector("#appVersionNumber").innerHTML = localizedVersion, systemInfo.SupportsHttps ? view.querySelector("#ports").innerHTML = globalize.translate("LabelRunningOnPorts", systemInfo.HttpServerPortNumber, systemInfo.HttpsPortNumber) : view.querySelector("#ports").innerHTML = globalize.translate("LabelRunningOnPort", systemInfo.HttpServerPortNumber), DashboardPage.renderUrls(view, systemInfo), DashboardPage.renderPaths(view, systemInfo), renderHasPendingRestart(view, apiClient, systemInfo.HasPendingRestart) - }) + + if (systemInfo.SystemUpdateLevel && "Release" != systemInfo.SystemUpdateLevel) { + localizedVersion += " " + globalize.translate("Option" + systemInfo.SystemUpdateLevel).toLowerCase(); + } + + if (systemInfo.CanSelfRestart) { + view.querySelector("#btnRestartServer").classList.remove("hide"); + } else { + view.querySelector("#btnRestartServer").classList.add("hide"); + } + + view.querySelector("#appVersionNumber").innerHTML = localizedVersion; + + if (systemInfo.SupportsHttps) { + view.querySelector("#ports").innerHTML = globalize.translate("LabelRunningOnPorts", systemInfo.HttpServerPortNumber, systemInfo.HttpsPortNumber); + } else { + view.querySelector("#ports").innerHTML = globalize.translate("LabelRunningOnPort", systemInfo.HttpServerPortNumber); + } + + DashboardPage.renderUrls(view, systemInfo); + DashboardPage.renderPaths(view, systemInfo); + renderHasPendingRestart(view, apiClient, systemInfo.HasPendingRestart); + }); } function renderInfo(view, sessions, forceUpdate) { - sessions = filterSessions(sessions), renderActiveConnections(view, sessions), loading.hide() + sessions = filterSessions(sessions); + renderActiveConnections(view, sessions); + loading.hide(); } function pollForInfo(view, apiClient, forceUpdate) { apiClient.getSessions({ ActiveWithinSeconds: 960 - }).then(function(sessions) { - renderInfo(view, sessions, forceUpdate) - }), apiClient.getScheduledTasks().then(function(tasks) { - renderRunningTasks(view, tasks) - }) + }).then(function (sessions) { + renderInfo(view, sessions, forceUpdate); + }); + apiClient.getScheduledTasks().then(function (tasks) { + renderRunningTasks(view, tasks); + }); } function renderActiveConnections(view, sessions) { var html = ""; DashboardPage.sessionsList = sessions; - var parentElement = view.querySelector(".activeDevices"), - cardElem = parentElement.querySelector(".card"); - cardElem && cardElem.classList.add("deadSession"); - for (var i = 0, length = sessions.length; i < length; i++) { - var session = sessions[i], - rowId = "session" + session.Id, - elem = view.querySelector("#" + rowId); - if (elem) DashboardPage.updateSession(elem, session); - else { - var nowPlayingItem = session.NowPlayingItem, - className = "scalableCard card activeSession backdropCard backdropCard-scalable"; - session.TranscodingInfo && session.TranscodingInfo.CompletionPercentage && (className += " transcodingSession"), html += '
', html += '
', html += '
', html += '
', html += '
'; + var parentElement = view.querySelector(".activeDevices"); + var cardElem = parentElement.querySelector(".card"); + + if (cardElem) { + cardElem.classList.add("deadSession"); + } + + for (var i__u = 0, length = sessions.length; i__u < length; i__u++) { + var session = sessions[i__u]; + var rowId = "session" + session.Id; + var elem = view.querySelector("#" + rowId); + + if (elem) { + DashboardPage.updateSession(elem, session); + } else { + var nowPlayingItem = session.NowPlayingItem; + var className = "scalableCard card activeSession backdropCard backdropCard-scalable"; + + if (session.TranscodingInfo && session.TranscodingInfo.CompletionPercentage) { + className += " transcodingSession"; + } + + html += '
'; + html += '
'; + html += '
'; + html += '
'; + html += '
'; var imgUrl = DashboardPage.getNowPlayingImageUrl(nowPlayingItem); - imgUrl ? (html += '
", html += '
' + DashboardPage.getAppSecondaryText(session) + "
", html += "
", html += "
", html += '
' + DashboardPage.getSessionNowPlayingTime(session) + "
", session.TranscodingInfo && session.TranscodingInfo.Framerate ? html += '
' + session.TranscodingInfo.Framerate + " fps
" : html += '
'; + + if (clientImage) { + html += clientImage; + } + + html += '
'; + html += '
' + session.DeviceName + "
"; + html += '
' + DashboardPage.getAppSecondaryText(session) + "
"; + html += "
"; + html += "
"; + html += '
' + DashboardPage.getSessionNowPlayingTime(session) + "
"; + + if (session.TranscodingInfo && session.TranscodingInfo.Framerate) { + html += '
' + session.TranscodingInfo.Framerate + " fps
"; + } else { + html += '
'; + } + var nowPlayingName = DashboardPage.getNowPlayingName(session); + if (html += '
', html += nowPlayingName.html, html += "
", nowPlayingItem && nowPlayingItem.RunTimeTicks) { - html += '' - } else html += ''; - session.TranscodingInfo && session.TranscodingInfo.CompletionPercentage ? html += '' : html += '', html += "
", html += "
", html += "
", html += '
', html += '
'; + html += ''; + } else { + html += ''; + } + + if (session.TranscodingInfo && session.TranscodingInfo.CompletionPercentage) { + html += ''; + } else { + html += ''; + } + + html += "
"; + html += "
"; + html += "
"; + html += '
'; + html += '
'; var btnCssClass; - btnCssClass = session.ServerId && session.NowPlayingItem && session.SupportsRemoteControl && session.DeviceId !== connectionManager.deviceId() ? "" : " hide", html += '', html += '', btnCssClass = session.TranscodingInfo && session.TranscodingInfo.TranscodeReasons && session.TranscodingInfo && session.TranscodingInfo.TranscodeReasons.length ? "" : " hide", html += '', btnCssClass = session.ServerId && -1 !== session.SupportedCommands.indexOf("DisplayMessage") && session.DeviceId !== connectionManager.deviceId() ? "" : " hide", html += '', html += "
", html += '
', html += DashboardPage.getSessionNowPlayingStreamInfo(session), html += "
", html += '
'; + btnCssClass = session.ServerId && session.NowPlayingItem && session.SupportsRemoteControl && session.DeviceId !== connectionManager.deviceId() ? "" : " hide"; + html += ''; + html += ''; + btnCssClass = session.TranscodingInfo && session.TranscodingInfo.TranscodeReasons && session.TranscodingInfo && session.TranscodingInfo.TranscodeReasons.length ? "" : " hide"; + html += ''; + btnCssClass = session.ServerId && -1 !== session.SupportedCommands.indexOf("DisplayMessage") && session.DeviceId !== connectionManager.deviceId() ? "" : " hide"; + html += ''; + html += "
"; + html += '
'; + html += DashboardPage.getSessionNowPlayingStreamInfo(session); + html += "
"; + html += '
'; var userImage = DashboardPage.getUserImage(session); - html += userImage ? '' : '
', html += '
', html += DashboardPage.getUsersHtml(session) || " ", html += "
", html += "
", html += "
", html += "
", html += "
" + html += userImage ? '' : '
'; + html += '
'; + html += DashboardPage.getUsersHtml(session) || " "; + html += "
"; + html += "
"; + html += "
"; + html += "
"; + html += "
"; } } + parentElement.insertAdjacentHTML("beforeend", html); var deadSessionElem = parentElement.querySelector(".deadSession"); - deadSessionElem && deadSessionElem.parentNode.removeChild(deadSessionElem) + + if (deadSessionElem) { + deadSessionElem.parentNode.removeChild(deadSessionElem); + } } function renderRunningTasks(view, tasks) { var html = ""; - tasks = tasks.filter(function(t) { - return "Idle" != t.State && !t.IsHidden - }), tasks.length ? view.querySelector(".runningTasksContainer").classList.remove("hide") : view.querySelector(".runningTasksContainer").classList.add("hide"); - for (var i = 0, length = tasks.length; i < length; i++) { - var task = tasks[i]; + tasks = tasks.filter(function (t__o) { + if ("Idle" != t__o.State) { + return !t__o.IsHidden; + } + + return false; + }); + + if (tasks.length) { + view.querySelector(".runningTasksContainer").classList.remove("hide"); + } else { + view.querySelector(".runningTasksContainer").classList.add("hide"); + } + + for (var i__i = 0, length = tasks.length; i__i < length; i__i++) { + var task = tasks[i__i]; + if (html += "

", html += task.Name + "
", "Running" == task.State) { var progress = (task.CurrentProgressPercentage || 0).toFixed(1); - html += '', html += progress + "%", html += "", html += "" + progress + "%", html += '' - } else "Cancelling" == task.State && (html += '' + globalize.translate("LabelStopping") + ""); - html += "

" - } - view.querySelector("#divRunningTasks").innerHTML = html - } - return window.DashboardPage = { - renderPaths: function(page, systemInfo) { - page.querySelector("#cachePath").innerHTML = systemInfo.CachePath, page.querySelector("#logPath").innerHTML = systemInfo.LogPath, page.querySelector("#transcodingTemporaryPath").innerHTML = systemInfo.TranscodingTempPath, page.querySelector("#metadataPath").innerHTML = systemInfo.InternalMetadataPath - }, - startInterval: function(apiClient) { - apiClient.sendMessage("SessionsStart", "0,1500"), apiClient.sendMessage("ScheduledTasksInfoStart", "0,1000") - }, - stopInterval: function(apiClient) { - apiClient.sendMessage("SessionsStop"), apiClient.sendMessage("ScheduledTasksInfoStop") - }, - getSessionNowPlayingStreamInfo: function(session) { - var html = "", - showTranscodingInfo = !1, - displayPlayMethod = playMethodHelper.getDisplayPlayMethod(session); - if ("DirectStream" === displayPlayMethod ? (html += globalize.translate("sharedcomponents#DirectStreaming"), !0) : "Transcode" == displayPlayMethod ? (html += globalize.translate("sharedcomponents#Transcoding"), session.TranscodingInfo && session.TranscodingInfo.Framerate && (html += " (" + session.TranscodingInfo.Framerate + " fps)"), showTranscodingInfo = !0, !0) : "DirectPlay" == displayPlayMethod && (html += globalize.translate("sharedcomponents#DirectPlaying")), showTranscodingInfo) { - var line = []; - session.TranscodingInfo && (session.TranscodingInfo.Bitrate && (session.TranscodingInfo.Bitrate > 1e6 ? line.push((session.TranscodingInfo.Bitrate / 1e6).toFixed(1) + " Mbps") : line.push(Math.floor(session.TranscodingInfo.Bitrate / 1e3) + " kbps")), session.TranscodingInfo.Container && line.push(session.TranscodingInfo.Container), session.TranscodingInfo.VideoCodec && line.push(session.TranscodingInfo.VideoCodec), session.TranscodingInfo.AudioCodec && session.TranscodingInfo.AudioCodec != session.TranscodingInfo.Container && line.push(session.TranscodingInfo.AudioCodec)), line.length && (html += " - " + line.join(" ")) + html += ''; + html += progress + "%"; + html += ""; + html += "" + progress + "%"; + html += ''; + } else { + if ("Cancelling" == task.State) { + html += '' + globalize.translate("LabelStopping") + ""; } - return html || " " - }, - getSessionNowPlayingTime: function(session) { - var nowPlayingItem = session.NowPlayingItem, - html = ""; - return nowPlayingItem ? (session.PlayState.PositionTicks ? html += datetime.getDisplayRunningTime(session.PlayState.PositionTicks) : html += "--:--:--", html += " / ", nowPlayingItem && nowPlayingItem.RunTimeTicks ? html += datetime.getDisplayRunningTime(nowPlayingItem.RunTimeTicks) : html += "--:--:--", html) : html - }, - getAppSecondaryText: function(session) { - return session.Client + " " + session.ApplicationVersion - }, - getNowPlayingName: function(session) { - var imgUrl = "", - nowPlayingItem = session.NowPlayingItem; - if (!nowPlayingItem) return { + } + + html += "

"; + } + + view.querySelector("#divRunningTasks").innerHTML = html; + } + + window.DashboardPage = { + renderPaths: function (page, systemInfo) { + page.querySelector("#cachePath").innerHTML = systemInfo.CachePath; + page.querySelector("#logPath").innerHTML = systemInfo.LogPath; + page.querySelector("#transcodingTemporaryPath").innerHTML = systemInfo.TranscodingTempPath; + page.querySelector("#metadataPath").innerHTML = systemInfo.InternalMetadataPath; + }, + startInterval: function (apiClient) { + apiClient.sendMessage("SessionsStart", "0,1500"); + apiClient.sendMessage("ScheduledTasksInfoStart", "0,1000"); + }, + stopInterval: function (apiClient) { + apiClient.sendMessage("SessionsStop"); + apiClient.sendMessage("ScheduledTasksInfoStop"); + }, + getSessionNowPlayingStreamInfo: function (session) { + var html = ""; + var showTranscodingInfo = false; + var displayPlayMethod = playMethodHelper.getDisplayPlayMethod(session); + + if ("DirectStream" === displayPlayMethod ? (html += globalize.translate("sharedcomponents#DirectStreaming"), true) : "Transcode" == displayPlayMethod ? (html += globalize.translate("sharedcomponents#Transcoding"), session.TranscodingInfo && session.TranscodingInfo.Framerate && (html += " (" + session.TranscodingInfo.Framerate + " fps)"), showTranscodingInfo = true, true) : "DirectPlay" == displayPlayMethod && (html += globalize.translate("sharedcomponents#DirectPlaying")), showTranscodingInfo) { + var line = []; + + if (session.TranscodingInfo) { + if (session.TranscodingInfo.Bitrate) { + if (session.TranscodingInfo.Bitrate > 1e6) { + line.push((session.TranscodingInfo.Bitrate / 1e6).toFixed(1) + " Mbps"); + } else { + line.push(Math.floor(session.TranscodingInfo.Bitrate / 1e3) + " kbps"); + } + } + + if (session.TranscodingInfo.Container) { + line.push(session.TranscodingInfo.Container); + } + + if (session.TranscodingInfo.VideoCodec) { + line.push(session.TranscodingInfo.VideoCodec); + } + + if (session.TranscodingInfo.AudioCodec && session.TranscodingInfo.AudioCodec != session.TranscodingInfo.Container) { + line.push(session.TranscodingInfo.AudioCodec); + } + } + + if (line.length) { + html += " - " + line.join(" "); + } + } + + return html || " "; + }, + getSessionNowPlayingTime: function (session) { + var nowPlayingItem = session.NowPlayingItem; + var html = ""; + + if (nowPlayingItem) { + if (session.PlayState.PositionTicks) { + html += datetime.getDisplayRunningTime(session.PlayState.PositionTicks); + } else { + html += "--:--:--"; + } + + html += " / "; + + if (nowPlayingItem && nowPlayingItem.RunTimeTicks) { + html += datetime.getDisplayRunningTime(nowPlayingItem.RunTimeTicks); + } else { + html += "--:--:--"; + } + + return html; + } + + return html; + }, + getAppSecondaryText: function (session) { + return session.Client + " " + session.ApplicationVersion; + }, + getNowPlayingName: function (session) { + var imgUrl = ""; + var nowPlayingItem = session.NowPlayingItem; + + if (!nowPlayingItem) { + return { html: "Last seen " + humane_date(session.LastActivityDate), image: imgUrl }; - var topText = itemHelper.getDisplayName(nowPlayingItem), - bottomText = ""; - return nowPlayingItem.Artists && nowPlayingItem.Artists.length ? (bottomText = topText, topText = nowPlayingItem.Artists[0]) : nowPlayingItem.SeriesName || nowPlayingItem.Album ? (bottomText = topText, topText = nowPlayingItem.SeriesName || nowPlayingItem.Album) : nowPlayingItem.ProductionYear && (bottomText = nowPlayingItem.ProductionYear), nowPlayingItem.ImageTags && nowPlayingItem.ImageTags.Logo ? imgUrl = ApiClient.getScaledImageUrl(nowPlayingItem.Id, { + } + + var topText = itemHelper.getDisplayName(nowPlayingItem); + var bottomText = ""; + + if (nowPlayingItem.Artists && nowPlayingItem.Artists.length) { + bottomText = topText; + topText = nowPlayingItem.Artists[0]; + } else { + if (nowPlayingItem.SeriesName || nowPlayingItem.Album) { + bottomText = topText; + topText = nowPlayingItem.SeriesName || nowPlayingItem.Album; + } else { + if (nowPlayingItem.ProductionYear) { + bottomText = nowPlayingItem.ProductionYear; + } + } + } + + if (nowPlayingItem.ImageTags && nowPlayingItem.ImageTags.Logo) { + imgUrl = ApiClient.getScaledImageUrl(nowPlayingItem.Id, { tag: nowPlayingItem.ImageTags.Logo, maxHeight: 24, maxWidth: 130, type: "Logo" - }) : nowPlayingItem.ParentLogoImageTag && (imgUrl = ApiClient.getScaledImageUrl(nowPlayingItem.ParentLogoItemId, { - tag: nowPlayingItem.ParentLogoImageTag, - maxHeight: 24, - maxWidth: 130, - type: "Logo" - })), imgUrl && (topText = ''), { - html: bottomText ? topText + "
" + bottomText : topText, - image: imgUrl + }); + } else { + if (nowPlayingItem.ParentLogoImageTag) { + imgUrl = ApiClient.getScaledImageUrl(nowPlayingItem.ParentLogoItemId, { + tag: nowPlayingItem.ParentLogoImageTag, + maxHeight: 24, + maxWidth: 130, + type: "Logo" + }); } - }, - getUsersHtml: function(session) { - var html = []; - session.UserId && html.push(session.UserName); - for (var i = 0, length = session.AdditionalUsers.length; i < length; i++) html.push(session.AdditionalUsers[i].UserName); - return html.join(", ") - }, - getUserImage: function(session) { - return session.UserId && session.UserPrimaryImageTag ? ApiClient.getUserImageUrl(session.UserId, { + } + + if (imgUrl) { + topText = ''; + } + + return { + html: bottomText ? topText + "
" + bottomText : topText, + image: imgUrl + }; + }, + getUsersHtml: function (session) { + var html = []; + + if (session.UserId) { + html.push(session.UserName); + } + + for (var i__p = 0, length = session.AdditionalUsers.length; i__p < length; i__p++) { + html.push(session.AdditionalUsers[i__p].UserName); + } + + return html.join(", "); + }, + getUserImage: function (session) { + if (session.UserId && session.UserPrimaryImageTag) { + return ApiClient.getUserImageUrl(session.UserId, { tag: session.UserPrimaryImageTag, height: 24, type: "Primary" - }) : null - }, - updateSession: function(row, session) { - row.classList.remove("deadSession"); - var nowPlayingItem = session.NowPlayingItem; - nowPlayingItem ? row.classList.add("playingSession") : row.classList.remove("playingSession"), session.ServerId && -1 !== session.SupportedCommands.indexOf("DisplayMessage") && session.DeviceId !== connectionManager.deviceId() ? row.querySelector(".btnSessionSendMessage").classList.remove("hide") : row.querySelector(".btnSessionSendMessage").classList.add("hide"), session.TranscodingInfo && session.TranscodingInfo.TranscodeReasons && session.TranscodingInfo && session.TranscodingInfo.TranscodeReasons.length ? row.querySelector(".btnSessionInfo").classList.remove("hide") : row.querySelector(".btnSessionInfo").classList.add("hide"); - var btnSessionPlayPause = row.querySelector(".btnSessionPlayPause"); - session.ServerId && nowPlayingItem && session.SupportsRemoteControl && session.DeviceId !== connectionManager.deviceId() ? (btnSessionPlayPause.classList.remove("hide"), row.querySelector(".btnSessionStop").classList.remove("hide")) : (btnSessionPlayPause.classList.add("hide"), row.querySelector(".btnSessionStop").classList.add("hide")), session.PlayState && session.PlayState.IsPaused ? btnSessionPlayPause.querySelector("i").innerHTML = "" : btnSessionPlayPause.querySelector("i").innerHTML = "", row.querySelector(".sessionNowPlayingStreamInfo").innerHTML = DashboardPage.getSessionNowPlayingStreamInfo(session), row.querySelector(".sessionNowPlayingTime").innerHTML = DashboardPage.getSessionNowPlayingTime(session), row.querySelector(".sessionUserName").innerHTML = DashboardPage.getUsersHtml(session) || " ", row.querySelector(".sessionAppSecondaryText").innerHTML = DashboardPage.getAppSecondaryText(session), row.querySelector(".sessionTranscodingFramerate").innerHTML = session.TranscodingInfo && session.TranscodingInfo.Framerate ? session.TranscodingInfo.Framerate + " fps" : ""; - var nowPlayingName = DashboardPage.getNowPlayingName(session), - nowPlayingInfoElem = row.querySelector(".sessionNowPlayingInfo"); - nowPlayingName.image && nowPlayingName.image == nowPlayingInfoElem.getAttribute("data-imgsrc") || (nowPlayingInfoElem.innerHTML = nowPlayingName.html, nowPlayingInfoElem.setAttribute("data-imgsrc", nowPlayingName.image || "")); - var playbackProgressElem = row.querySelector(".playbackProgress"); - if (playbackProgressElem) - if (nowPlayingItem && nowPlayingItem.RunTimeTicks) { - var position = session.PlayState.PositionTicks || 0, - value = 100 * position / nowPlayingItem.RunTimeTicks; - playbackProgressElem.classList.remove("hide"), playbackProgressElem.value = value - } else playbackProgressElem.classList.add("hide"); - var transcodingProgress = row.querySelector(".transcodingProgress"); - session.TranscodingInfo && session.TranscodingInfo.CompletionPercentage ? (row.classList.add("transcodingSession"), transcodingProgress.value = session.TranscodingInfo.CompletionPercentage, transcodingProgress.classList.remove("hide")) : (transcodingProgress.classList.add("hide"), row.classList.remove("transcodingSession")); - var imgUrl = DashboardPage.getNowPlayingImageUrl(nowPlayingItem) || "", - imgElem = row.querySelector(".sessionNowPlayingContent"); - imgUrl != imgElem.getAttribute("data-src") && (imgElem.style.backgroundImage = imgUrl ? "url('" + imgUrl + "')" : "", imgElem.setAttribute("data-src", imgUrl), imgUrl ? imgElem.classList.add("sessionNowPlayingContent-withbackground") : imgElem.classList.remove("sessionNowPlayingContent-withbackground")) - }, - getClientImage: function(connection) { - var iconUrl = (connection.Client.toLowerCase(), connection.DeviceName.toLowerCase(), connection.AppIconUrl); - return iconUrl ? (-1 === iconUrl.indexOf("://") && (iconUrl = ApiClient.getUrl(iconUrl)), "") : null - }, - getNowPlayingImageUrl: function(item) { - if (item && item.BackdropImageTags && item.BackdropImageTags.length) return ApiClient.getScaledImageUrl(item.Id, { + }); + } + + return null; + }, + updateSession: function (row, session) { + row.classList.remove("deadSession"); + var nowPlayingItem = session.NowPlayingItem; + + if (nowPlayingItem) { + row.classList.add("playingSession"); + } else { + row.classList.remove("playingSession"); + } + + if (session.ServerId && -1 !== session.SupportedCommands.indexOf("DisplayMessage") && session.DeviceId !== connectionManager.deviceId()) { + row.querySelector(".btnSessionSendMessage").classList.remove("hide"); + } else { + row.querySelector(".btnSessionSendMessage").classList.add("hide"); + } + + if (session.TranscodingInfo && session.TranscodingInfo.TranscodeReasons && session.TranscodingInfo && session.TranscodingInfo.TranscodeReasons.length) { + row.querySelector(".btnSessionInfo").classList.remove("hide"); + } else { + row.querySelector(".btnSessionInfo").classList.add("hide"); + } + + var btnSessionPlayPause = row.querySelector(".btnSessionPlayPause"); + + if (session.ServerId && nowPlayingItem && session.SupportsRemoteControl && session.DeviceId !== connectionManager.deviceId()) { + btnSessionPlayPause.classList.remove("hide"); + row.querySelector(".btnSessionStop").classList.remove("hide"); + } else { + btnSessionPlayPause.classList.add("hide"); + row.querySelector(".btnSessionStop").classList.add("hide"); + } + + if (session.PlayState && session.PlayState.IsPaused) { + btnSessionPlayPause.querySelector("i").innerHTML = ""; + } else { + btnSessionPlayPause.querySelector("i").innerHTML = ""; + } + + row.querySelector(".sessionNowPlayingStreamInfo").innerHTML = DashboardPage.getSessionNowPlayingStreamInfo(session); + row.querySelector(".sessionNowPlayingTime").innerHTML = DashboardPage.getSessionNowPlayingTime(session); + row.querySelector(".sessionUserName").innerHTML = DashboardPage.getUsersHtml(session) || " "; + row.querySelector(".sessionAppSecondaryText").innerHTML = DashboardPage.getAppSecondaryText(session); + row.querySelector(".sessionTranscodingFramerate").innerHTML = session.TranscodingInfo && session.TranscodingInfo.Framerate ? session.TranscodingInfo.Framerate + " fps" : ""; + var nowPlayingName = DashboardPage.getNowPlayingName(session); + var nowPlayingInfoElem = row.querySelector(".sessionNowPlayingInfo"); + + if (!(nowPlayingName.image && nowPlayingName.image == nowPlayingInfoElem.getAttribute("data-imgsrc"))) { + nowPlayingInfoElem.innerHTML = nowPlayingName.html; + nowPlayingInfoElem.setAttribute("data-imgsrc", nowPlayingName.image || ""); + } + + var playbackProgressElem = row.querySelector(".playbackProgress"); + + if (playbackProgressElem) { + if (nowPlayingItem && nowPlayingItem.RunTimeTicks) { + var position = session.PlayState.PositionTicks || 0; + var value = 100 * position / nowPlayingItem.RunTimeTicks; + playbackProgressElem.classList.remove("hide"); + playbackProgressElem.value = value; + } else { + playbackProgressElem.classList.add("hide"); + } + } + + var transcodingProgress = row.querySelector(".transcodingProgress"); + + if (session.TranscodingInfo && session.TranscodingInfo.CompletionPercentage) { + row.classList.add("transcodingSession"); + transcodingProgress.value = session.TranscodingInfo.CompletionPercentage; + transcodingProgress.classList.remove("hide"); + } else { + transcodingProgress.classList.add("hide"); + row.classList.remove("transcodingSession"); + } + + var imgUrl = DashboardPage.getNowPlayingImageUrl(nowPlayingItem) || ""; + var imgElem = row.querySelector(".sessionNowPlayingContent"); + + if (imgUrl != imgElem.getAttribute("data-src")) { + imgElem.style.backgroundImage = imgUrl ? "url('" + imgUrl + "')" : ""; + imgElem.setAttribute("data-src", imgUrl); + + if (imgUrl) { + imgElem.classList.add("sessionNowPlayingContent-withbackground"); + } else { + imgElem.classList.remove("sessionNowPlayingContent-withbackground"); + } + } + }, + getClientImage: function (connection) { + var iconUrl = (connection.Client.toLowerCase(), connection.DeviceName.toLowerCase(), connection.AppIconUrl); + + if (iconUrl) { + if (-1 === iconUrl.indexOf("://")) { + iconUrl = ApiClient.getUrl(iconUrl); + } + + return ""; + } + + return null; + }, + getNowPlayingImageUrl: function (item) { + if (item && item.BackdropImageTags && item.BackdropImageTags.length) { + return ApiClient.getScaledImageUrl(item.Id, { type: "Backdrop", width: 275, tag: item.BackdropImageTags[0] }); - if (item && item.ParentBackdropImageTags && item.ParentBackdropImageTags.length) return ApiClient.getScaledImageUrl(item.ParentBackdropItemId, { + } + + if (item && item.ParentBackdropImageTags && item.ParentBackdropImageTags.length) { + return ApiClient.getScaledImageUrl(item.ParentBackdropItemId, { type: "Backdrop", width: 275, tag: item.ParentBackdropImageTags[0] }); - if (item && item.BackdropImageTag) return ApiClient.getScaledImageUrl(item.BackdropItemId, { + } + + if (item && item.BackdropImageTag) { + return ApiClient.getScaledImageUrl(item.BackdropItemId, { type: "Backdrop", width: 275, tag: item.BackdropImageTag }); - var imageTags = (item || {}).ImageTags || {}; - return item && imageTags.Thumb ? ApiClient.getScaledImageUrl(item.Id, { + } + + var imageTags = (item || {}).ImageTags || {}; + + if (item && imageTags.Thumb) { + return ApiClient.getScaledImageUrl(item.Id, { type: "Thumb", width: 275, tag: imageTags.Thumb - }) : item && item.ParentThumbImageTag ? ApiClient.getScaledImageUrl(item.ParentThumbItemId, { + }); + } + + if (item && item.ParentThumbImageTag) { + return ApiClient.getScaledImageUrl(item.ParentThumbItemId, { type: "Thumb", width: 275, tag: item.ParentThumbImageTag - }) : item && item.ThumbImageTag ? ApiClient.getScaledImageUrl(item.ThumbItemId, { + }); + } + + if (item && item.ThumbImageTag) { + return ApiClient.getScaledImageUrl(item.ThumbItemId, { type: "Thumb", width: 275, tag: item.ThumbImageTag - }) : item && imageTags.Primary ? ApiClient.getScaledImageUrl(item.Id, { + }); + } + + if (item && imageTags.Primary) { + return ApiClient.getScaledImageUrl(item.Id, { type: "Primary", width: 275, tag: imageTags.Primary - }) : item && item.PrimaryImageTag ? ApiClient.getScaledImageUrl(item.PrimaryImageItemId, { + }); + } + + if (item && item.PrimaryImageTag) { + return ApiClient.getScaledImageUrl(item.PrimaryImageItemId, { type: "Primary", width: 275, tag: item.PrimaryImageTag - }) : null - }, - systemUpdateTaskKey: "SystemUpdateTask", - renderUrls: function(page, systemInfo) { - var helpButton = '' + globalize.translate("ButtonHelp") + "", - localUrlElem = page.querySelector(".localUrl"), - externalUrlElem = page.querySelector(".externalUrl"); - if (systemInfo.LocalAddress) { - var localAccessHtml = globalize.translate("LabelLocalAccessUrl", '' + systemInfo.LocalAddress + ""); - localUrlElem.innerHTML = localAccessHtml + helpButton, localUrlElem.classList.remove("hide") - } else localUrlElem.classList.add("hide"); - if (systemInfo.WanAddress) { - var externalUrl = systemInfo.WanAddress, - remoteAccessHtml = globalize.translate("LabelRemoteAccessUrl", '' + externalUrl + ""); - externalUrlElem.innerHTML = remoteAccessHtml + helpButton, externalUrlElem.classList.remove("hide") - } else externalUrlElem.classList.add("hide") - }, - stopTask: function(btn, id) { - var page = dom.parentWithClass(btn, "page"); - ApiClient.stopScheduledTask(id).then(function() { - pollForInfo(page, ApiClient) - }) - }, - restart: function(btn) { - require(["confirm"], function(confirm) { - confirm({ - title: globalize.translate("HeaderRestart"), - text: globalize.translate("MessageConfirmRestart"), - confirmText: globalize.translate("ButtonRestart"), - primary: "cancel" - }).then(function() { - var page = dom.parentWithClass(btn, "page"); - buttonEnabled(page.querySelector("#btnRestartServer"), !1), buttonEnabled(page.querySelector("#btnShutdown"), !1), Dashboard.restartServer() - }) - }) - }, - shutdown: function(btn) { - require(["confirm"], function(confirm) { - confirm({ - title: globalize.translate("HeaderShutdown"), - text: globalize.translate("MessageConfirmShutdown"), - confirmText: globalize.translate("ButtonShutdown"), - primary: "cancel" - }).then(function() { - var page = dom.parentWithClass(btn, "page"); - buttonEnabled(page.querySelector("#btnRestartServer"), !1), buttonEnabled(page.querySelector("#btnShutdown"), !1), ApiClient.shutdownServer() - }) - }) + }); + } + + return null; + }, + systemUpdateTaskKey: "SystemUpdateTask", + renderUrls: function (page, systemInfo) { + var helpButton = '' + globalize.translate("ButtonHelp") + ""; + var localUrlElem = page.querySelector(".localUrl"); + var externalUrlElem = page.querySelector(".externalUrl"); + + if (systemInfo.LocalAddress) { + var localAccessHtml = globalize.translate("LabelLocalAccessUrl", '' + systemInfo.LocalAddress + ""); + localUrlElem.innerHTML = localAccessHtml + helpButton; + localUrlElem.classList.remove("hide"); + } else { + localUrlElem.classList.add("hide"); + } + + if (systemInfo.WanAddress) { + var externalUrl = systemInfo.WanAddress; + var remoteAccessHtml = globalize.translate("LabelRemoteAccessUrl", '' + externalUrl + ""); + externalUrlElem.innerHTML = remoteAccessHtml + helpButton; + externalUrlElem.classList.remove("hide"); + } else { + externalUrlElem.classList.add("hide"); } }, - function(view, params) { - function onRestartRequired(e, apiClient) { - apiClient.serverId() === serverId && renderHasPendingRestart(view, apiClient, !0) + stopTask: function (btn, id) { + var page = dom.parentWithClass(btn, "page"); + ApiClient.stopScheduledTask(id).then(function () { + pollForInfo(page, ApiClient); + }); + }, + restart: function (btn) { + require(["confirm"], function (confirm) { + confirm({ + title: globalize.translate("HeaderRestart"), + text: globalize.translate("MessageConfirmRestart"), + confirmText: globalize.translate("ButtonRestart"), + primary: "cancel" + }).then(function () { + var page = dom.parentWithClass(btn, "page"); + buttonEnabled(page.querySelector("#btnRestartServer"), false); + buttonEnabled(page.querySelector("#btnShutdown"), false); + Dashboard.restartServer(); + }); + }); + }, + shutdown: function (btn) { + require(["confirm"], function (confirm) { + confirm({ + title: globalize.translate("HeaderShutdown"), + text: globalize.translate("MessageConfirmShutdown"), + confirmText: globalize.translate("ButtonShutdown"), + primary: "cancel" + }).then(function () { + var page = dom.parentWithClass(btn, "page"); + buttonEnabled(page.querySelector("#btnRestartServer"), false); + buttonEnabled(page.querySelector("#btnShutdown"), false); + ApiClient.shutdownServer(); + }); + }); + } + }; + return function (view, params) { + function onRestartRequired(e__a, apiClient) { + if (apiClient.serverId() === serverId) { + renderHasPendingRestart(view, apiClient, true); } + } - function onServerShuttingDown(e, apiClient) { - apiClient.serverId() === serverId && renderHasPendingRestart(view, apiClient, !0) + function onServerShuttingDown(e__s, apiClient) { + if (apiClient.serverId() === serverId) { + renderHasPendingRestart(view, apiClient, true); } + } - function onServerRestarting(e, apiClient) { - apiClient.serverId() === serverId && renderHasPendingRestart(view, apiClient, !0) + function onServerRestarting(e__d, apiClient) { + if (apiClient.serverId() === serverId) { + renderHasPendingRestart(view, apiClient, true); } + } - function onPackageInstalling(e, apiClient) { - apiClient.serverId() === serverId && (pollForInfo(view, apiClient, !0), reloadSystemInfo(view, apiClient)) + function onPackageInstalling(e__f, apiClient) { + if (apiClient.serverId() === serverId) { + pollForInfo(view, apiClient, true); + reloadSystemInfo(view, apiClient); } + } - function onPackageInstallationCompleted(e, apiClient) { - apiClient.serverId() === serverId && (pollForInfo(view, apiClient, !0), reloadSystemInfo(view, apiClient)) + function onPackageInstallationCompleted(e__g, apiClient) { + if (apiClient.serverId() === serverId) { + pollForInfo(view, apiClient, true); + reloadSystemInfo(view, apiClient); } + } - function onSessionsUpdate(e, apiClient, info) { - apiClient.serverId() === serverId && renderInfo(view, info) + function onSessionsUpdate(e__h, apiClient, info) { + if (apiClient.serverId() === serverId) { + renderInfo(view, info); } + } - function onScheduledTasksUpdate(e, apiClient, info) { - apiClient.serverId() === serverId && renderRunningTasks(view, info) + function onScheduledTasksUpdate(e__j, apiClient, info) { + if (apiClient.serverId() === serverId) { + renderRunningTasks(view, info); } - var serverId = ApiClient.serverId(); - view.querySelector(".btnConnectionHelp").addEventListener("click", onConnectionHelpClick), view.querySelector(".btnEditServerName").addEventListener("click", onEditServerNameClick), view.querySelector(".activeDevices").addEventListener("click", onActiveDevicesClick), view.addEventListener("viewshow", function() { - var page = this, - apiClient = ApiClient; - if (apiClient) { - loading.show(), pollForInfo(page, apiClient), DashboardPage.startInterval(apiClient), events.on(serverNotifications, "RestartRequired", onRestartRequired), events.on(serverNotifications, "ServerShuttingDown", onServerShuttingDown), events.on(serverNotifications, "ServerRestarting", onServerRestarting), events.on(serverNotifications, "PackageInstalling", onPackageInstalling), events.on(serverNotifications, "PackageInstallationCompleted", onPackageInstallationCompleted), events.on(serverNotifications, "Sessions", onSessionsUpdate), - events.on(serverNotifications, "ScheduledTasksInfo", onScheduledTasksUpdate), DashboardPage.lastAppUpdateCheck = null, reloadSystemInfo(page, ApiClient), page.userActivityLog || (page.userActivityLog = new ActivityLog({ - serverId: ApiClient.serverId(), - element: page.querySelector(".userActivityItems") - })), ApiClient.isMinServerVersion("3.4.1.25") && (page.serverActivityLog || (page.serverActivityLog = new ActivityLog({ + } + + var serverId = ApiClient.serverId(); + view.querySelector(".btnConnectionHelp").addEventListener("click", onConnectionHelpClick); + view.querySelector(".btnEditServerName").addEventListener("click", onEditServerNameClick); + view.querySelector(".activeDevices").addEventListener("click", onActiveDevicesClick); + view.addEventListener("viewshow", function () { + var page = this; + var apiClient = ApiClient; + + if (apiClient) { + loading.show(); + pollForInfo(page, apiClient); + DashboardPage.startInterval(apiClient); + events.on(serverNotifications, "RestartRequired", onRestartRequired); + events.on(serverNotifications, "ServerShuttingDown", onServerShuttingDown); + events.on(serverNotifications, "ServerRestarting", onServerRestarting); + events.on(serverNotifications, "PackageInstalling", onPackageInstalling); + events.on(serverNotifications, "PackageInstallationCompleted", onPackageInstallationCompleted); + events.on(serverNotifications, "Sessions", onSessionsUpdate); + events.on(serverNotifications, "ScheduledTasksInfo", onScheduledTasksUpdate); + DashboardPage.lastAppUpdateCheck = null; + reloadSystemInfo(page, ApiClient); + + if (!page.userActivityLog) { + page.userActivityLog = new ActivityLog({ + serverId: ApiClient.serverId(), + element: page.querySelector(".userActivityItems") + }); + } + + if (ApiClient.isMinServerVersion("3.4.1.25")) { + if (!page.serverActivityLog) { + page.serverActivityLog = new ActivityLog({ serverId: ApiClient.serverId(), element: page.querySelector(".serverActivityItems") - }))); - refreshActiveRecordings(view, apiClient), loading.hide() + }); + } } - }), view.addEventListener("viewbeforehide", function() { - var apiClient = ApiClient; - // TODO we currently don't support packages and thus these events are useless - events.off(serverNotifications, "RestartRequired", onRestartRequired), events.off(serverNotifications, "ServerShuttingDown", onServerShuttingDown), events.off(serverNotifications, "ServerRestarting", onServerRestarting), events.off(serverNotifications, "PackageInstalling", onPackageInstalling), events.off(serverNotifications, "PackageInstallationCompleted", onPackageInstallationCompleted), events.off(serverNotifications, "Sessions", onSessionsUpdate), events.off(serverNotifications, "ScheduledTasksInfo", onScheduledTasksUpdate), apiClient && DashboardPage.stopInterval(apiClient) - }), view.addEventListener("viewdestroy", function() { - var page = this, - userActivityLog = page.userActivityLog; - userActivityLog && userActivityLog.destroy(); - var serverActivityLog = page.serverActivityLog; - serverActivityLog && serverActivityLog.destroy() - }) - } + + refreshActiveRecordings(view, apiClient); + loading.hide(); + } + }); + view.addEventListener("viewbeforehide", function () { + var apiClient = ApiClient; // TODO we currently don't support packages and thus these events are useless + + events.off(serverNotifications, "RestartRequired", onRestartRequired); + events.off(serverNotifications, "ServerShuttingDown", onServerShuttingDown); + events.off(serverNotifications, "ServerRestarting", onServerRestarting); + events.off(serverNotifications, "PackageInstalling", onPackageInstalling); + events.off(serverNotifications, "PackageInstallationCompleted", onPackageInstallationCompleted); + events.off(serverNotifications, "Sessions", onSessionsUpdate); + events.off(serverNotifications, "ScheduledTasksInfo", onScheduledTasksUpdate); + + if (apiClient) { + DashboardPage.stopInterval(apiClient); + } + }); + view.addEventListener("viewdestroy", function () { + var page = this; + var userActivityLog = page.userActivityLog; + + if (userActivityLog) { + userActivityLog.destroy(); + } + + var serverActivityLog = page.serverActivityLog; + + if (serverActivityLog) { + serverActivityLog.destroy(); + } + }); + }; }); diff --git a/src/scripts/livetvsuggested.js b/src/scripts/livetvsuggested.js index 653097b146..4c33dcba16 100644 --- a/src/scripts/livetvsuggested.js +++ b/src/scripts/livetvsuggested.js @@ -1,129 +1,155 @@ -define(["layoutManager", "userSettings", "inputManager", "loading", "globalize", "libraryBrowser", "mainTabsManager", "cardBuilder", "apphost", "imageLoader", "scrollStyles", "emby-itemscontainer", "emby-tabs", "emby-button"], function(layoutManager, userSettings, inputManager, loading, globalize, libraryBrowser, mainTabsManager, cardBuilder, appHost, imageLoader) { +define(["layoutManager", "userSettings", "inputManager", "loading", "globalize", "libraryBrowser", "mainTabsManager", "cardBuilder", "apphost", "imageLoader", "scrollStyles", "emby-itemscontainer", "emby-tabs", "emby-button"], function (layoutManager, userSettings, inputManager, loading, globalize, libraryBrowser, mainTabsManager, cardBuilder, appHost, imageLoader) { "use strict"; function enableScrollX() { - return !layoutManager.desktop + return !layoutManager.desktop; } function getBackdropShape() { - return enableScrollX() ? "overflowBackdrop" : "backdrop" + if (enableScrollX()) { + return "overflowBackdrop"; + } + + return "backdrop"; } function getPortraitShape() { - return enableScrollX() ? "overflowPortrait" : "portrait" + if (enableScrollX()) { + return "overflowPortrait"; + } + + return "portrait"; } function getLimit() { - return enableScrollX() ? 12 : 9 + if (enableScrollX()) { + return 12; + } + + return 9; } function loadRecommendedPrograms(page) { loading.show(); var limit = getLimit(); - enableScrollX() && (limit *= 2), ApiClient.getLiveTvRecommendedPrograms({ + + if (enableScrollX()) { + limit *= 2; + } + + ApiClient.getLiveTvRecommendedPrograms({ userId: Dashboard.getCurrentUserId(), - IsAiring: !0, + IsAiring: true, limit: limit, ImageTypeLimit: 1, EnableImageTypes: "Primary,Thumb,Backdrop", - EnableTotalRecordCount: !1, + EnableTotalRecordCount: false, Fields: "ChannelInfo,PrimaryImageAspectRatio" - }).then(function(result) { + }).then(function (result) { renderItems(page, result.Items, "activeProgramItems", "play", { - showAirDateTime: !1, - showAirEndTime: !0 - }), loading.hide() - }) + showAirDateTime: false, + showAirEndTime: true + }); + loading.hide(); + }); } function reload(page, enableFullRender) { - enableFullRender && (loadRecommendedPrograms(page), ApiClient.getLiveTvPrograms({ - userId: Dashboard.getCurrentUserId(), - HasAired: !1, - limit: getLimit(), - IsMovie: !1, - IsSports: !1, - IsKids: !1, - IsNews: !1, - IsSeries: !0, - EnableTotalRecordCount: !1, - Fields: "ChannelInfo,PrimaryImageAspectRatio", - EnableImageTypes: "Primary,Thumb" - }).then(function(result) { - renderItems(page, result.Items, "upcomingEpisodeItems") - }), ApiClient.getLiveTvPrograms({ - userId: Dashboard.getCurrentUserId(), - HasAired: !1, - limit: getLimit(), - IsMovie: !0, - EnableTotalRecordCount: !1, - Fields: "ChannelInfo", - EnableImageTypes: "Primary,Thumb" - }).then(function(result) { - renderItems(page, result.Items, "upcomingTvMovieItems", null, { - shape: getPortraitShape(), - preferThumb: null, - showParentTitle: !1 - }) - }), ApiClient.getLiveTvPrograms({ - userId: Dashboard.getCurrentUserId(), - HasAired: !1, - limit: getLimit(), - IsSports: !0, - EnableTotalRecordCount: !1, - Fields: "ChannelInfo,PrimaryImageAspectRatio", - EnableImageTypes: "Primary,Thumb" - }).then(function(result) { - renderItems(page, result.Items, "upcomingSportsItems") - }), ApiClient.getLiveTvPrograms({ - userId: Dashboard.getCurrentUserId(), - HasAired: !1, - limit: getLimit(), - IsKids: !0, - EnableTotalRecordCount: !1, - Fields: "ChannelInfo,PrimaryImageAspectRatio", - EnableImageTypes: "Primary,Thumb" - }).then(function(result) { - renderItems(page, result.Items, "upcomingKidsItems") - }), ApiClient.getLiveTvPrograms({ - userId: Dashboard.getCurrentUserId(), - HasAired: !1, - limit: getLimit(), - IsNews: !0, - EnableTotalRecordCount: !1, - Fields: "ChannelInfo,PrimaryImageAspectRatio", - EnableImageTypes: "Primary,Thumb" - }).then(function(result) { - renderItems(page, result.Items, "upcomingNewsItems", null, { - showParentTitleOrTitle: !0, - showTitle: !1, - showParentTitle: !1 - }) - })) + if (enableFullRender) { + loadRecommendedPrograms(page); + ApiClient.getLiveTvPrograms({ + userId: Dashboard.getCurrentUserId(), + HasAired: false, + limit: getLimit(), + IsMovie: false, + IsSports: false, + IsKids: false, + IsNews: false, + IsSeries: true, + EnableTotalRecordCount: false, + Fields: "ChannelInfo,PrimaryImageAspectRatio", + EnableImageTypes: "Primary,Thumb" + }).then(function (result) { + renderItems(page, result.Items, "upcomingEpisodeItems"); + }); + ApiClient.getLiveTvPrograms({ + userId: Dashboard.getCurrentUserId(), + HasAired: false, + limit: getLimit(), + IsMovie: true, + EnableTotalRecordCount: false, + Fields: "ChannelInfo", + EnableImageTypes: "Primary,Thumb" + }).then(function (result) { + renderItems(page, result.Items, "upcomingTvMovieItems", null, { + shape: getPortraitShape(), + preferThumb: null, + showParentTitle: false + }); + }); + ApiClient.getLiveTvPrograms({ + userId: Dashboard.getCurrentUserId(), + HasAired: false, + limit: getLimit(), + IsSports: true, + EnableTotalRecordCount: false, + Fields: "ChannelInfo,PrimaryImageAspectRatio", + EnableImageTypes: "Primary,Thumb" + }).then(function (result) { + renderItems(page, result.Items, "upcomingSportsItems"); + }); + ApiClient.getLiveTvPrograms({ + userId: Dashboard.getCurrentUserId(), + HasAired: false, + limit: getLimit(), + IsKids: true, + EnableTotalRecordCount: false, + Fields: "ChannelInfo,PrimaryImageAspectRatio", + EnableImageTypes: "Primary,Thumb" + }).then(function (result) { + renderItems(page, result.Items, "upcomingKidsItems"); + }); + ApiClient.getLiveTvPrograms({ + userId: Dashboard.getCurrentUserId(), + HasAired: false, + limit: getLimit(), + IsNews: true, + EnableTotalRecordCount: false, + Fields: "ChannelInfo,PrimaryImageAspectRatio", + EnableImageTypes: "Primary,Thumb" + }).then(function (result) { + renderItems(page, result.Items, "upcomingNewsItems", null, { + showParentTitleOrTitle: true, + showTitle: false, + showParentTitle: false + }); + }); + } } function renderItems(page, items, sectionClass, overlayButton, cardOptions) { var html = cardBuilder.getCardsHtml(Object.assign({ - items: items, - preferThumb: "auto", - inheritThumb: !1, - shape: enableScrollX() ? "autooverflow" : "auto", - defaultShape: getBackdropShape(), - showParentTitle: !0, - showTitle: !0, - centerText: !0, - coverImage: !0, - overlayText: !1, - lazy: !0, - overlayPlayButton: "play" === overlayButton, - overlayMoreButton: "more" === overlayButton, - overlayInfoButton: "info" === overlayButton, - allowBottomPadding: !enableScrollX(), - showAirTime: !0, - showAirDateTime: !0 - }, cardOptions || {})), - elem = page.querySelector("." + sectionClass); - elem.innerHTML = html, imageLoader.lazyChildren(elem) + items: items, + preferThumb: "auto", + inheritThumb: false, + shape: enableScrollX() ? "autooverflow" : "auto", + defaultShape: getBackdropShape(), + showParentTitle: true, + showTitle: true, + centerText: true, + coverImage: true, + overlayText: false, + lazy: true, + overlayPlayButton: "play" === overlayButton, + overlayMoreButton: "more" === overlayButton, + overlayInfoButton: "info" === overlayButton, + allowBottomPadding: !enableScrollX(), + showAirTime: true, + showAirDateTime: true + }, cardOptions || {})); + var elem = page.querySelector("." + sectionClass); + elem.innerHTML = html; + imageLoader.lazyChildren(elem); } function getTabs() { @@ -142,119 +168,227 @@ define(["layoutManager", "userSettings", "inputManager", "loading", "globalize", }, { name: globalize.translate("ButtonSearch"), cssClass: "searchTabButton" - }] + }]; } function setScrollClasses(elem, scrollX) { - scrollX ? (elem.classList.add("hiddenScrollX"), layoutManager.tv && elem.classList.add("smoothScrollX"), elem.classList.add("scrollX"), elem.classList.remove("vertical-wrap")) : (elem.classList.remove("hiddenScrollX"), elem.classList.remove("smoothScrollX"), elem.classList.remove("scrollX"), elem.classList.add("vertical-wrap")) + if (scrollX) { + elem.classList.add("hiddenScrollX"); + + if (layoutManager.tv) { + elem.classList.add("smoothScrollX"); + } + + elem.classList.add("scrollX"); + elem.classList.remove("vertical-wrap"); + } else { + elem.classList.remove("hiddenScrollX"); + elem.classList.remove("smoothScrollX"); + elem.classList.remove("scrollX"); + elem.classList.add("vertical-wrap"); + } } function getDefaultTabIndex(folderId) { switch (userSettings.get("landing-" + folderId)) { case "guide": return 1; + default: - return 0 + return 0; } } - return function(view, params) { + + return function (view, params) { function enableFullRender() { - return (new Date).getTime() - lastFullRender > 3e5 + return new Date().getTime() - lastFullRender > 3e5; } - function onBeforeTabChange(e) { - preLoadTab(view, parseInt(e.detail.selectedTabIndex)) + function onBeforeTabChange(e__q) { + preLoadTab(view, parseInt(e__q.detail.selectedTabIndex)); } - function onTabChange(e) { - var previousTabController = tabControllers[parseInt(e.detail.previousIndex)]; - previousTabController && previousTabController.onHide && previousTabController.onHide(), loadTab(view, parseInt(e.detail.selectedTabIndex)) + function onTabChange(e__w) { + var previousTabController = tabControllers[parseInt(e__w.detail.previousIndex)]; + + if (previousTabController && previousTabController.onHide) { + previousTabController.onHide(); + } + + loadTab(view, parseInt(e__w.detail.selectedTabIndex)); } function getTabContainers() { - return view.querySelectorAll(".pageTabContent") + return view.querySelectorAll(".pageTabContent"); } function initTabs() { - mainTabsManager.setTabs(view, currentTabIndex, getTabs, getTabContainers, onBeforeTabChange, onTabChange) + mainTabsManager.setTabs(view, currentTabIndex, getTabs, getTabContainers, onBeforeTabChange, onTabChange); } function getTabController(page, index, callback) { var depends = []; + switch (index) { case 0: break; + case 1: depends.push("scripts/livetvguide"); break; + case 2: depends.push("scripts/livetvchannels"); break; + case 3: depends.push("scripts/livetvrecordings"); break; + case 4: depends.push("scripts/livetvschedule"); break; + case 5: depends.push("scripts/livetvseriestimers"); break; + case 6: - depends.push("scripts/searchtab") + depends.push("scripts/searchtab"); } - require(depends, function(controllerFactory) { + + require(depends, function (controllerFactory) { var tabContent; - 0 == index && (tabContent = view.querySelector(".pageTabContent[data-index='" + index + "']"), self.tabContent = tabContent); + + if (0 == index) { + tabContent = view.querySelector(".pageTabContent[data-index='" + index + "']"); + self.tabContent = tabContent; + } + var controller = tabControllers[index]; - controller || (tabContent = view.querySelector(".pageTabContent[data-index='" + index + "']"), controller = 0 === index ? self : 6 === index ? new controllerFactory(view, tabContent, { - collectionType: "livetv" - }) : new controllerFactory(view, params, tabContent), tabControllers[index] = controller, controller.initTab && controller.initTab()), callback(controller) - }) + + if (!controller) { + tabContent = view.querySelector(".pageTabContent[data-index='" + index + "']"); + controller = 0 === index ? self : 6 === index ? new controllerFactory(view, tabContent, { + collectionType: "livetv" + }) : new controllerFactory(view, params, tabContent); + tabControllers[index] = controller; + + if (controller.initTab) { + controller.initTab(); + } + } + + callback(controller); + }); } function preLoadTab(page, index) { - getTabController(page, index, function(controller) { - -1 == renderedTabs.indexOf(index) && controller.preRender && controller.preRender() - }) + getTabController(page, index, function (controller) { + if (-1 == renderedTabs.indexOf(index) && controller.preRender) { + controller.preRender(); + } + }); } function loadTab(page, index) { - currentTabIndex = index, getTabController(page, index, function(controller) { - initialTabIndex = null, 1 === index ? document.body.classList.add("autoScrollY") : document.body.classList.remove("autoScrollY"), -1 == renderedTabs.indexOf(index) ? (1 === index && renderedTabs.push(index), controller.renderTab()) : controller.onShow && controller.onShow(), currentTabController = controller - }) + currentTabIndex = index; + getTabController(page, index, function (controller) { + initialTabIndex = null; + + if (1 === index) { + document.body.classList.add("autoScrollY"); + } else { + document.body.classList.remove("autoScrollY"); + } + + if (-1 == renderedTabs.indexOf(index)) { + if (1 === index) { + renderedTabs.push(index); + } + + controller.renderTab(); + } else { + if (controller.onShow) { + controller.onShow(); + } + } + + currentTabController = controller; + }); } - function onInputCommand(e) { - switch (e.detail.command) { + function onInputCommand(e__e) { + switch (e__e.detail.command) { case "search": - e.preventDefault(), Dashboard.navigate("search.html?collectionType=livetv") + e__e.preventDefault(); + Dashboard.navigate("search.html?collectionType=livetv"); } } - var isViewRestored, self = this, - currentTabIndex = parseInt(params.tab || getDefaultTabIndex("livetv")), - initialTabIndex = currentTabIndex, - lastFullRender = 0; - [].forEach.call(view.querySelectorAll(".sectionTitleTextButton-programs"), function(link) { + + var isViewRestored; + var self = this; + var currentTabIndex = parseInt(params.tab || getDefaultTabIndex("livetv")); + var initialTabIndex = currentTabIndex; + var lastFullRender = 0; + [].forEach.call(view.querySelectorAll(".sectionTitleTextButton-programs"), function (link) { var href = link.href; - href && (link.href = href + "&serverId=" + ApiClient.serverId()) - }), self.initTab = function() { - for (var tabContent = view.querySelector(".pageTabContent[data-index='0']"), containers = tabContent.querySelectorAll(".itemsContainer"), i = 0, length = containers.length; i < length; i++) setScrollClasses(containers[i], enableScrollX()) - }, self.renderTab = function() { + + if (href) { + link.href = href + "&serverId=" + ApiClient.serverId(); + } + }); + + self.initTab = function () { var tabContent = view.querySelector(".pageTabContent[data-index='0']"); - enableFullRender() ? (reload(tabContent, !0), lastFullRender = (new Date).getTime()) : reload(tabContent) + var containers = tabContent.querySelectorAll(".itemsContainer"); + + for (var i__r = 0, length = containers.length; i__r < length; i__r++) { + setScrollClasses(containers[i__r], enableScrollX()); + } }; - var currentTabController, tabControllers = [], - renderedTabs = []; - view.addEventListener("viewbeforeshow", function(e) { - isViewRestored = e.detail.isRestored, initTabs() - }), view.addEventListener("viewshow", function(e) { - isViewRestored = e.detail.isRestored, isViewRestored || mainTabsManager.selectedTabIndex(initialTabIndex), inputManager.on(window, onInputCommand) - }), view.addEventListener("viewbeforehide", function(e) { - currentTabController && currentTabController.onHide && currentTabController.onHide(), document.body.classList.remove("autoScrollY"), inputManager.off(window, onInputCommand) - }), view.addEventListener("viewdestroy", function(e) { - tabControllers.forEach(function(t) { - t.destroy && t.destroy() - }) - }) - } -}); \ No newline at end of file + + self.renderTab = function () { + var tabContent = view.querySelector(".pageTabContent[data-index='0']"); + + if (enableFullRender()) { + reload(tabContent, true); + lastFullRender = new Date().getTime(); + } else { + reload(tabContent); + } + }; + + var currentTabController; + var tabControllers = []; + var renderedTabs = []; + view.addEventListener("viewbeforeshow", function (e__t) { + isViewRestored = e__t.detail.isRestored; + initTabs(); + }); + view.addEventListener("viewshow", function (e__y) { + isViewRestored = e__y.detail.isRestored; + + if (!isViewRestored) { + mainTabsManager.selectedTabIndex(initialTabIndex); + } + + inputManager.on(window, onInputCommand); + }); + view.addEventListener("viewbeforehide", function (e__u) { + if (currentTabController && currentTabController.onHide) { + currentTabController.onHide(); + } + + document.body.classList.remove("autoScrollY"); + inputManager.off(window, onInputCommand); + }); + view.addEventListener("viewdestroy", function (e__i) { + tabControllers.forEach(function (t__o) { + if (t__o.destroy) { + t__o.destroy(); + } + }); + }); + }; +}); diff --git a/src/scripts/plugincatalogpage.js b/src/scripts/plugincatalogpage.js index cb26e84431..bfbf4b2d12 100644 --- a/src/scripts/plugincatalogpage.js +++ b/src/scripts/plugincatalogpage.js @@ -1,78 +1,212 @@ -define(["loading", "libraryMenu", "globalize", "cardStyle", "emby-linkbutton", "emby-checkbox", "emby-select"], function(loading, libraryMenu, globalize) { +define(["loading", "libraryMenu", "globalize", "cardStyle", "emby-linkbutton", "emby-checkbox", "emby-select"], function (loading, libraryMenu, globalize) { "use strict"; function reloadList(page) { - loading.show(), query.IsAppStoreSafe = !0; - var promise1 = ApiClient.getAvailablePlugins(query), - promise2 = ApiClient.getInstalledPlugins(); - Promise.all([promise1, promise2]).then(function(responses) { + loading.show(); + query.IsAppStoreSafe = true; + var promise1 = ApiClient.getAvailablePlugins(query); + var promise2 = ApiClient.getInstalledPlugins(); + Promise.all([promise1, promise2]).then(function (responses) { populateList({ catalogElement: page.querySelector("#pluginTiles"), noItemsElement: page.querySelector("#noPlugins"), availablePlugins: responses[0], installedPlugins: responses[1] - }) - }) + }); + }); } function populateList(options) { - populateListInternal(options) + populateListInternal(options); } function getHeaderText(category) { category.replace(" ", "").replace(" ", ""); - return "Channel" === category ? category = "Channels" : "Theme" === category ? category = "Themes" : "LiveTV" === category ? category = "HeaderLiveTV" : "ScreenSaver" === category && (category = "HeaderScreenSavers"), globalize.translate(category) + + if ("Channel" === category) { + category = "Channels"; + } else { + if ("Theme" === category) { + category = "Themes"; + } else { + if ("LiveTV" === category) { + category = "HeaderLiveTV"; + } else { + if ("ScreenSaver" === category) { + category = "HeaderScreenSavers"; + } + } + } + } + + return globalize.translate(category); } function isUserInstalledPlugin(plugin) { - return -1 === ["02528C96-F727-44D7-BE87-9EEF040758C3", "0277E613-3EC0-4360-A3DE-F8AF0AABB5E9", "4DCB591C-0FA2-4C5D-A7E5-DABE37164C8B"].indexOf(plugin.guid) + return -1 === ["02528C96-F727-44D7-BE87-9EEF040758C3", "0277E613-3EC0-4360-A3DE-F8AF0AABB5E9", "4DCB591C-0FA2-4C5D-A7E5-DABE37164C8B"].indexOf(plugin.guid); } function populateListInternal(options) { - var availablePlugins = options.availablePlugins, - installedPlugins = options.installedPlugins, - allPlugins = availablePlugins.filter(function(p) { - return p.category = p.category || "General", p.categoryDisplayName = getHeaderText(p.category), (!options.categories || -1 != options.categories.indexOf(p.category)) && ((!options.targetSystem || p.targetSystem == options.targetSystem) && "UserInstalled" == p.type) - }); - availablePlugins = allPlugins.sort(function(a, b) { - var aName = a.category, - bName = b.category; - return aName > bName ? 1 : bName > aName ? -1 : (aName = a.name, bName = b.name, aName > bName ? 1 : bName > aName ? -1 : 0) + var availablePlugins = options.availablePlugins; + var installedPlugins = options.installedPlugins; + var allPlugins = availablePlugins.filter(function (p__w) { + p__w.category = p__w.category || "General"; + p__w.categoryDisplayName = getHeaderText(p__w.category); + + if (!options.categories || -1 != options.categories.indexOf(p__w.category)) { + if (!options.targetSystem || p__w.targetSystem == options.targetSystem) { + return "UserInstalled" == p__w.type; + } + + return false; + } + + return false; }); - var i, length, plugin, currentCategory, html = ""; + availablePlugins = allPlugins.sort(function (a__e, b__r) { + var aName = a__e.category; + var bName = b__r.category; + + if (aName > bName) { + return 1; + } + + if (bName > aName) { + return -1; + } + + aName = a__e.name; + bName = b__r.name; + + if (aName > bName) { + return 1; + } + + if (bName > aName) { + 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, b) { - if (a.installs > b.installs) return -1; - if (b.installs > a.installs) return 1; - var aName = a.name, - bName = b.name; - return aName > bName ? 1 : bName > aName ? -1 : 0 + 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; }).filter(isUserInstalledPlugin); html += '
'; var limit = screen.availWidth >= 1920 ? 15 : 12; - for (i = 0, length = Math.min(topPlugins.length, limit); i < length; i++) html += getPluginHtml(topPlugins[i], options, installedPlugins); - html += "
", html += "
" + + 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 = !1; - for (currentCategory = null, !1 === options.showCategory && (html += '
', hasOpenTag = !0), i = 0, length = availablePlugins.length; i < length; i++) { - plugin = availablePlugins[i]; + + 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]; var category = plugin.categoryDisplayName; - category != currentCategory && (!1 !== options.showCategory && (currentCategory && (hasOpenTag = !1, html += "
", html += "
"), html += '
', html += '

' + category + "

", html += '
', hasOpenTag = !0), currentCategory = category), html += getPluginHtml(plugin, options, installedPlugins) + + if (category != currentCategory) { + if (false !== options.showCategory) { + if (currentCategory) { + hasOpenTag = false; + html += "
"; + html += "
"; + } + + html += '
'; + html += '

' + category + "

"; + html += '
'; + hasOpenTag = true; + } + + currentCategory = category; + } + + html += getPluginHtml(plugin, options, installedPlugins); } - hasOpenTag && (html += "
", html += "
"), !availablePlugins.length && options.noItemsElement && options.noItemsElement.classList.add("hide"), options.catalogElement.innerHTML = html, loading.hide() + + if (hasOpenTag) { + html += "
"; + html += "
"; + } + + if (!availablePlugins.length && options.noItemsElement) { + options.noItemsElement.classList.add("hide"); + } + + options.catalogElement.innerHTML = html; + loading.hide(); } function getPluginHtml(plugin, options, installedPlugins) { - var html = "", - href = plugin.externalUrl ? plugin.externalUrl : "addplugin.html?name=" + encodeURIComponent(plugin.name) + "&guid=" + plugin.guid; - options.context && (href += "&context=" + options.context); + var html = ""; + var href = plugin.externalUrl ? plugin.externalUrl : "addplugin.html?name=" + encodeURIComponent(plugin.name) + "&guid=" + plugin.guid; + + if (options.context) { + href += "&context=" + options.context; + } + var target = plugin.externalUrl ? ' target="_blank"' : ""; - html += "
", html += '
', html += '", html += '
', html += "
", html += plugin.name, html += "
"; - var installedPlugin = plugin.isApp ? null : installedPlugins.filter(function(ip) { - return ip.Id == plugin.guid + html += "
"; + html += '
'; + html += '"; + html += '
'; + html += "
"; + html += plugin.name; + html += "
"; + var installedPlugin = plugin.isApp ? null : installedPlugins.filter(function (ip) { + return ip.Id == plugin.guid; })[0]; - return html += "
", html += installedPlugin ? globalize.translate("LabelVersionInstalled").replace("{0}", installedPlugin.Version) : " ", html += "
", html += "
", html += "
", html += "
" + html += "
"; + html += installedPlugin ? globalize.translate("LabelVersionInstalled").replace("{0}", installedPlugin.Version) : " "; + html += "
"; + html += "
"; + html += "
"; + return html += "
"; } function getTabs() { @@ -82,20 +216,24 @@ define(["loading", "libraryMenu", "globalize", "cardStyle", "emby-linkbutton", " }, { href: "plugincatalog.html", name: globalize.translate("TabCatalog") - }] + }]; } + var query = { TargetSystems: "Server", - IsAdult: !1 + IsAdult: false }; - return window.PluginCatalog = { - renderCatalog: populateList - }, - function(view, params) { - view.querySelector("#selectSystem").addEventListener("change", function() { - query.TargetSystems = this.value, reloadList(view) - }), view.addEventListener("viewshow", function() { - libraryMenu.setTabs("plugins", 1, getTabs), reloadList(this) - }) - } -}); \ No newline at end of file + window.PluginCatalog = { + renderCatalog: populateList + }; + return function (view, params) { + view.querySelector("#selectSystem").addEventListener("change", function () { + query.TargetSystems = this.value; + reloadList(view); + }); + view.addEventListener("viewshow", function () { + libraryMenu.setTabs("plugins", 1, getTabs); + reloadList(this); + }); + }; +}); From 58264c5046aa6c005353467a9f3bc82fd14ea047 Mon Sep 17 00:00:00 2001 From: cvium Date: Thu, 10 Jan 2019 22:10:45 +0100 Subject: [PATCH 05/11] cursory post-deuglification clean-up --- src/scripts/dashboardpage.js | 108 +++++++++++++------------------ src/scripts/livetvsuggested.js | 106 +++++++++++++----------------- src/scripts/plugincatalogpage.js | 24 +++---- 3 files changed, 99 insertions(+), 139 deletions(-) diff --git a/src/scripts/dashboardpage.js b/src/scripts/dashboardpage.js index 02567f419d..7d92702b83 100644 --- a/src/scripts/dashboardpage.js +++ b/src/scripts/dashboardpage.js @@ -1,8 +1,8 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globalize", "loading", "connectionManager", "playMethodHelper", "cardBuilder", "imageLoader", "components/activitylog", "humanedate", "listViewStyle", "emby-linkbutton", "flexStyles", "emby-button", "emby-itemscontainer"], function (datetime, events, itemHelper, serverNotifications, dom, globalize, loading, connectionManager, playMethodHelper, cardBuilder, imageLoader, ActivityLog) { "use strict"; - function onConnectionHelpClick(e__q) { - e__q.preventDefault(); + function onConnectionHelpClick(evt) { + evt.preventDefault(); return false; } @@ -15,7 +15,7 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa } } - function onEditServerNameClick(e__w) { + function onEditServerNameClick(evt) { var page = dom.parentWithClass(this, "page"); require(["prompt"], function (prompt) { @@ -36,7 +36,7 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa }); }); - e__w.preventDefault(); + evt.preventDefault(); return false; } @@ -54,16 +54,14 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa text.push(globalize.translate("sharedcomponents#DirectStreamHelp1")); text.push("
"); text.push(globalize.translate("sharedcomponents#DirectStreamHelp2")); - } else { - if (isTranscode) { - title = globalize.translate("sharedcomponents#Transcoding"); - text.push(globalize.translate("sharedcomponents#MediaIsBeingConverted")); + } else if (isTranscode) { + title = globalize.translate("sharedcomponents#Transcoding"); + text.push(globalize.translate("sharedcomponents#MediaIsBeingConverted")); - if (session.TranscodingInfo && session.TranscodingInfo.TranscodeReasons && session.TranscodingInfo.TranscodeReasons.length) { - text.push("
"); - text.push(globalize.translate("sharedcomponents#LabelReasonForTranscoding")); - showTranscodeReasons = true; - } + if (session.TranscodingInfo && session.TranscodingInfo.TranscodeReasons && session.TranscodingInfo.TranscodeReasons.length) { + text.push("
"); + text.push(globalize.translate("sharedcomponents#LabelReasonForTranscoding")); + showTranscodeReasons = true; } } @@ -131,37 +129,29 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa }); } - function onActiveDevicesClick(e__r) { - var btn = dom.parentWithClass(e__r.target, "sessionCardButton"); + function onActiveDevicesClick(evt) { + var btn = dom.parentWithClass(evt.target, "sessionCardButton"); if (btn) { var card = dom.parentWithClass(btn, "card"); if (card) { var sessionId = card.id; - var session = (DashboardPage.sessionsList || []).filter(function (s__t) { - return "session" + s__t.Id === sessionId; + var session = (DashboardPage.sessionsList || []).filter(function (dashboardSession) { + return "session" + dashboardSession.Id === sessionId; })[0]; if (session) { if (btn.classList.contains("btnCardOptions")) { showOptionsMenu(btn, session); - } else { - if (btn.classList.contains("btnSessionInfo")) { - showPlaybackInfo(btn, session); - } else { - if (btn.classList.contains("btnSessionSendMessage")) { - showSendMessageForm(btn, session); - } else { - if (btn.classList.contains("btnSessionStop")) { - connectionManager.getApiClient(session.ServerId).sendPlayStateCommand(session.Id, "Stop"); - } else { - if (btn.classList.contains("btnSessionPlayPause") && session.PlayState) { - connectionManager.getApiClient(session.ServerId).sendPlayStateCommand(session.Id, "PlayPause"); - } - } - } - } + } else if (btn.classList.contains("btnSessionInfo")) { + showPlaybackInfo(btn, session); + } else if (btn.classList.contains("btnSessionSendMessage")) { + showSendMessageForm(btn, session); + } else if (btn.classList.contains("btnSessionStop")) { + connectionManager.getApiClient(session.ServerId).sendPlayStateCommand(session.Id, "Stop"); + } else if (btn.classList.contains("btnSessionPlayPause") && session.PlayState) { + connectionManager.getApiClient(session.ServerId).sendPlayStateCommand(session.Id, "PlayPause"); } } } @@ -181,7 +171,6 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa } } } - return list; } @@ -278,8 +267,8 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa cardElem.classList.add("deadSession"); } - for (var i__u = 0, length = sessions.length; i__u < length; i__u++) { - var session = sessions[i__u]; + for (var i = 0, length = sessions.length; i < length; i++) { + var session = sessions[i]; var rowId = "session" + session.Id; var elem = view.querySelector("#" + rowId); @@ -383,9 +372,9 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa function renderRunningTasks(view, tasks) { var html = ""; - tasks = tasks.filter(function (t__o) { - if ("Idle" != t__o.State) { - return !t__o.IsHidden; + tasks = tasks.filter(function (task) { + if ("Idle" != task.State) { + return !task.IsHidden; } return false; @@ -397,8 +386,8 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa view.querySelector(".runningTasksContainer").classList.add("hide"); } - for (var i__i = 0, length = tasks.length; i__i < length; i__i++) { - var task = tasks[i__i]; + for (var i = 0, length = tasks.length; i < length; i++) { + var task = tasks[i]; if (html += "

", html += task.Name + "
", "Running" == task.State) { var progress = (task.CurrentProgressPercentage || 0).toFixed(1); @@ -407,10 +396,8 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa html += ""; html += "" + progress + "%"; html += ''; - } else { - if ("Cancelling" == task.State) { - html += '' + globalize.translate("LabelStopping") + ""; - } + } else if ("Cancelling" == task.State) { + html += '' + globalize.translate("LabelStopping") + ""; } html += "

"; @@ -519,10 +506,8 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa if (nowPlayingItem.SeriesName || nowPlayingItem.Album) { bottomText = topText; topText = nowPlayingItem.SeriesName || nowPlayingItem.Album; - } else { - if (nowPlayingItem.ProductionYear) { - bottomText = nowPlayingItem.ProductionYear; - } + } else if (nowPlayingItem.ProductionYear) { + bottomText = nowPlayingItem.ProductionYear; } } @@ -560,8 +545,8 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa html.push(session.UserName); } - for (var i__p = 0, length = session.AdditionalUsers.length; i__p < length; i__p++) { - html.push(session.AdditionalUsers[i__p].UserName); + for (var i = 0, length = session.AdditionalUsers.length; i < length; i++) { + html.push(session.AdditionalUsers[i].UserName); } return html.join(", "); @@ -809,45 +794,45 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa } }; return function (view, params) { - function onRestartRequired(e__a, apiClient) { + function onRestartRequired(evt, apiClient) { if (apiClient.serverId() === serverId) { renderHasPendingRestart(view, apiClient, true); } } - function onServerShuttingDown(e__s, apiClient) { + function onServerShuttingDown(evt, apiClient) { if (apiClient.serverId() === serverId) { renderHasPendingRestart(view, apiClient, true); } } - function onServerRestarting(e__d, apiClient) { + function onServerRestarting(evt, apiClient) { if (apiClient.serverId() === serverId) { renderHasPendingRestart(view, apiClient, true); } } - function onPackageInstalling(e__f, apiClient) { + function onPackageInstalling(evt, apiClient) { if (apiClient.serverId() === serverId) { pollForInfo(view, apiClient, true); reloadSystemInfo(view, apiClient); } } - function onPackageInstallationCompleted(e__g, apiClient) { + function onPackageInstallationCompleted(evt, apiClient) { if (apiClient.serverId() === serverId) { pollForInfo(view, apiClient, true); reloadSystemInfo(view, apiClient); } } - function onSessionsUpdate(e__h, apiClient, info) { + function onSessionsUpdate(evt, apiClient, info) { if (apiClient.serverId() === serverId) { renderInfo(view, info); } } - function onScheduledTasksUpdate(e__j, apiClient, info) { + function onScheduledTasksUpdate(evt, apiClient, info) { if (apiClient.serverId() === serverId) { renderRunningTasks(view, info); } @@ -865,6 +850,7 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa loading.show(); pollForInfo(page, apiClient); DashboardPage.startInterval(apiClient); + // TODO we currently don't support packages and thus these events are useless events.on(serverNotifications, "RestartRequired", onRestartRequired); events.on(serverNotifications, "ServerShuttingDown", onServerShuttingDown); events.on(serverNotifications, "ServerRestarting", onServerRestarting); @@ -896,8 +882,7 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa } }); view.addEventListener("viewbeforehide", function () { - var apiClient = ApiClient; // TODO we currently don't support packages and thus these events are useless - + var apiClient = ApiClient; events.off(serverNotifications, "RestartRequired", onRestartRequired); events.off(serverNotifications, "ServerShuttingDown", onServerShuttingDown); events.off(serverNotifications, "ServerRestarting", onServerRestarting); @@ -913,13 +898,10 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa view.addEventListener("viewdestroy", function () { var page = this; var userActivityLog = page.userActivityLog; - if (userActivityLog) { userActivityLog.destroy(); } - var serverActivityLog = page.serverActivityLog; - if (serverActivityLog) { serverActivityLog.destroy(); } diff --git a/src/scripts/livetvsuggested.js b/src/scripts/livetvsuggested.js index 4c33dcba16..c341986d36 100644 --- a/src/scripts/livetvsuggested.js +++ b/src/scripts/livetvsuggested.js @@ -9,7 +9,6 @@ define(["layoutManager", "userSettings", "inputManager", "loading", "globalize", if (enableScrollX()) { return "overflowBackdrop"; } - return "backdrop"; } @@ -17,7 +16,6 @@ define(["layoutManager", "userSettings", "inputManager", "loading", "globalize", if (enableScrollX()) { return "overflowPortrait"; } - return "portrait"; } @@ -25,7 +23,6 @@ define(["layoutManager", "userSettings", "inputManager", "loading", "globalize", if (enableScrollX()) { return 12; } - return 9; } @@ -153,22 +150,15 @@ define(["layoutManager", "userSettings", "inputManager", "loading", "globalize", } function getTabs() { - return [{ - name: globalize.translate("Programs") - }, { - name: globalize.translate("TabGuide") - }, { - name: globalize.translate("TabChannels") - }, { - name: globalize.translate("TabRecordings") - }, { - name: globalize.translate("HeaderSchedule") - }, { - name: globalize.translate("TabSeries") - }, { - name: globalize.translate("ButtonSearch"), - cssClass: "searchTabButton" - }]; + return [ + { name: globalize.translate("Programs") }, + { name: globalize.translate("TabGuide") }, + { name: globalize.translate("TabChannels") }, + { name: globalize.translate("TabRecordings") }, + { name: globalize.translate("HeaderSchedule") }, + { name: globalize.translate("TabSeries") }, + { name: globalize.translate("ButtonSearch"), cssClass: "searchTabButton" } + ]; } function setScrollClasses(elem, scrollX) { @@ -190,13 +180,10 @@ define(["layoutManager", "userSettings", "inputManager", "loading", "globalize", } function getDefaultTabIndex(folderId) { - switch (userSettings.get("landing-" + folderId)) { - case "guide": - return 1; - - default: - return 0; + if (userSettings.get("landing-" + folderId) === "guide") { + return 1; } + return 0; } return function (view, params) { @@ -204,18 +191,18 @@ define(["layoutManager", "userSettings", "inputManager", "loading", "globalize", return new Date().getTime() - lastFullRender > 3e5; } - function onBeforeTabChange(e__q) { - preLoadTab(view, parseInt(e__q.detail.selectedTabIndex)); + function onBeforeTabChange(evt) { + preLoadTab(view, parseInt(evt.detail.selectedTabIndex)); } - function onTabChange(e__w) { - var previousTabController = tabControllers[parseInt(e__w.detail.previousIndex)]; + function onTabChange(evt) { + var previousTabController = tabControllers[parseInt(evt.detail.previousIndex)]; if (previousTabController && previousTabController.onHide) { previousTabController.onHide(); } - loadTab(view, parseInt(e__w.detail.selectedTabIndex)); + loadTab(view, parseInt(evt.detail.selectedTabIndex)); } function getTabContainers() { @@ -229,30 +216,25 @@ define(["layoutManager", "userSettings", "inputManager", "loading", "globalize", function getTabController(page, index, callback) { var depends = []; + // TODO int is a little hard to read switch (index) { case 0: break; - case 1: depends.push("scripts/livetvguide"); break; - case 2: depends.push("scripts/livetvchannels"); break; - case 3: depends.push("scripts/livetvrecordings"); break; - case 4: depends.push("scripts/livetvschedule"); break; - case 5: depends.push("scripts/livetvseriestimers"); break; - case 6: depends.push("scripts/searchtab"); } @@ -269,9 +251,15 @@ define(["layoutManager", "userSettings", "inputManager", "loading", "globalize", if (!controller) { tabContent = view.querySelector(".pageTabContent[data-index='" + index + "']"); - controller = 0 === index ? self : 6 === index ? new controllerFactory(view, tabContent, { - collectionType: "livetv" - }) : new controllerFactory(view, params, tabContent); + if (0 === index) { + controller = self; + } else if (6 === index) { + controller = new controllerFactory(view, tabContent, { + collectionType: "livetv" + }); + } else { + controller = new controllerFactory(view, params, tabContent); + } tabControllers[index] = controller; if (controller.initTab) { @@ -285,7 +273,7 @@ define(["layoutManager", "userSettings", "inputManager", "loading", "globalize", function preLoadTab(page, index) { getTabController(page, index, function (controller) { - if (-1 == renderedTabs.indexOf(index) && controller.preRender) { + if (renderedTabs.indexOf(index) === -1 && controller.preRender) { controller.preRender(); } }); @@ -308,21 +296,18 @@ define(["layoutManager", "userSettings", "inputManager", "loading", "globalize", } controller.renderTab(); - } else { - if (controller.onShow) { - controller.onShow(); - } + } else if (controller.onShow) { + controller.onShow(); } currentTabController = controller; }); } - function onInputCommand(e__e) { - switch (e__e.detail.command) { - case "search": - e__e.preventDefault(); - Dashboard.navigate("search.html?collectionType=livetv"); + function onInputCommand(evt) { + if (evt.detail.command === "search") { + evt.preventDefault(); + Dashboard.navigate("search.html?collectionType=livetv"); } } @@ -343,8 +328,8 @@ define(["layoutManager", "userSettings", "inputManager", "loading", "globalize", var tabContent = view.querySelector(".pageTabContent[data-index='0']"); var containers = tabContent.querySelectorAll(".itemsContainer"); - for (var i__r = 0, length = containers.length; i__r < length; i__r++) { - setScrollClasses(containers[i__r], enableScrollX()); + for (var i = 0, length = containers.length; i < length; i++) { + setScrollClasses(containers[i], enableScrollX()); } }; @@ -362,31 +347,28 @@ define(["layoutManager", "userSettings", "inputManager", "loading", "globalize", var currentTabController; var tabControllers = []; var renderedTabs = []; - view.addEventListener("viewbeforeshow", function (e__t) { - isViewRestored = e__t.detail.isRestored; + view.addEventListener("viewbeforeshow", function (evt) { + isViewRestored = evt.detail.isRestored; initTabs(); }); - view.addEventListener("viewshow", function (e__y) { - isViewRestored = e__y.detail.isRestored; - + view.addEventListener("viewshow", function (evt) { + isViewRestored = evt.detail.isRestored; if (!isViewRestored) { mainTabsManager.selectedTabIndex(initialTabIndex); } - inputManager.on(window, onInputCommand); }); view.addEventListener("viewbeforehide", function (e__u) { if (currentTabController && currentTabController.onHide) { currentTabController.onHide(); } - document.body.classList.remove("autoScrollY"); inputManager.off(window, onInputCommand); }); - view.addEventListener("viewdestroy", function (e__i) { - tabControllers.forEach(function (t__o) { - if (t__o.destroy) { - t__o.destroy(); + view.addEventListener("viewdestroy", function (evt) { + tabControllers.forEach(function (tabController) { + if (tabController.destroy) { + tabController.destroy(); } }); }); diff --git a/src/scripts/plugincatalogpage.js b/src/scripts/plugincatalogpage.js index bfbf4b2d12..4f08308b65 100644 --- a/src/scripts/plugincatalogpage.js +++ b/src/scripts/plugincatalogpage.js @@ -28,14 +28,10 @@ define(["loading", "libraryMenu", "globalize", "cardStyle", "emby-linkbutton", " } else { if ("Theme" === category) { category = "Themes"; - } else { - if ("LiveTV" === category) { - category = "HeaderLiveTV"; - } else { - if ("ScreenSaver" === category) { - category = "HeaderScreenSavers"; - } - } + } else if ("LiveTV" === category) { + category = "HeaderLiveTV"; + } else if ("ScreenSaver" === category) { + category = "HeaderScreenSavers"; } } @@ -49,13 +45,13 @@ define(["loading", "libraryMenu", "globalize", "cardStyle", "emby-linkbutton", " function populateListInternal(options) { var availablePlugins = options.availablePlugins; var installedPlugins = options.installedPlugins; - var allPlugins = availablePlugins.filter(function (p__w) { - p__w.category = p__w.category || "General"; - p__w.categoryDisplayName = getHeaderText(p__w.category); + var allPlugins = availablePlugins.filter(function (plugin) { + plugin.category = plugin.category || "General"; + plugin.categoryDisplayName = getHeaderText(plugin.category); - if (!options.categories || -1 != options.categories.indexOf(p__w.category)) { - if (!options.targetSystem || p__w.targetSystem == options.targetSystem) { - return "UserInstalled" == p__w.type; + if (!options.categories || -1 != options.categories.indexOf(plugin.category)) { + if (!options.targetSystem || plugin.targetSystem == options.targetSystem) { + return "UserInstalled" == plugin.type; } return false; From b0c218c49ff70711a6f3ce3d8700aae9d1ad20e4 Mon Sep 17 00:00:00 2001 From: Vasily Date: Fri, 11 Jan 2019 15:42:46 +0100 Subject: [PATCH 06/11] Update src/components/tvproviders/xmltv.js Co-Authored-By: cvium --- src/components/tvproviders/xmltv.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/tvproviders/xmltv.js b/src/components/tvproviders/xmltv.js index dd9ab7e93b..2a9dd88089 100644 --- a/src/components/tvproviders/xmltv.js +++ b/src/components/tvproviders/xmltv.js @@ -114,7 +114,7 @@ define(["jQuery", "loading", "emby-checkbox", "emby-input", "listViewStyle", "pa function refreshTunerDevices(page, providerInfo, devices) { var html = ""; - for (var i = 0, length = devices.length; i < length; i__yi { + for (var i = 0, length = devices.length; i < length; i++) { var device = devices[i]; html += '
'; var enabledTuners = providerInfo.EnabledTuners || []; From 6651a62ca6fb16ce54dab1a018de84ffc44cb488 Mon Sep 17 00:00:00 2001 From: cvium Date: Fri, 11 Jan 2019 17:10:05 +0100 Subject: [PATCH 07/11] dashboardpage review comments --- src/scripts/dashboardpage.js | 48 ++++++++++++++++++++++-------------- 1 file changed, 30 insertions(+), 18 deletions(-) diff --git a/src/scripts/dashboardpage.js b/src/scripts/dashboardpage.js index 7d92702b83..d24aaec1a9 100644 --- a/src/scripts/dashboardpage.js +++ b/src/scripts/dashboardpage.js @@ -121,7 +121,6 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa case "sendmessage": showSendMessageForm(btn, session); break; - case "transcodinginfo": showPlaybackInfo(btn, session); } @@ -162,13 +161,15 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa var list = []; var minActiveDate = new Date().getTime() - 9e5; - for (var i__y = 0, length = sessions.length; i__y < length; i__y++) { - var session = sessions[i__y]; + for (var i = 0, length = sessions.length; i < length; i++) { + var session = sessions[i]; - if (session.NowPlayingItem || session.UserId) { - if (datetime.parseISO8601Date(session.LastActivityDate, true).getTime() >= minActiveDate) { - list.push(session); - } + if (!session.NowPlayingItem && !session.UserId) { + continue; + } + + if (datetime.parseISO8601Date(session.LastActivityDate, true).getTime() >= minActiveDate) { + list.push(session); } } return list; @@ -209,8 +210,6 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa }); } - function renderHasPendingRestart(view, apiClient, hasPendingRestart) { } - function reloadSystemInfo(view, apiClient) { apiClient.getSystemInfo().then(function (systemInfo) { view.querySelector(".serverNameHeader").innerHTML = systemInfo.ServerName; @@ -236,7 +235,6 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa DashboardPage.renderUrls(view, systemInfo); DashboardPage.renderPaths(view, systemInfo); - renderHasPendingRestart(view, apiClient, systemInfo.HasPendingRestart); }); } @@ -319,8 +317,10 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa } var nowPlayingName = DashboardPage.getNowPlayingName(session); - - if (html += '
', html += nowPlayingName.html, html += "
", nowPlayingItem && nowPlayingItem.RunTimeTicks) { + html += '
'; + html += nowPlayingName.html; + html += "
"; + if (nowPlayingItem && nowPlayingItem.RunTimeTicks) { html += ''; } else { html += ''; @@ -341,7 +341,7 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa btnCssClass = session.ServerId && session.NowPlayingItem && session.SupportsRemoteControl && session.DeviceId !== connectionManager.deviceId() ? "" : " hide"; html += ''; html += ''; - btnCssClass = session.TranscodingInfo && session.TranscodingInfo.TranscodeReasons && session.TranscodingInfo && session.TranscodingInfo.TranscodeReasons.length ? "" : " hide"; + btnCssClass = session.TranscodingInfo && session.TranscodingInfo.TranscodeReasons && ession.TranscodingInfo.TranscodeReasons.length ? "" : " hide"; html += ''; btnCssClass = session.ServerId && -1 !== session.SupportedCommands.indexOf("DisplayMessage") && session.DeviceId !== connectionManager.deviceId() ? "" : " hide"; html += ''; @@ -388,15 +388,17 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa for (var i = 0, length = tasks.length; i < length; i++) { var task = tasks[i]; - - if (html += "

", html += task.Name + "
", "Running" == task.State) { + + html += "

"; + html += task.Name + "
"; + if (task.State === "Running") { var progress = (task.CurrentProgressPercentage || 0).toFixed(1); html += ''; html += progress + "%"; html += ""; html += "" + progress + "%"; html += ''; - } else if ("Cancelling" == task.State) { + } else if (task.State === "Cancelling") { html += '' + globalize.translate("LabelStopping") + ""; } @@ -425,8 +427,18 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa var html = ""; var showTranscodingInfo = false; var displayPlayMethod = playMethodHelper.getDisplayPlayMethod(session); - - if ("DirectStream" === displayPlayMethod ? (html += globalize.translate("sharedcomponents#DirectStreaming"), true) : "Transcode" == displayPlayMethod ? (html += globalize.translate("sharedcomponents#Transcoding"), session.TranscodingInfo && session.TranscodingInfo.Framerate && (html += " (" + session.TranscodingInfo.Framerate + " fps)"), showTranscodingInfo = true, true) : "DirectPlay" == displayPlayMethod && (html += globalize.translate("sharedcomponents#DirectPlaying")), showTranscodingInfo) { + if (displayPlayMethod === "DirectStream") { + html += globalize.translate("sharedcomponents#DirectStreaming"); + } else if (displayPlayMethod === "Transcode") { + html += globalize.translate("sharedcomponents#Transcoding"); + if (session.TranscodingInfo && session.TranscodingInfo.Framerate) { + html += " (" + session.TranscodingInfo.Framerate + " fps)"; + } + showTranscodingInfo = true; + } else if (displayPlayMethod === "DirectPlay") { + html += globalize.translate("sharedcomponents#DirectPlaying"); + } + if (showTranscodingInfo) { var line = []; if (session.TranscodingInfo) { From f27ff18cd11b5b47d89b309469c3d0940db3c66b Mon Sep 17 00:00:00 2001 From: cvium Date: Sat, 12 Jan 2019 20:06:26 +0100 Subject: [PATCH 08/11] fixed indentation and if statement --- src/scripts/plugincatalogpage.js | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/scripts/plugincatalogpage.js b/src/scripts/plugincatalogpage.js index 4f08308b65..4e9418c673 100644 --- a/src/scripts/plugincatalogpage.js +++ b/src/scripts/plugincatalogpage.js @@ -25,14 +25,12 @@ define(["loading", "libraryMenu", "globalize", "cardStyle", "emby-linkbutton", " if ("Channel" === category) { category = "Channels"; - } else { - if ("Theme" === category) { - category = "Themes"; - } else if ("LiveTV" === category) { - category = "HeaderLiveTV"; - } else if ("ScreenSaver" === category) { - category = "HeaderScreenSavers"; - } + } else if ("Theme" === category) { + category = "Themes"; + } else if ("LiveTV" === category) { + category = "HeaderLiveTV"; + } else if ("ScreenSaver" === category) { + category = "HeaderScreenSavers"; } return globalize.translate(category); From 0d6c45173ba1cf53bcd1c1d946fb7d6d5127710d Mon Sep 17 00:00:00 2001 From: cvium Date: Sat, 12 Jan 2019 20:09:24 +0100 Subject: [PATCH 09/11] fix typo --- src/scripts/dashboardpage.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/scripts/dashboardpage.js b/src/scripts/dashboardpage.js index d24aaec1a9..c1d68861f8 100644 --- a/src/scripts/dashboardpage.js +++ b/src/scripts/dashboardpage.js @@ -341,7 +341,7 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa btnCssClass = session.ServerId && session.NowPlayingItem && session.SupportsRemoteControl && session.DeviceId !== connectionManager.deviceId() ? "" : " hide"; html += ''; html += ''; - btnCssClass = session.TranscodingInfo && session.TranscodingInfo.TranscodeReasons && ession.TranscodingInfo.TranscodeReasons.length ? "" : " hide"; + btnCssClass = session.TranscodingInfo && session.TranscodingInfo.TranscodeReasons && session.TranscodingInfo.TranscodeReasons.length ? "" : " hide"; html += ''; btnCssClass = session.ServerId && -1 !== session.SupportedCommands.indexOf("DisplayMessage") && session.DeviceId !== connectionManager.deviceId() ? "" : " hide"; html += ''; From 790cb3f32cf01525f697c6967a5c544beaf9fc8d Mon Sep 17 00:00:00 2001 From: cvium Date: Mon, 14 Jan 2019 22:52:33 +0100 Subject: [PATCH 10/11] last review comments --- src/scripts/dashboardpage.js | 11 +++-------- src/scripts/plugincatalogpage.js | 4 ++-- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/src/scripts/dashboardpage.js b/src/scripts/dashboardpage.js index c1d68861f8..e16d540ce6 100644 --- a/src/scripts/dashboardpage.js +++ b/src/scripts/dashboardpage.js @@ -61,16 +61,11 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa if (session.TranscodingInfo && session.TranscodingInfo.TranscodeReasons && session.TranscodingInfo.TranscodeReasons.length) { text.push("
"); text.push(globalize.translate("sharedcomponents#LabelReasonForTranscoding")); - showTranscodeReasons = true; + session.TranscodingInfo.TranscodeReasons.forEach(function (transcodeReason) { + text.push(globalize.translate("sharedcomponents#" + transcodeReason)); + }); } } - - if (showTranscodeReasons) { - session.TranscodingInfo.TranscodeReasons.forEach(function (t__e) { - text.push(globalize.translate("sharedcomponents#" + t__e)); - }); - } - alert({ text: text.join("
"), title: title diff --git a/src/scripts/plugincatalogpage.js b/src/scripts/plugincatalogpage.js index 4e9418c673..83fc5290fe 100644 --- a/src/scripts/plugincatalogpage.js +++ b/src/scripts/plugincatalogpage.js @@ -21,8 +21,8 @@ define(["loading", "libraryMenu", "globalize", "cardStyle", "emby-linkbutton", " } function getHeaderText(category) { - category.replace(" ", "").replace(" ", ""); - + category = category.replace(" ", ""); + if ("Channel" === category) { category = "Channels"; } else if ("Theme" === category) { From cc751aa3126125d34d9dcafacbf396871e488234 Mon Sep 17 00:00:00 2001 From: cvium Date: Tue, 15 Jan 2019 22:45:39 +0100 Subject: [PATCH 11/11] remove trailing whitespace --- src/scripts/plugincatalogpage.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/scripts/plugincatalogpage.js b/src/scripts/plugincatalogpage.js index 83fc5290fe..ed237a02d4 100644 --- a/src/scripts/plugincatalogpage.js +++ b/src/scripts/plugincatalogpage.js @@ -22,7 +22,7 @@ define(["loading", "libraryMenu", "globalize", "cardStyle", "emby-linkbutton", " function getHeaderText(category) { category = category.replace(" ", ""); - + if ("Channel" === category) { category = "Channels"; } else if ("Theme" === category) {