2019-08-31 03:12:10 -07:00
|
|
|
define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globalize", "loading", "connectionManager", "playMethodHelper", "cardBuilder", "imageLoader", "components/activitylog", "scripts/imagehelper", "indicators", "humanedate", "listViewStyle", "emby-button", "flexStyles", "emby-button", "emby-itemscontainer"], function (datetime, events, itemHelper, serverNotifications, dom, globalize, loading, connectionManager, playMethodHelper, cardBuilder, imageLoader, ActivityLog, imageHelper, indicators) {
|
2018-10-23 01:05:09 +03:00
|
|
|
"use strict";
|
|
|
|
|
|
|
|
function showPlaybackInfo(btn, session) {
|
2019-01-10 21:37:02 +01:00
|
|
|
require(["alert"], function (alert) {
|
|
|
|
var title;
|
|
|
|
var text = [];
|
2019-09-05 11:42:38 -07:00
|
|
|
var displayPlayMethod = playMethodHelper.getDisplayPlayMethod(session);
|
2019-11-06 13:43:39 +03:00
|
|
|
|
2019-09-05 11:42:38 -07:00
|
|
|
if (displayPlayMethod === "DirectStream") {
|
2019-02-03 02:41:16 +09:00
|
|
|
title = globalize.translate("DirectStreaming");
|
|
|
|
text.push(globalize.translate("DirectStreamHelp1"));
|
2019-01-10 21:37:02 +01:00
|
|
|
text.push("<br/>");
|
2019-02-03 02:41:16 +09:00
|
|
|
text.push(globalize.translate("DirectStreamHelp2"));
|
2019-09-05 11:42:38 -07:00
|
|
|
} else if (displayPlayMethod === "Transcode") {
|
2019-02-03 02:41:16 +09:00
|
|
|
title = globalize.translate("Transcoding");
|
|
|
|
text.push(globalize.translate("MediaIsBeingConverted"));
|
2019-11-06 13:43:39 +03:00
|
|
|
|
2019-01-10 22:10:45 +01:00
|
|
|
if (session.TranscodingInfo && session.TranscodingInfo.TranscodeReasons && session.TranscodingInfo.TranscodeReasons.length) {
|
|
|
|
text.push("<br/>");
|
2019-02-03 02:41:16 +09:00
|
|
|
text.push(globalize.translate("LabelReasonForTranscoding"));
|
2019-01-14 22:52:33 +01:00
|
|
|
session.TranscodingInfo.TranscodeReasons.forEach(function (transcodeReason) {
|
2019-09-05 11:42:38 -07:00
|
|
|
text.push(globalize.translate(transcodeReason));
|
2019-01-14 22:52:33 +01:00
|
|
|
});
|
2019-01-10 21:37:02 +01:00
|
|
|
}
|
|
|
|
}
|
2019-11-06 13:43:39 +03:00
|
|
|
|
2019-01-10 21:37:02 +01:00
|
|
|
alert({
|
2018-10-23 01:05:09 +03:00
|
|
|
text: text.join("<br/>"),
|
|
|
|
title: title
|
2019-01-10 21:37:02 +01:00
|
|
|
});
|
|
|
|
});
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
function showSendMessageForm(btn, session) {
|
2019-01-10 21:37:02 +01:00
|
|
|
require(["prompt"], function (prompt) {
|
2018-10-23 01:05:09 +03:00
|
|
|
prompt({
|
|
|
|
title: globalize.translate("HeaderSendMessage"),
|
|
|
|
label: globalize.translate("LabelMessageText"),
|
|
|
|
confirmText: globalize.translate("ButtonSend")
|
2019-01-10 21:37:02 +01:00
|
|
|
}).then(function (text) {
|
2018-10-23 01:05:09 +03:00
|
|
|
if (text) {
|
|
|
|
connectionManager.getApiClient(session.ServerId).sendMessageCommand(session.Id, {
|
|
|
|
Text: text,
|
|
|
|
TimeoutMs: 5e3
|
2019-01-10 21:37:02 +01:00
|
|
|
});
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
2019-01-10 21:37:02 +01:00
|
|
|
});
|
|
|
|
});
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
function showOptionsMenu(btn, session) {
|
2019-01-10 21:37:02 +01:00
|
|
|
require(["actionsheet"], function (actionsheet) {
|
2018-10-23 01:05:09 +03:00
|
|
|
var menuItems = [];
|
2019-01-10 21:37:02 +01:00
|
|
|
|
|
|
|
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({
|
2018-10-23 01:05:09 +03:00
|
|
|
items: menuItems,
|
|
|
|
positionTo: btn
|
2019-01-10 21:37:02 +01:00
|
|
|
}).then(function (id) {
|
2018-10-23 01:05:09 +03:00
|
|
|
switch (id) {
|
|
|
|
case "sendmessage":
|
|
|
|
showSendMessageForm(btn, session);
|
|
|
|
break;
|
2019-11-06 13:43:39 +03:00
|
|
|
|
2018-10-23 01:05:09 +03:00
|
|
|
case "transcodinginfo":
|
2019-01-10 21:37:02 +01:00
|
|
|
showPlaybackInfo(btn, session);
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
2019-01-10 21:37:02 +01:00
|
|
|
});
|
|
|
|
});
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
|
|
|
|
2019-01-10 22:10:45 +01:00
|
|
|
function onActiveDevicesClick(evt) {
|
|
|
|
var btn = dom.parentWithClass(evt.target, "sessionCardButton");
|
2019-01-10 21:37:02 +01:00
|
|
|
|
2018-10-23 01:05:09 +03:00
|
|
|
if (btn) {
|
|
|
|
var card = dom.parentWithClass(btn, "card");
|
2019-01-10 21:37:02 +01:00
|
|
|
|
2018-10-23 01:05:09 +03:00
|
|
|
if (card) {
|
2019-01-10 21:37:02 +01:00
|
|
|
var sessionId = card.id;
|
2019-01-10 22:10:45 +01:00
|
|
|
var session = (DashboardPage.sessionsList || []).filter(function (dashboardSession) {
|
|
|
|
return "session" + dashboardSession.Id === sessionId;
|
2019-01-10 21:37:02 +01:00
|
|
|
})[0];
|
|
|
|
|
|
|
|
if (session) {
|
|
|
|
if (btn.classList.contains("btnCardOptions")) {
|
|
|
|
showOptionsMenu(btn, session);
|
2019-01-10 22:10:45 +01:00
|
|
|
} 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");
|
2019-01-10 21:37:02 +01:00
|
|
|
}
|
|
|
|
}
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function filterSessions(sessions) {
|
2019-01-10 21:37:02 +01:00
|
|
|
var list = [];
|
|
|
|
var minActiveDate = new Date().getTime() - 9e5;
|
|
|
|
|
2019-01-11 17:10:05 +01:00
|
|
|
for (var i = 0, length = sessions.length; i < length; i++) {
|
|
|
|
var session = sessions[i];
|
2019-01-10 21:37:02 +01:00
|
|
|
|
2019-01-11 17:10:05 +01:00
|
|
|
if (!session.NowPlayingItem && !session.UserId) {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (datetime.parseISO8601Date(session.LastActivityDate, true).getTime() >= minActiveDate) {
|
|
|
|
list.push(session);
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
|
|
|
}
|
2019-11-06 13:43:39 +03:00
|
|
|
|
2019-01-10 21:37:02 +01:00
|
|
|
return list;
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
function refreshActiveRecordings(view, apiClient) {
|
|
|
|
apiClient.getLiveTvRecordings({
|
|
|
|
UserId: Dashboard.getCurrentUserId(),
|
2019-01-10 21:37:02 +01:00
|
|
|
IsInProgress: true,
|
2018-10-23 01:05:09 +03:00
|
|
|
Fields: "CanDelete,PrimaryImageAspectRatio",
|
2019-01-10 21:37:02 +01:00
|
|
|
EnableTotalRecordCount: false,
|
2018-10-23 01:05:09 +03:00
|
|
|
EnableImageTypes: "Primary,Thumb,Backdrop"
|
2019-01-10 21:37:02 +01:00
|
|
|
}).then(function (result) {
|
2018-10-23 01:05:09 +03:00
|
|
|
var itemsContainer = view.querySelector(".activeRecordingItems");
|
2019-01-10 21:37:02 +01:00
|
|
|
|
|
|
|
if (!result.Items.length) {
|
|
|
|
view.querySelector(".activeRecordingsSection").classList.add("hide");
|
2019-11-06 13:43:39 +03:00
|
|
|
return void(itemsContainer.innerHTML = "");
|
2019-01-10 21:37:02 +01:00
|
|
|
}
|
|
|
|
|
2018-10-23 01:05:09 +03:00
|
|
|
view.querySelector(".activeRecordingsSection").classList.remove("hide");
|
|
|
|
itemsContainer.innerHTML = cardBuilder.getCardsHtml({
|
|
|
|
items: result.Items,
|
|
|
|
shape: "auto",
|
|
|
|
defaultShape: "backdrop",
|
2019-01-10 21:37:02 +01:00
|
|
|
showTitle: true,
|
|
|
|
showParentTitle: true,
|
|
|
|
coverImage: true,
|
|
|
|
cardLayout: false,
|
|
|
|
centerText: true,
|
2018-10-23 01:05:09 +03:00
|
|
|
preferThumb: "auto",
|
2019-01-10 21:37:02 +01:00
|
|
|
overlayText: false,
|
|
|
|
overlayMoreButton: true,
|
2018-10-23 01:05:09 +03:00
|
|
|
action: "none",
|
2019-01-10 21:37:02 +01:00
|
|
|
centerPlayButton: true
|
|
|
|
});
|
|
|
|
imageLoader.lazyChildren(itemsContainer);
|
|
|
|
});
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
function reloadSystemInfo(view, apiClient) {
|
2019-01-10 21:37:02 +01:00
|
|
|
apiClient.getSystemInfo().then(function (systemInfo) {
|
2019-03-23 23:13:32 -07:00
|
|
|
view.querySelector("#serverName").innerHTML = globalize.translate("DashboardServerName", systemInfo.ServerName);
|
|
|
|
var localizedVersion = globalize.translate("DashboardVersionNumber", systemInfo.Version);
|
2019-11-06 13:43:39 +03:00
|
|
|
|
2019-05-02 17:10:02 -07:00
|
|
|
if (systemInfo.SystemUpdateLevel !== "Release") {
|
|
|
|
localizedVersion += " " + systemInfo.SystemUpdateLevel;
|
2019-01-10 21:37:02 +01:00
|
|
|
}
|
|
|
|
|
2019-11-06 13:43:39 +03:00
|
|
|
view.querySelector("#versionNumber").innerHTML = localizedVersion;
|
2019-05-02 17:10:02 -07:00
|
|
|
view.querySelector("#operatingSystem").innerHTML = globalize.translate("DashboardOperatingSystem", systemInfo.OperatingSystem);
|
|
|
|
view.querySelector("#architecture").innerHTML = globalize.translate("DashboardArchitecture", systemInfo.SystemArchitecture);
|
2019-03-22 15:47:01 -07:00
|
|
|
|
|
|
|
if (systemInfo.CanSelfRestart) {
|
|
|
|
view.querySelector("#btnRestartServer").classList.remove("hide");
|
|
|
|
} else {
|
|
|
|
view.querySelector("#btnRestartServer").classList.add("hide");
|
|
|
|
}
|
2019-05-02 17:10:02 -07:00
|
|
|
|
|
|
|
view.querySelector("#cachePath").innerHTML = systemInfo.CachePath;
|
|
|
|
view.querySelector("#logPath").innerHTML = systemInfo.LogPath;
|
|
|
|
view.querySelector("#transcodePath").innerHTML = systemInfo.TranscodingTempPath;
|
|
|
|
view.querySelector("#metadataPath").innerHTML = systemInfo.InternalMetadataPath;
|
|
|
|
view.querySelector("#webPath").innerHTML = systemInfo.WebPath;
|
2019-01-10 21:37:02 +01:00
|
|
|
});
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
function renderInfo(view, sessions, forceUpdate) {
|
2019-01-10 21:37:02 +01:00
|
|
|
sessions = filterSessions(sessions);
|
|
|
|
renderActiveConnections(view, sessions);
|
|
|
|
loading.hide();
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
function pollForInfo(view, apiClient, forceUpdate) {
|
|
|
|
apiClient.getSessions({
|
|
|
|
ActiveWithinSeconds: 960
|
2019-01-10 21:37:02 +01:00
|
|
|
}).then(function (sessions) {
|
|
|
|
renderInfo(view, sessions, forceUpdate);
|
|
|
|
});
|
|
|
|
apiClient.getScheduledTasks().then(function (tasks) {
|
|
|
|
renderRunningTasks(view, tasks);
|
|
|
|
});
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
function renderActiveConnections(view, sessions) {
|
|
|
|
var html = "";
|
|
|
|
DashboardPage.sessionsList = sessions;
|
2019-01-10 21:37:02 +01:00
|
|
|
var parentElement = view.querySelector(".activeDevices");
|
|
|
|
var cardElem = parentElement.querySelector(".card");
|
|
|
|
|
|
|
|
if (cardElem) {
|
|
|
|
cardElem.classList.add("deadSession");
|
|
|
|
}
|
|
|
|
|
2019-01-10 22:10:45 +01:00
|
|
|
for (var i = 0, length = sessions.length; i < length; i++) {
|
|
|
|
var session = sessions[i];
|
2019-01-10 21:37:02 +01:00
|
|
|
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";
|
|
|
|
html += '<div class="' + className + '" id="' + rowId + '">';
|
|
|
|
html += '<div class="cardBox visualCardBox">';
|
|
|
|
html += '<div class="cardScalable visualCardBox-cardScalable">';
|
|
|
|
html += '<div class="cardPadder cardPadder-backdrop"></div>';
|
|
|
|
html += '<div class="cardContent">';
|
2019-08-31 03:12:10 -07:00
|
|
|
var imgUrl = DashboardPage.getNowPlayingImageUrl(nowPlayingItem);
|
2019-11-06 13:43:39 +03:00
|
|
|
|
2019-01-10 21:37:02 +01:00
|
|
|
if (imgUrl) {
|
|
|
|
html += '<div class="sessionNowPlayingContent sessionNowPlayingContent-withbackground"';
|
2019-08-31 03:12:10 -07:00
|
|
|
html += ' data-src="' + imgUrl + '" style="display:inline-block;background-image:url(\'' + imgUrl + "');\"></div>";
|
2019-01-10 21:37:02 +01:00
|
|
|
} else {
|
2019-08-31 03:12:10 -07:00
|
|
|
html += '<div class="sessionNowPlayingContent"></div>';
|
2019-01-10 21:37:02 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
html += '<div class="sessionNowPlayingInnerContent">';
|
|
|
|
html += '<div class="sessionAppInfo">';
|
2019-08-31 03:12:10 -07:00
|
|
|
var clientImage = DashboardPage.getClientImage(session);
|
2019-11-06 13:43:39 +03:00
|
|
|
|
2019-01-10 21:37:02 +01:00
|
|
|
if (clientImage) {
|
|
|
|
html += clientImage;
|
|
|
|
}
|
|
|
|
|
|
|
|
html += '<div class="sessionAppName" style="display:inline-block;">';
|
|
|
|
html += '<div class="sessionDeviceName">' + session.DeviceName + "</div>";
|
|
|
|
html += '<div class="sessionAppSecondaryText">' + DashboardPage.getAppSecondaryText(session) + "</div>";
|
|
|
|
html += "</div>";
|
|
|
|
html += "</div>";
|
|
|
|
|
|
|
|
if (session.TranscodingInfo && session.TranscodingInfo.Framerate) {
|
|
|
|
html += '<div class="sessionTranscodingFramerate">' + session.TranscodingInfo.Framerate + " fps</div>";
|
|
|
|
} else {
|
|
|
|
html += '<div class="sessionTranscodingFramerate"></div>';
|
|
|
|
}
|
|
|
|
|
2019-11-06 13:43:39 +03:00
|
|
|
html += '<div class="sessionNowPlayingDetails">';
|
2018-10-23 01:05:09 +03:00
|
|
|
var nowPlayingName = DashboardPage.getNowPlayingName(session);
|
2019-01-11 17:10:05 +01:00
|
|
|
html += '<div class="sessionNowPlayingInfo" data-imgsrc="' + nowPlayingName.image + '">';
|
|
|
|
html += nowPlayingName.html;
|
|
|
|
html += "</div>";
|
2019-08-31 03:12:10 -07:00
|
|
|
html += '<div class="sessionNowPlayingTime">' + DashboardPage.getSessionNowPlayingTime(session) + "</div>";
|
2019-11-06 13:43:39 +03:00
|
|
|
html += '</div>';
|
2019-08-31 03:12:10 -07:00
|
|
|
|
2019-01-11 17:10:05 +01:00
|
|
|
if (nowPlayingItem && nowPlayingItem.RunTimeTicks) {
|
2019-08-31 03:12:10 -07:00
|
|
|
var percent = 100 * (session.PlayState.PositionTicks || 0) / nowPlayingItem.RunTimeTicks;
|
2019-11-06 13:43:39 +03:00
|
|
|
html += indicators.getProgressHtml(percent, {
|
|
|
|
containerClass: "playbackProgress"
|
|
|
|
});
|
2019-09-05 22:30:16 -07:00
|
|
|
} else {
|
|
|
|
// need to leave the element in just in case the device starts playback
|
2019-11-06 13:43:39 +03:00
|
|
|
html += indicators.getProgressHtml(0, {
|
|
|
|
containerClass: "playbackProgress hide"
|
|
|
|
});
|
2019-01-10 21:37:02 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
if (session.TranscodingInfo && session.TranscodingInfo.CompletionPercentage) {
|
2019-08-31 03:12:10 -07:00
|
|
|
var percent = session.TranscodingInfo.CompletionPercentage.toFixed(1);
|
2019-11-06 13:43:39 +03:00
|
|
|
html += indicators.getProgressHtml(percent, {
|
|
|
|
containerClass: "transcodingProgress"
|
|
|
|
});
|
2019-09-05 22:30:16 -07:00
|
|
|
} else {
|
|
|
|
// same issue as playbackProgress element above
|
2019-11-06 13:43:39 +03:00
|
|
|
html += indicators.getProgressHtml(0, {
|
|
|
|
containerClass: "transcodingProgress hide"
|
|
|
|
});
|
2019-01-10 21:37:02 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
html += "</div>";
|
|
|
|
html += "</div>";
|
|
|
|
html += "</div>";
|
|
|
|
html += '<div class="sessionCardFooter cardFooter">';
|
|
|
|
html += '<div class="sessionCardButtons flex align-items-center justify-content-center">';
|
2018-10-23 01:05:09 +03:00
|
|
|
var btnCssClass;
|
2019-01-10 21:37:02 +01:00
|
|
|
btnCssClass = session.ServerId && session.NowPlayingItem && session.SupportsRemoteControl && session.DeviceId !== connectionManager.deviceId() ? "" : " hide";
|
|
|
|
html += '<button is="paper-icon-button-light" class="sessionCardButton btnSessionPlayPause paper-icon-button-light ' + btnCssClass + '"><i class="md-icon"></i></button>';
|
|
|
|
html += '<button is="paper-icon-button-light" class="sessionCardButton btnSessionStop paper-icon-button-light ' + btnCssClass + '"><i class="md-icon"></i></button>';
|
2019-01-12 20:09:24 +01:00
|
|
|
btnCssClass = session.TranscodingInfo && session.TranscodingInfo.TranscodeReasons && session.TranscodingInfo.TranscodeReasons.length ? "" : " hide";
|
2019-01-10 21:37:02 +01:00
|
|
|
html += '<button is="paper-icon-button-light" class="sessionCardButton btnSessionInfo paper-icon-button-light ' + btnCssClass + '" title="' + globalize.translate("ViewPlaybackInfo") + '"><i class="md-icon"></i></button>';
|
|
|
|
btnCssClass = session.ServerId && -1 !== session.SupportedCommands.indexOf("DisplayMessage") && session.DeviceId !== connectionManager.deviceId() ? "" : " hide";
|
|
|
|
html += '<button is="paper-icon-button-light" class="sessionCardButton btnSessionSendMessage paper-icon-button-light ' + btnCssClass + '" title="' + globalize.translate("SendMessage") + '"><i class="md-icon"></i></button>';
|
|
|
|
html += "</div>";
|
|
|
|
html += '<div class="sessionNowPlayingStreamInfo" style="padding:.5em 0 1em;">';
|
|
|
|
html += DashboardPage.getSessionNowPlayingStreamInfo(session);
|
|
|
|
html += "</div>";
|
|
|
|
html += '<div class="flex align-items-center justify-content-center">';
|
2018-10-23 01:05:09 +03:00
|
|
|
var userImage = DashboardPage.getUserImage(session);
|
2019-10-13 21:46:22 +02:00
|
|
|
html += userImage ? '<div class="activitylogUserPhoto" style="background-image:url(\'' + userImage + "');\"></div>" : '<div style="height:1.71em;"></div>';
|
2019-09-05 11:42:38 -07:00
|
|
|
html += '<div class="sessionUserName">';
|
|
|
|
html += DashboardPage.getUsersHtml(session);
|
2019-01-10 21:37:02 +01:00
|
|
|
html += "</div>";
|
|
|
|
html += "</div>";
|
|
|
|
html += "</div>";
|
|
|
|
html += "</div>";
|
|
|
|
html += "</div>";
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
|
|
|
}
|
2019-01-10 21:37:02 +01:00
|
|
|
|
2018-10-23 01:05:09 +03:00
|
|
|
parentElement.insertAdjacentHTML("beforeend", html);
|
|
|
|
var deadSessionElem = parentElement.querySelector(".deadSession");
|
2019-11-06 13:43:39 +03:00
|
|
|
|
2019-01-10 21:37:02 +01:00
|
|
|
if (deadSessionElem) {
|
|
|
|
deadSessionElem.parentNode.removeChild(deadSessionElem);
|
|
|
|
}
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
function renderRunningTasks(view, tasks) {
|
|
|
|
var html = "";
|
2019-01-10 22:10:45 +01:00
|
|
|
tasks = tasks.filter(function (task) {
|
|
|
|
if ("Idle" != task.State) {
|
|
|
|
return !task.IsHidden;
|
2019-01-10 21:37:02 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
return false;
|
|
|
|
});
|
|
|
|
|
|
|
|
if (tasks.length) {
|
|
|
|
view.querySelector(".runningTasksContainer").classList.remove("hide");
|
|
|
|
} else {
|
|
|
|
view.querySelector(".runningTasksContainer").classList.add("hide");
|
|
|
|
}
|
|
|
|
|
2019-01-10 22:10:45 +01:00
|
|
|
for (var i = 0, length = tasks.length; i < length; i++) {
|
|
|
|
var task = tasks[i];
|
2019-01-11 17:10:05 +01:00
|
|
|
html += "<p>";
|
|
|
|
html += task.Name + "<br/>";
|
2019-11-06 13:43:39 +03:00
|
|
|
|
2019-01-11 17:10:05 +01:00
|
|
|
if (task.State === "Running") {
|
2018-10-23 01:05:09 +03:00
|
|
|
var progress = (task.CurrentProgressPercentage || 0).toFixed(1);
|
2019-01-10 21:37:02 +01:00
|
|
|
html += '<progress max="100" value="' + progress + '" title="' + progress + '%">';
|
|
|
|
html += progress + "%";
|
|
|
|
html += "</progress>";
|
2019-01-21 17:55:19 +01:00
|
|
|
html += "<span style='color:#00a4dc;margin-left:5px;margin-right:5px;'>" + progress + "%</span>";
|
2019-01-10 21:37:02 +01:00
|
|
|
html += '<button type="button" is="paper-icon-button-light" title="' + globalize.translate("ButtonStop") + '" onclick="DashboardPage.stopTask(this, \'' + task.Id + '\');" class="autoSize"><i class="md-icon">cancel</i></button>';
|
2019-01-11 17:10:05 +01:00
|
|
|
} else if (task.State === "Cancelling") {
|
2019-01-10 22:10:45 +01:00
|
|
|
html += '<span style="color:#cc0000;">' + globalize.translate("LabelStopping") + "</span>";
|
2019-01-10 21:37:02 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
html += "</p>";
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
2019-01-10 21:37:02 +01:00
|
|
|
|
|
|
|
view.querySelector("#divRunningTasks").innerHTML = html;
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
2019-01-10 21:37:02 +01:00
|
|
|
|
|
|
|
window.DashboardPage = {
|
|
|
|
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);
|
2019-11-06 13:43:39 +03:00
|
|
|
|
2019-01-11 17:10:05 +01:00
|
|
|
if (displayPlayMethod === "DirectStream") {
|
2019-02-03 02:41:16 +09:00
|
|
|
html += globalize.translate("DirectStreaming");
|
2019-01-11 17:10:05 +01:00
|
|
|
} else if (displayPlayMethod === "Transcode") {
|
2019-02-03 02:41:16 +09:00
|
|
|
html += globalize.translate("Transcoding");
|
2019-11-06 13:43:39 +03:00
|
|
|
|
2019-01-11 17:10:05 +01:00
|
|
|
if (session.TranscodingInfo && session.TranscodingInfo.Framerate) {
|
|
|
|
html += " (" + session.TranscodingInfo.Framerate + " fps)";
|
|
|
|
}
|
2019-11-06 13:43:39 +03:00
|
|
|
|
2019-01-11 17:10:05 +01:00
|
|
|
showTranscodingInfo = true;
|
|
|
|
} else if (displayPlayMethod === "DirectPlay") {
|
2019-02-03 02:41:16 +09:00
|
|
|
html += globalize.translate("DirectPlaying");
|
2019-01-11 17:10:05 +01:00
|
|
|
}
|
2019-11-06 13:43:39 +03:00
|
|
|
|
2019-01-11 17:10:05 +01:00
|
|
|
if (showTranscodingInfo) {
|
2019-01-10 21:37:02 +01:00
|
|
|
var line = [];
|
2019-11-06 13:43:39 +03:00
|
|
|
|
2019-01-10 21:37:02 +01:00
|
|
|
if (session.TranscodingInfo) {
|
|
|
|
if (session.TranscodingInfo.Bitrate) {
|
|
|
|
if (session.TranscodingInfo.Bitrate > 1e6) {
|
|
|
|
line.push((session.TranscodingInfo.Bitrate / 1e6).toFixed(1) + " Mbps");
|
|
|
|
} else {
|
2019-09-05 11:42:38 -07:00
|
|
|
line.push(Math.floor(session.TranscodingInfo.Bitrate / 1e3) + " Kbps");
|
2019-01-10 21:37:02 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
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(" ");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-09-05 11:42:38 -07:00
|
|
|
return html;
|
2019-01-10 21:37:02 +01:00
|
|
|
},
|
|
|
|
getSessionNowPlayingTime: function (session) {
|
|
|
|
var nowPlayingItem = session.NowPlayingItem;
|
|
|
|
var html = "";
|
|
|
|
|
|
|
|
if (nowPlayingItem) {
|
|
|
|
if (session.PlayState.PositionTicks) {
|
|
|
|
html += datetime.getDisplayRunningTime(session.PlayState.PositionTicks);
|
|
|
|
} else {
|
2019-09-05 11:42:38 -07:00
|
|
|
html += "0:00";
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
2019-01-10 21:37:02 +01:00
|
|
|
|
|
|
|
html += " / ";
|
|
|
|
|
|
|
|
if (nowPlayingItem && nowPlayingItem.RunTimeTicks) {
|
|
|
|
html += datetime.getDisplayRunningTime(nowPlayingItem.RunTimeTicks);
|
|
|
|
} else {
|
2019-09-05 11:42:38 -07:00
|
|
|
html += "0:00";
|
2019-01-10 21:37:02 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return html;
|
|
|
|
},
|
|
|
|
getAppSecondaryText: function (session) {
|
|
|
|
return session.Client + " " + session.ApplicationVersion;
|
|
|
|
},
|
|
|
|
getNowPlayingName: function (session) {
|
|
|
|
var imgUrl = "";
|
|
|
|
var nowPlayingItem = session.NowPlayingItem;
|
|
|
|
|
|
|
|
if (!nowPlayingItem) {
|
|
|
|
return {
|
2019-09-11 03:50:29 -07:00
|
|
|
html: "Last seen " + humaneDate(session.LastActivityDate),
|
2018-10-23 01:05:09 +03:00
|
|
|
image: imgUrl
|
|
|
|
};
|
2019-01-10 21:37:02 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
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;
|
2019-01-10 22:10:45 +01:00
|
|
|
} else if (nowPlayingItem.ProductionYear) {
|
|
|
|
bottomText = nowPlayingItem.ProductionYear;
|
2019-01-10 21:37:02 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (nowPlayingItem.ImageTags && nowPlayingItem.ImageTags.Logo) {
|
|
|
|
imgUrl = ApiClient.getScaledImageUrl(nowPlayingItem.Id, {
|
2018-10-23 01:05:09 +03:00
|
|
|
tag: nowPlayingItem.ImageTags.Logo,
|
|
|
|
maxHeight: 24,
|
|
|
|
maxWidth: 130,
|
|
|
|
type: "Logo"
|
2019-01-10 21:37:02 +01:00
|
|
|
});
|
2019-09-05 11:42:38 -07:00
|
|
|
} else if (nowPlayingItem.ParentLogoImageTag) {
|
|
|
|
imgUrl = ApiClient.getScaledImageUrl(nowPlayingItem.ParentLogoItemId, {
|
|
|
|
tag: nowPlayingItem.ParentLogoImageTag,
|
|
|
|
maxHeight: 24,
|
|
|
|
maxWidth: 130,
|
|
|
|
type: "Logo"
|
|
|
|
});
|
2019-01-10 21:37:02 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
if (imgUrl) {
|
|
|
|
topText = '<img src="' + imgUrl + '" style="max-height:24px;max-width:130px;" />';
|
|
|
|
}
|
|
|
|
|
|
|
|
return {
|
|
|
|
html: bottomText ? topText + "<br/>" + bottomText : topText,
|
|
|
|
image: imgUrl
|
|
|
|
};
|
|
|
|
},
|
|
|
|
getUsersHtml: function (session) {
|
|
|
|
var html = [];
|
2019-11-06 13:43:39 +03:00
|
|
|
|
2019-01-10 21:37:02 +01:00
|
|
|
if (session.UserId) {
|
|
|
|
html.push(session.UserName);
|
|
|
|
}
|
|
|
|
|
2019-01-10 22:10:45 +01:00
|
|
|
for (var i = 0, length = session.AdditionalUsers.length; i < length; i++) {
|
|
|
|
html.push(session.AdditionalUsers[i].UserName);
|
2019-01-10 21:37:02 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
return html.join(", ");
|
|
|
|
},
|
|
|
|
getUserImage: function (session) {
|
|
|
|
if (session.UserId && session.UserPrimaryImageTag) {
|
|
|
|
return ApiClient.getUserImageUrl(session.UserId, {
|
2018-10-23 01:05:09 +03:00
|
|
|
tag: session.UserPrimaryImageTag,
|
|
|
|
height: 24,
|
|
|
|
type: "Primary"
|
2019-01-10 21:37:02 +01:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
return null;
|
|
|
|
},
|
|
|
|
updateSession: function (row, session) {
|
|
|
|
row.classList.remove("deadSession");
|
2019-09-05 22:30:16 -07:00
|
|
|
var nowPlayingItem = session.NowPlayingItem;
|
2019-11-06 13:43:39 +03:00
|
|
|
|
2019-01-10 21:37:02 +01:00
|
|
|
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");
|
2019-11-06 13:43:39 +03:00
|
|
|
|
2019-01-10 21:37:02 +01:00
|
|
|
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);
|
2019-09-05 22:30:16 -07:00
|
|
|
row.querySelector(".sessionUserName").innerHTML = DashboardPage.getUsersHtml(session);
|
2019-01-10 21:37:02 +01:00
|
|
|
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");
|
2019-11-06 13:43:39 +03:00
|
|
|
|
2019-09-05 22:30:16 -07:00
|
|
|
if (nowPlayingItem && nowPlayingItem.RunTimeTicks) {
|
|
|
|
var percent = 100 * (session.PlayState.PositionTicks || 0) / nowPlayingItem.RunTimeTicks;
|
2019-11-06 13:43:39 +03:00
|
|
|
playbackProgressElem.outerHTML = indicators.getProgressHtml(percent, {
|
|
|
|
containerClass: "playbackProgress"
|
|
|
|
});
|
2019-09-05 22:30:16 -07:00
|
|
|
} else {
|
2019-11-06 13:43:39 +03:00
|
|
|
playbackProgressElem.outerHTML = indicators.getProgressHtml(0, {
|
|
|
|
containerClass: "playbackProgress hide"
|
|
|
|
});
|
2019-01-10 21:37:02 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
var transcodingProgress = row.querySelector(".transcodingProgress");
|
2019-11-06 13:43:39 +03:00
|
|
|
|
2019-01-10 21:37:02 +01:00
|
|
|
if (session.TranscodingInfo && session.TranscodingInfo.CompletionPercentage) {
|
2019-09-05 22:30:16 -07:00
|
|
|
var percent = session.TranscodingInfo.CompletionPercentage.toFixed(1);
|
2019-11-06 13:43:39 +03:00
|
|
|
transcodingProgress.outerHTML = indicators.getProgressHtml(percent, {
|
|
|
|
containerClass: "transcodingProgress"
|
|
|
|
});
|
2019-01-10 21:37:02 +01:00
|
|
|
} else {
|
2019-11-06 13:43:39 +03:00
|
|
|
transcodingProgress.outerHTML = indicators.getProgressHtml(0, {
|
|
|
|
containerClass: "transcodingProgress hide"
|
|
|
|
});
|
2019-01-10 21:37:02 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
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) {
|
2019-07-01 14:29:46 -07:00
|
|
|
var iconUrl = imageHelper.getDeviceIcon(connection.DeviceName);
|
|
|
|
return "<img src='" + iconUrl + "' />";
|
2019-01-10 21:37:02 +01:00
|
|
|
},
|
|
|
|
getNowPlayingImageUrl: function (item) {
|
|
|
|
if (item && item.BackdropImageTags && item.BackdropImageTags.length) {
|
|
|
|
return ApiClient.getScaledImageUrl(item.Id, {
|
2018-10-23 01:05:09 +03:00
|
|
|
type: "Backdrop",
|
|
|
|
width: 275,
|
|
|
|
tag: item.BackdropImageTags[0]
|
|
|
|
});
|
2019-01-10 21:37:02 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
if (item && item.ParentBackdropImageTags && item.ParentBackdropImageTags.length) {
|
|
|
|
return ApiClient.getScaledImageUrl(item.ParentBackdropItemId, {
|
2018-10-23 01:05:09 +03:00
|
|
|
type: "Backdrop",
|
|
|
|
width: 275,
|
|
|
|
tag: item.ParentBackdropImageTags[0]
|
|
|
|
});
|
2019-01-10 21:37:02 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
if (item && item.BackdropImageTag) {
|
|
|
|
return ApiClient.getScaledImageUrl(item.BackdropItemId, {
|
2018-10-23 01:05:09 +03:00
|
|
|
type: "Backdrop",
|
|
|
|
width: 275,
|
|
|
|
tag: item.BackdropImageTag
|
|
|
|
});
|
2019-01-10 21:37:02 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
var imageTags = (item || {}).ImageTags || {};
|
|
|
|
|
|
|
|
if (item && imageTags.Thumb) {
|
|
|
|
return ApiClient.getScaledImageUrl(item.Id, {
|
2018-10-23 01:05:09 +03:00
|
|
|
type: "Thumb",
|
|
|
|
width: 275,
|
|
|
|
tag: imageTags.Thumb
|
2019-01-10 21:37:02 +01:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
if (item && item.ParentThumbImageTag) {
|
|
|
|
return ApiClient.getScaledImageUrl(item.ParentThumbItemId, {
|
2018-10-23 01:05:09 +03:00
|
|
|
type: "Thumb",
|
|
|
|
width: 275,
|
|
|
|
tag: item.ParentThumbImageTag
|
2019-01-10 21:37:02 +01:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
if (item && item.ThumbImageTag) {
|
|
|
|
return ApiClient.getScaledImageUrl(item.ThumbItemId, {
|
2018-10-23 01:05:09 +03:00
|
|
|
type: "Thumb",
|
|
|
|
width: 275,
|
|
|
|
tag: item.ThumbImageTag
|
2019-01-10 21:37:02 +01:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
if (item && imageTags.Primary) {
|
|
|
|
return ApiClient.getScaledImageUrl(item.Id, {
|
2018-10-23 01:05:09 +03:00
|
|
|
type: "Primary",
|
|
|
|
width: 275,
|
|
|
|
tag: imageTags.Primary
|
2019-01-10 21:37:02 +01:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
if (item && item.PrimaryImageTag) {
|
|
|
|
return ApiClient.getScaledImageUrl(item.PrimaryImageItemId, {
|
2018-10-23 01:05:09 +03:00
|
|
|
type: "Primary",
|
|
|
|
width: 275,
|
|
|
|
tag: item.PrimaryImageTag
|
2019-01-10 21:37:02 +01:00
|
|
|
});
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
2019-01-10 21:37:02 +01:00
|
|
|
|
2019-09-05 23:20:16 -07:00
|
|
|
if (item && item.AlbumPrimaryImageTag) {
|
|
|
|
return ApiClient.getScaledImageUrl(item.AlbumId, {
|
|
|
|
type: "Primary",
|
|
|
|
width: 275,
|
|
|
|
tag: item.AlbumPrimaryImageTag
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2019-01-10 21:37:02 +01:00
|
|
|
return null;
|
2019-01-10 21:13:18 +01:00
|
|
|
},
|
2019-01-10 21:37:02 +01:00
|
|
|
systemUpdateTaskKey: "SystemUpdateTask",
|
|
|
|
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"),
|
2019-09-06 02:02:58 -07:00
|
|
|
primary: "delete"
|
2019-01-10 21:37:02 +01:00
|
|
|
}).then(function () {
|
|
|
|
var page = dom.parentWithClass(btn, "page");
|
2019-09-11 22:16:27 -07:00
|
|
|
page.querySelector("#btnRestartServer").disabled = true;
|
|
|
|
page.querySelector("#btnShutdown").disabled = true;
|
2019-04-03 21:37:26 -04:00
|
|
|
ApiClient.restartServer();
|
2019-01-10 21:37:02 +01:00
|
|
|
});
|
|
|
|
});
|
|
|
|
},
|
|
|
|
shutdown: function (btn) {
|
|
|
|
require(["confirm"], function (confirm) {
|
|
|
|
confirm({
|
|
|
|
title: globalize.translate("HeaderShutdown"),
|
|
|
|
text: globalize.translate("MessageConfirmShutdown"),
|
|
|
|
confirmText: globalize.translate("ButtonShutdown"),
|
2019-09-06 02:02:58 -07:00
|
|
|
primary: "delete"
|
2019-01-10 21:37:02 +01:00
|
|
|
}).then(function () {
|
|
|
|
var page = dom.parentWithClass(btn, "page");
|
2019-09-11 22:16:27 -07:00
|
|
|
page.querySelector("#btnRestartServer").disabled = true;
|
|
|
|
page.querySelector("#btnShutdown").disabled = true;
|
2019-01-10 21:37:02 +01:00
|
|
|
ApiClient.shutdownServer();
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
};
|
|
|
|
return function (view, params) {
|
2019-01-10 22:10:45 +01:00
|
|
|
function onRestartRequired(evt, apiClient) {
|
2019-01-10 21:37:02 +01:00
|
|
|
if (apiClient.serverId() === serverId) {
|
|
|
|
renderHasPendingRestart(view, apiClient, true);
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
2019-01-10 21:37:02 +01:00
|
|
|
}
|
2018-10-23 01:05:09 +03:00
|
|
|
|
2019-01-10 22:10:45 +01:00
|
|
|
function onServerShuttingDown(evt, apiClient) {
|
2019-01-10 21:37:02 +01:00
|
|
|
if (apiClient.serverId() === serverId) {
|
|
|
|
renderHasPendingRestart(view, apiClient, true);
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
2019-01-10 21:37:02 +01:00
|
|
|
}
|
2018-10-23 01:05:09 +03:00
|
|
|
|
2019-01-10 22:10:45 +01:00
|
|
|
function onServerRestarting(evt, apiClient) {
|
2019-01-10 21:37:02 +01:00
|
|
|
if (apiClient.serverId() === serverId) {
|
|
|
|
renderHasPendingRestart(view, apiClient, true);
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
2019-01-10 21:37:02 +01:00
|
|
|
}
|
2018-10-23 01:05:09 +03:00
|
|
|
|
2019-01-10 22:10:45 +01:00
|
|
|
function onPackageInstalling(evt, apiClient) {
|
2019-01-10 21:37:02 +01:00
|
|
|
if (apiClient.serverId() === serverId) {
|
|
|
|
pollForInfo(view, apiClient, true);
|
|
|
|
reloadSystemInfo(view, apiClient);
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
2019-01-10 21:37:02 +01:00
|
|
|
}
|
2018-10-23 01:05:09 +03:00
|
|
|
|
2019-01-10 22:10:45 +01:00
|
|
|
function onPackageInstallationCompleted(evt, apiClient) {
|
2019-01-10 21:37:02 +01:00
|
|
|
if (apiClient.serverId() === serverId) {
|
|
|
|
pollForInfo(view, apiClient, true);
|
|
|
|
reloadSystemInfo(view, apiClient);
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
2019-01-10 21:37:02 +01:00
|
|
|
}
|
2018-10-23 01:05:09 +03:00
|
|
|
|
2019-01-10 22:10:45 +01:00
|
|
|
function onSessionsUpdate(evt, apiClient, info) {
|
2019-01-10 21:37:02 +01:00
|
|
|
if (apiClient.serverId() === serverId) {
|
|
|
|
renderInfo(view, info);
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
2019-01-10 21:37:02 +01:00
|
|
|
}
|
|
|
|
|
2019-01-10 22:10:45 +01:00
|
|
|
function onScheduledTasksUpdate(evt, apiClient, info) {
|
2019-01-10 21:37:02 +01:00
|
|
|
if (apiClient.serverId() === serverId) {
|
|
|
|
renderRunningTasks(view, info);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
var serverId = ApiClient.serverId();
|
|
|
|
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({
|
2018-10-23 01:05:09 +03:00
|
|
|
serverId: ApiClient.serverId(),
|
|
|
|
element: page.querySelector(".serverActivityItems")
|
2019-01-10 21:37:02 +01:00
|
|
|
});
|
|
|
|
}
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
2019-01-10 21:37:02 +01:00
|
|
|
|
|
|
|
refreshActiveRecordings(view, apiClient);
|
|
|
|
loading.hide();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
view.addEventListener("viewbeforehide", function () {
|
2019-01-10 22:10:45 +01:00
|
|
|
var apiClient = ApiClient;
|
2019-01-10 21:37:02 +01:00
|
|
|
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;
|
2019-11-06 13:43:39 +03:00
|
|
|
|
2019-01-10 21:37:02 +01:00
|
|
|
if (userActivityLog) {
|
|
|
|
userActivityLog.destroy();
|
|
|
|
}
|
2019-11-06 13:43:39 +03:00
|
|
|
|
2019-01-10 21:37:02 +01:00
|
|
|
var serverActivityLog = page.serverActivityLog;
|
2019-11-06 13:43:39 +03:00
|
|
|
|
2019-01-10 21:37:02 +01:00
|
|
|
if (serverActivityLog) {
|
|
|
|
serverActivityLog.destroy();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
};
|
2018-12-11 01:31:08 -05:00
|
|
|
});
|