2019-11-11 12:28:27 +03:00
|
|
|
define(["loading", "appRouter", "layoutManager", "appSettings", "apphost", "focusManager", "connectionManager", "globalize", "actionsheet", "dom", "browser", "material-icons", "flexStyles", "emby-scroller", "emby-itemscontainer", "cardStyle", "emby-button"], function (loading, appRouter, layoutManager, appSettings, appHost, focusManager, connectionManager, globalize, actionSheet, dom, browser) {
|
2018-10-23 01:05:09 +03:00
|
|
|
"use strict";
|
|
|
|
|
2019-11-11 12:28:27 +03:00
|
|
|
var enableFocusTransform = !browser.slow && !browser.edge;
|
|
|
|
|
2018-10-23 01:05:09 +03:00
|
|
|
function renderSelectServerItems(view, servers) {
|
2019-11-06 13:43:39 +03:00
|
|
|
var items = servers.map(function (server) {
|
|
|
|
return {
|
|
|
|
name: server.Name,
|
|
|
|
showIcon: true,
|
2019-11-20 00:24:54 +03:00
|
|
|
icon: "cast",
|
2019-11-06 13:43:39 +03:00
|
|
|
cardType: "",
|
|
|
|
id: server.Id,
|
|
|
|
server: server
|
|
|
|
};
|
2019-04-10 00:47:58 -07:00
|
|
|
});
|
2019-11-06 13:43:39 +03:00
|
|
|
var html = items.map(function (item) {
|
|
|
|
var cardImageContainer;
|
|
|
|
|
|
|
|
if (item.showIcon) {
|
2020-04-25 10:00:20 +03:00
|
|
|
cardImageContainer = '<i class="cardImageIcon material-icons ' + item.icon + '"></i>';
|
2019-11-06 13:43:39 +03:00
|
|
|
} else {
|
|
|
|
cardImageContainer = '<div class="cardImage" style="' + item.cardImageStyle + '"></div>';
|
|
|
|
}
|
|
|
|
|
2019-11-11 12:28:27 +03:00
|
|
|
// TODO move card creation code to Card component
|
|
|
|
|
|
|
|
var cssClass = "card overflowSquareCard loginSquareCard scalableCard overflowSquareCard-scalable";
|
2019-11-06 13:43:39 +03:00
|
|
|
|
|
|
|
if (layoutManager.tv) {
|
2019-11-11 12:28:27 +03:00
|
|
|
cssClass += " show-focus";
|
|
|
|
|
|
|
|
if (enableFocusTransform) {
|
|
|
|
cssClass += " show-animation";
|
|
|
|
}
|
2019-11-06 13:43:39 +03:00
|
|
|
}
|
|
|
|
|
2019-11-11 12:28:27 +03:00
|
|
|
var cardBoxCssClass = "cardBox";
|
|
|
|
|
2019-11-06 13:43:39 +03:00
|
|
|
var innerOpening = '<div class="' + cardBoxCssClass + '">';
|
|
|
|
var cardContainer = '';
|
2019-11-11 12:28:27 +03:00
|
|
|
cardContainer += '<button raised class="' + cssClass + '" style="display:inline-block;" data-id="' + item.id + '" data-url="' + (item.url || "") + '" data-cardtype="' + item.cardType + '">';
|
2019-11-06 13:43:39 +03:00
|
|
|
cardContainer += innerOpening;
|
2019-11-11 12:28:27 +03:00
|
|
|
cardContainer += '<div class="cardScalable">';
|
2019-11-06 13:43:39 +03:00
|
|
|
cardContainer += '<div class="cardPadder cardPadder-square">';
|
|
|
|
cardContainer += '</div>';
|
|
|
|
cardContainer += '<div class="cardContent">';
|
|
|
|
cardContainer += '<div class="cardImageContainer coveredImage" style="background:#0288D1;border-radius:.15em;">';
|
|
|
|
cardContainer += cardImageContainer;
|
|
|
|
cardContainer += '</div>';
|
|
|
|
cardContainer += '</div>';
|
|
|
|
cardContainer += '</div>';
|
|
|
|
cardContainer += '<div class="cardFooter">';
|
|
|
|
cardContainer += '<div class="cardText cardTextCentered">' + item.name + '</div>';
|
|
|
|
cardContainer += '</div></div></button>';
|
|
|
|
return cardContainer;
|
2019-04-10 00:47:58 -07:00
|
|
|
}).join("");
|
|
|
|
var itemsContainer = view.querySelector(".servers");
|
2019-11-06 13:43:39 +03:00
|
|
|
|
2019-04-10 00:47:58 -07:00
|
|
|
if (!items.length) {
|
2019-04-10 00:51:02 -07:00
|
|
|
html = '<p>' + globalize.translate("MessageNoServersAvailable") + "</p>";
|
2019-04-10 00:47:58 -07:00
|
|
|
}
|
2019-11-06 13:43:39 +03:00
|
|
|
|
2019-04-10 00:47:58 -07:00
|
|
|
itemsContainer.innerHTML = html;
|
|
|
|
loading.hide();
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
function updatePageStyle(view, params) {
|
2019-04-10 00:47:58 -07:00
|
|
|
if (params.showuser == "1") {
|
|
|
|
view.classList.add("libraryPage");
|
|
|
|
view.classList.remove("standalonePage");
|
|
|
|
view.classList.add("noSecondaryNavPage");
|
|
|
|
} else {
|
|
|
|
view.classList.add("standalonePage");
|
|
|
|
view.classList.remove("libraryPage");
|
|
|
|
view.classList.remove("noSecondaryNavPage");
|
|
|
|
}
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
function showGeneralError() {
|
2019-04-10 00:47:58 -07:00
|
|
|
loading.hide();
|
|
|
|
alertText(globalize.translate("DefaultErrorMessage"));
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
function alertText(text) {
|
|
|
|
alertTextWithOptions({
|
|
|
|
text: text
|
2019-04-10 00:47:58 -07:00
|
|
|
});
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
function alertTextWithOptions(options) {
|
2019-11-06 13:43:39 +03:00
|
|
|
require(["alert"], function (alert) {
|
2019-04-10 00:47:58 -07:00
|
|
|
alert(options);
|
|
|
|
});
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
function showServerConnectionFailure() {
|
2020-04-06 22:03:09 +02:00
|
|
|
alertText(globalize.translate("MessageUnableToConnectToServer"));
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
2019-01-16 15:01:17 +09:00
|
|
|
|
2019-11-06 13:43:39 +03:00
|
|
|
return function (view, params) {
|
2018-10-23 01:05:09 +03:00
|
|
|
function connectToServer(server) {
|
2019-04-10 00:47:58 -07:00
|
|
|
loading.show();
|
|
|
|
connectionManager.connectToServer(server, {
|
2018-10-23 01:05:09 +03:00
|
|
|
enableAutoLogin: appSettings.enableAutoLogin()
|
2019-11-06 13:43:39 +03:00
|
|
|
}).then(function (result) {
|
2018-10-23 01:05:09 +03:00
|
|
|
loading.hide();
|
|
|
|
var apiClient = result.ApiClient;
|
2019-11-06 13:43:39 +03:00
|
|
|
|
2018-10-23 01:05:09 +03:00
|
|
|
switch (result.State) {
|
|
|
|
case "SignedIn":
|
2019-04-10 00:47:58 -07:00
|
|
|
Dashboard.onServerChanged(apiClient.getCurrentUserId(), apiClient.accessToken(), apiClient);
|
|
|
|
Dashboard.navigate("home.html");
|
2018-10-23 01:05:09 +03:00
|
|
|
break;
|
2019-11-06 13:43:39 +03:00
|
|
|
|
2018-10-23 01:05:09 +03:00
|
|
|
case "ServerSignIn":
|
2019-04-10 00:47:58 -07:00
|
|
|
Dashboard.onServerChanged(null, null, apiClient);
|
|
|
|
Dashboard.navigate("login.html?serverid=" + result.Servers[0].Id);
|
2018-10-23 01:05:09 +03:00
|
|
|
break;
|
2019-11-06 13:43:39 +03:00
|
|
|
|
2018-10-23 01:05:09 +03:00
|
|
|
case "ServerUpdateNeeded":
|
|
|
|
alertTextWithOptions({
|
2018-12-11 01:31:08 -05:00
|
|
|
text: globalize.translate("core#ServerUpdateNeeded", "https://github.com/jellyfin/jellyfin"),
|
|
|
|
html: globalize.translate("core#ServerUpdateNeeded", '<a href="https://github.com/jellyfin/jellyfin">https://github.com/jellyfin/jellyfin</a>')
|
2018-10-23 01:05:09 +03:00
|
|
|
});
|
|
|
|
break;
|
2019-11-06 13:43:39 +03:00
|
|
|
|
2018-10-23 01:05:09 +03:00
|
|
|
default:
|
2019-04-10 00:47:58 -07:00
|
|
|
showServerConnectionFailure();
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
2019-11-06 13:43:39 +03:00
|
|
|
});
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
function deleteServer(server) {
|
2019-04-10 00:47:58 -07:00
|
|
|
loading.show();
|
2019-11-06 13:43:39 +03:00
|
|
|
connectionManager.deleteServer(server.Id).then(function () {
|
2019-04-10 00:47:58 -07:00
|
|
|
loading.hide();
|
|
|
|
loadServers();
|
|
|
|
});
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
function onServerClick(server) {
|
|
|
|
var menuItems = [];
|
|
|
|
menuItems.push({
|
2019-02-03 02:41:16 +09:00
|
|
|
name: globalize.translate("Connect"),
|
2018-10-23 01:05:09 +03:00
|
|
|
id: "connect"
|
2019-04-10 00:47:58 -07:00
|
|
|
});
|
|
|
|
menuItems.push({
|
2019-02-03 02:41:16 +09:00
|
|
|
name: globalize.translate("Delete"),
|
2018-10-23 01:05:09 +03:00
|
|
|
id: "delete"
|
|
|
|
});
|
2019-01-16 13:42:03 +09:00
|
|
|
actionSheet.show({
|
2018-10-23 01:05:09 +03:00
|
|
|
items: menuItems,
|
|
|
|
title: server.Name
|
2019-11-06 13:43:39 +03:00
|
|
|
}).then(function (id) {
|
2018-10-23 01:05:09 +03:00
|
|
|
switch (id) {
|
|
|
|
case "connect":
|
|
|
|
connectToServer(server);
|
|
|
|
break;
|
2019-11-06 13:43:39 +03:00
|
|
|
|
2018-10-23 01:05:09 +03:00
|
|
|
case "delete":
|
|
|
|
deleteServer(server);
|
|
|
|
}
|
2019-11-06 13:43:39 +03:00
|
|
|
});
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
function onServersRetrieved(result) {
|
2019-04-10 00:47:58 -07:00
|
|
|
servers = result;
|
|
|
|
renderSelectServerItems(view, result);
|
2019-11-06 13:43:39 +03:00
|
|
|
|
2019-04-10 00:47:58 -07:00
|
|
|
if (layoutManager.tv) {
|
|
|
|
focusManager.autoFocus(view);
|
|
|
|
}
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
function loadServers() {
|
2019-04-10 00:47:58 -07:00
|
|
|
loading.show();
|
|
|
|
connectionManager.getAvailableServers().then(onServersRetrieved);
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
2019-04-10 00:47:58 -07:00
|
|
|
|
2018-10-23 01:05:09 +03:00
|
|
|
var servers;
|
2019-01-16 14:55:32 +09:00
|
|
|
updatePageStyle(view, params);
|
2019-11-06 13:43:39 +03:00
|
|
|
view.addEventListener("viewshow", function (e) {
|
2018-10-23 01:05:09 +03:00
|
|
|
var isRestored = e.detail.isRestored;
|
2019-01-16 15:01:17 +09:00
|
|
|
appRouter.setTitle(null);
|
2019-11-06 13:43:39 +03:00
|
|
|
|
|
|
|
if (!isRestored) {
|
|
|
|
loadServers();
|
|
|
|
}
|
2019-04-10 00:47:58 -07:00
|
|
|
});
|
2019-11-06 13:43:39 +03:00
|
|
|
view.querySelector(".servers").addEventListener("click", function (e) {
|
2018-10-23 01:05:09 +03:00
|
|
|
var card = dom.parentWithClass(e.target, "card");
|
2019-11-06 13:43:39 +03:00
|
|
|
|
2018-10-23 01:05:09 +03:00
|
|
|
if (card) {
|
|
|
|
var url = card.getAttribute("data-url");
|
2019-11-06 13:43:39 +03:00
|
|
|
|
2019-04-10 00:47:58 -07:00
|
|
|
if (url) {
|
|
|
|
appRouter.show(url);
|
|
|
|
} else {
|
2018-10-23 01:05:09 +03:00
|
|
|
var id = card.getAttribute("data-id");
|
2019-11-06 13:43:39 +03:00
|
|
|
onServerClick(servers.filter(function (s) {
|
2019-04-10 00:47:58 -07:00
|
|
|
return s.Id === id;
|
|
|
|
})[0]);
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
|
|
|
}
|
2019-11-06 13:43:39 +03:00
|
|
|
});
|
|
|
|
};
|
2018-12-11 01:31:08 -05:00
|
|
|
});
|