1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00
jellyfin-web/src/controllers/selectserver.js

183 lines
7.3 KiB
JavaScript
Raw Normal View History

define(["loading", "appRouter", "layoutManager", "appSettings", "apphost", "focusManager", "connectionManager", "globalize", "actionsheet", "dom", "material-icons", "flexStyles", "emby-scroller", "emby-itemscontainer", "cardStyle", "emby-button"], function(loading, appRouter, layoutManager, appSettings, appHost, focusManager, connectionManager, globalize, actionSheet, dom) {
2018-10-23 01:05:09 +03:00
"use strict";
function renderSelectServerItems(view, servers) {
var items = servers.map(function(server) {
return {
name: server.Name,
showIcon: !0,
icon: "",
cardType: "",
id: server.Id,
server: server
}
2019-04-10 00:47:58 -07:00
});
var html = items.map(function(item) {
2018-10-23 01:05:09 +03:00
var cardImageContainer;
2019-04-10 00:47:58 -07:00
if (item.showIcon) {
cardImageContainer = '<i class="cardImageIcon md-icon">' + item.icon + "</i>";
} else {
cardImageContainer = '<div class="cardImage" style="' + item.cardImageStyle + '"></div>';
}
2018-10-23 01:05:09 +03:00
var cardBoxCssClass = "cardBox";
2019-04-10 00:47:58 -07:00
if (layoutManager.tv) {
cardBoxCssClass += " cardBox-focustransform";
}
2018-10-23 01:05:09 +03:00
var innerOpening = '<div class="' + cardBoxCssClass + '">';
2019-04-10 00:47:58 -07:00
var cardContainer = '';
cardContainer += '<button raised class="card overflowSquareCard loginSquareCard scalableCard overflowSquareCard-scalable" style="display:inline-block;" data-id="' + item.id + '" data-url="' + (item.url || "") + '" data-cardtype="' + item.cardType + '">';
cardContainer += innerOpening;
cardContainer += '<div class="cardScalable card-focuscontent">';
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;
}).join("");
var itemsContainer = view.querySelector(".servers");
if (!items.length) {
html = '<p>' + globalize.translate("MessageNoServersAvailable") + "</p>";
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) {
require(["alert"], function(alert) {
2019-04-10 00:47:58 -07:00
alert(options);
});
2018-10-23 01:05:09 +03:00
}
function showServerConnectionFailure() {
2019-04-10 00:47:58 -07:00
alertText(globalize.translate("MessageUnableToConnectToServer"), globalize.translate("HeaderConnectionFailure"));
2018-10-23 01:05:09 +03:00
}
2018-10-23 01:05:09 +03:00
return function(view, params) {
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()
}).then(function(result) {
loading.hide();
var apiClient = result.ApiClient;
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;
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;
case "ServerUpdateNeeded":
alertTextWithOptions({
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;
default:
2019-04-10 00:47:58 -07:00
showServerConnectionFailure();
2018-10-23 01:05:09 +03:00
}
})
}
function deleteServer(server) {
2019-04-10 00:47:58 -07:00
loading.show();
connectionManager.deleteServer(server.Id).then(function() {
loading.hide();
loadServers();
});
2018-10-23 01:05:09 +03:00
}
function onServerClick(server) {
var menuItems = [];
menuItems.push({
name: globalize.translate("Connect"),
2018-10-23 01:05:09 +03:00
id: "connect"
2019-04-10 00:47:58 -07:00
});
menuItems.push({
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
}).then(function(id) {
switch (id) {
case "connect":
connectToServer(server);
break;
case "delete":
deleteServer(server);
}
})
}
function onServersRetrieved(result) {
2019-04-10 00:47:58 -07:00
servers = result;
renderSelectServerItems(view, result);
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;
updatePageStyle(view, params);
2019-04-10 00:47:58 -07:00
2018-10-23 01:05:09 +03:00
view.addEventListener("viewshow", function(e) {
var isRestored = e.detail.isRestored;
appRouter.setTitle(null);
if (!isRestored) loadServers();
2019-04-10 00:47:58 -07:00
});
view.querySelector(".servers").addEventListener("click", function(e) {
2018-10-23 01:05:09 +03:00
var card = dom.parentWithClass(e.target, "card");
if (card) {
var url = card.getAttribute("data-url");
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");
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
}
}
})
}
});