diff --git a/src/scripts/dashboardpage.js b/src/scripts/dashboardpage.js
index abc32b753b..e16d540ce6 100644
--- a/src/scripts/dashboardpage.js
+++ b/src/scripts/dashboardpage.js
@@ -1,527 +1,917 @@
-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(evt) {
+ evt.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(evt) {
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();
+ });
+ });
+ });
+ });
+
+ evt.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"));
+ session.TranscodingInfo.TranscodeReasons.forEach(function (transcodeReason) {
+ text.push(globalize.translate("sharedcomponents#" + transcodeReason));
+ });
+ }
+ }
+ 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(evt) {
+ var btn = dom.parentWithClass(evt.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 (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");
+ }
+ }
}
}
}
function filterSessions(sessions) {
- for (var list = [], minActiveDate = (new Date).getTime() - 9e5, i = 0, length = sessions.length; i < length; i++) {
+ var list = [];
+ var minActiveDate = new Date().getTime() - 9e5;
+
+ for (var i = 0, length = sessions.length; i < length; i++) {
var session = sessions[i];
- if (session.NowPlayingItem || session.UserId) {
- datetime.parseISO8601Date(session.LastActivityDate, !0).getTime() >= minActiveDate && list.push(session)
+
+ if (!session.NowPlayingItem && !session.UserId) {
+ continue;
+ }
+
+ if (datetime.parseISO8601Date(session.LastActivityDate, true).getTime() >= minActiveDate) {
+ list.push(session);
}
}
- 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()
+ 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)
- })
- }
-
- function renderHasPendingRestart(view, apiClient, hasPendingRestart) {
+ centerPlayButton: true
+ });
+ imageLoader.lazyChildren(itemsContainer);
+ });
}
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.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)
- })
+
+ 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);
+ });
}
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) {
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");
+ var parentElement = view.querySelector(".activeDevices");
+ var cardElem = parentElement.querySelector(".card");
+
+ if (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 session = sessions[i];
+ 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 += '
', html += '
';
+
+ if (imgUrl) {
+ html += '
";
+ html += '
';
+ html += '
';
var clientImage = DashboardPage.getClientImage(session);
- clientImage && (html += clientImage), html += '
', html += '
' + session.DeviceName + "
", 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 += '", 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"), tasks.filter(function(t) {
- return t.Key == DashboardPage.systemUpdateTaskKey
- }).length ? buttonEnabled(view.querySelector("#btnUpdateApplication"), !1) : buttonEnabled(view.querySelector("#btnUpdateApplication"), !0);
+ tasks = tasks.filter(function (task) {
+ if ("Idle" != task.State) {
+ return !task.IsHidden;
+ }
+
+ return false;
+ });
+
+ if (tasks.length) {
+ view.querySelector(".runningTasksContainer").classList.remove("hide");
+ } else {
+ 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) {
+
+ html += "
";
+ html += task.Name + "
";
+ if (task.State === "Running") {
var progress = (task.CurrentProgressPercentage || 0).toFixed(1);
- html += '", html += "" + progress + "%", html += ''
- } else "Cancelling" == task.State && (html += '' + globalize.translate("LabelStopping") + "");
- html += "
"
+ html += '
";
+ html += "
" + progress + "%";
+ html += '
';
+ } else if (task.State === "Cancelling") {
+ html += '
' + globalize.translate("LabelStopping") + "";
+ }
+
+ html += "";
}
- view.querySelector("#divRunningTasks").innerHTML = html
+
+ 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")
- },
- 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(" "))
+
+ 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 (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)";
}
- 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 {
+ showTranscodingInfo = true;
+ } else if (displayPlayMethod === "DirectPlay") {
+ html += globalize.translate("sharedcomponents#DirectPlaying");
+ }
+ if (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 = 0, length = session.AdditionalUsers.length; i < length; i++) {
+ html.push(session.AdditionalUsers[i].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")
- },
- 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() {
- 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()
- })
- })
+ });
}
- }, pageClassOn("pageshow", "type-interior", function() {
+
+ 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");
+ }
+ },
+ 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(evt, apiClient) {
+ if (apiClient.serverId() === serverId) {
+ renderHasPendingRestart(view, apiClient, true);
+ }
+ }
+
+ function onServerShuttingDown(evt, apiClient) {
+ if (apiClient.serverId() === serverId) {
+ renderHasPendingRestart(view, apiClient, true);
+ }
+ }
+
+ function onServerRestarting(evt, apiClient) {
+ if (apiClient.serverId() === serverId) {
+ renderHasPendingRestart(view, apiClient, true);
+ }
+ }
+
+ function onPackageInstalling(evt, apiClient) {
+ if (apiClient.serverId() === serverId) {
+ pollForInfo(view, apiClient, true);
+ reloadSystemInfo(view, apiClient);
+ }
+ }
+
+ function onPackageInstallationCompleted(evt, apiClient) {
+ if (apiClient.serverId() === serverId) {
+ pollForInfo(view, apiClient, true);
+ reloadSystemInfo(view, apiClient);
+ }
+ }
+
+ function onSessionsUpdate(evt, apiClient, info) {
+ if (apiClient.serverId() === serverId) {
+ renderInfo(view, info);
+ }
+ }
+
+ function onScheduledTasksUpdate(evt, 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;
- 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)
+ var apiClient = ApiClient;
+
+ if (apiClient) {
+ 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);
+ 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")
+ });
}
- })
- }),
- function(view, params) {
- function onRestartRequired(e, apiClient) {
- apiClient.serverId() === serverId && renderHasPendingRestart(view, apiClient, !0)
- }
- function onServerShuttingDown(e, apiClient) {
- apiClient.serverId() === serverId && renderHasPendingRestart(view, apiClient, !0)
- }
-
- function onServerRestarting(e, apiClient) {
- apiClient.serverId() === serverId && renderHasPendingRestart(view, apiClient, !0)
- }
-
- function onPackageInstalling(e, apiClient) {
- apiClient.serverId() === serverId && (pollForInfo(view, apiClient, !0), reloadSystemInfo(view, apiClient))
- }
-
- function onPackageInstallationCompleted(e, apiClient) {
- apiClient.serverId() === serverId && (pollForInfo(view, apiClient, !0), reloadSystemInfo(view, apiClient))
- }
-
- function onSessionsUpdate(e, apiClient, info) {
- apiClient.serverId() === serverId && renderInfo(view, info)
- }
-
- function onScheduledTasksUpdate(e, apiClient, info) {
- 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, DashboardPage.lastPluginUpdateCheck = null, getPluginSecurityInfo().then(function(pluginSecurityInfo) {
- DashboardPage.renderSupporterIcon(page, pluginSecurityInfo)
- }), 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({
+ 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;
- 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;
+ 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 4377195338..c341986d36 100644
--- a/src/scripts/livetvsuggested.js
+++ b/src/scripts/livetvsuggested.js
@@ -1,197 +1,222 @@
-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() {
- 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() {
- 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 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")
- })
+ 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) {
- 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
+ if (userSettings.get("landing-" + folderId) === "guide") {
+ return 1;
}
+ 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(evt) {
+ preLoadTab(view, parseInt(evt.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(evt) {
+ var previousTabController = tabControllers[parseInt(evt.detail.previousIndex)];
+
+ if (previousTabController && previousTabController.onHide) {
+ previousTabController.onHide();
+ }
+
+ loadTab(view, parseInt(evt.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 = [];
+
+ // TODO int is a little hard to read
switch (index) {
case 0:
break;
@@ -211,63 +236,141 @@ define(["layoutManager", "userSettings", "inputManager", "loading", "registratio
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 + "']");
+ 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) {
+ 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 (renderedTabs.indexOf(index) === -1 && 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) {
- case "search":
- e.preventDefault(), Dashboard.navigate("search.html?collectionType=livetv")
+ function onInputCommand(evt) {
+ if (evt.detail.command === "search") {
+ evt.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())
- }), view.querySelector(".unlockText").innerHTML = globalize.translate("sharedcomponents#LiveTvRequiresUnlock"), validateUnlock(view, !1), 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 = 0, length = containers.length; i < length; i++) {
+ setScrollClasses(containers[i], enableScrollX());
+ }
};
- var currentTabController, tabControllers = [],
- renderedTabs = [];
- view.querySelector(".btnUnlock").addEventListener("click", function() {
- validateUnlock(view, !0)
- }), 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 (evt) {
+ isViewRestored = evt.detail.isRestored;
+ initTabs();
+ });
+ 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 (evt) {
+ tabControllers.forEach(function (tabController) {
+ if (tabController.destroy) {
+ tabController.destroy();
+ }
+ });
+ });
+ };
+});
diff --git a/src/scripts/plugincatalogpage.js b/src/scripts/plugincatalogpage.js
index cebbbb08f3..ed237a02d4 100644
--- a/src/scripts/plugincatalogpage.js
+++ b/src/scripts/plugincatalogpage.js
@@ -1,78 +1,206 @@
-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)
+ category = category.replace(" ", "");
+
+ 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 (plugin) {
+ plugin.category = plugin.category || "General";
+ plugin.categoryDisplayName = getHeaderText(plugin.category);
+
+ if (!options.categories || -1 != options.categories.indexOf(plugin.category)) {
+ if (!options.targetSystem || plugin.targetSystem == options.targetSystem) {
+ return "UserInstalled" == plugin.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 += '
"), !availablePlugins.length && options.noItemsElement && options.noItemsElement.classList.add("hide"), options.catalogElement.innerHTML = html, loading.hide()
+
+ if (hasOpenTag) {
+ html += "