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/session/selectServer/index.js

223 lines
8 KiB
JavaScript
Raw Normal View History

2020-08-14 08:46:34 +02:00
import loading from '../../../components/loading/loading';
import appRouter from '../../../components/appRouter';
import layoutManager from '../../../components/layoutManager';
import libraryMenu from '../../../scripts/libraryMenu';
import appSettings from '../../../scripts/settings/appSettings';
import focusManager from '../../../components/focusManager';
import connectionManager from 'jellyfin-apiclient';
import globalize from '../../../scripts/globalize';
import actionSheet from '../../../components/actionSheet/actionSheet';
import dom from '../../../scripts/dom';
import browser from '../../../scripts/browser';
import 'material-design-icons-iconfont';
import '../../../assets/css/flexstyles.css';
import '../../../elements/emby-scroller/emby-scroller';
import '../../../elements/emby-itemscontainer/emby-itemscontainer';
import '../../../components/cardbuilder/card.css';
import '../../../elements/emby-button/emby-button';
/* eslint-disable indent */
2018-10-23 01:05:09 +03:00
2020-07-15 09:29:15 +01:00
const enableFocusTransform = !browser.slow && !browser.edge;
2018-10-23 01:05:09 +03:00
function renderSelectServerItems(view, servers) {
2020-07-15 09:29:15 +01:00
const items = servers.map(function (server) {
return {
name: server.Name,
showIcon: true,
2020-05-04 12:44:12 +02:00
icon: 'cast',
cardType: '',
id: server.Id,
server: server
};
2019-04-10 00:47:58 -07:00
});
2020-07-15 09:29:15 +01:00
let html = items.map(function (item) {
let cardImageContainer;
if (item.showIcon) {
2020-04-26 02:37:28 +03:00
cardImageContainer = '<span class="cardImageIcon material-icons ' + item.icon + '"></span>';
} else {
cardImageContainer = '<div class="cardImage" style="' + item.cardImageStyle + '"></div>';
}
// TODO move card creation code to Card component
2020-07-15 09:29:15 +01:00
let cssClass = 'card overflowSquareCard loginSquareCard scalableCard overflowSquareCard-scalable';
if (layoutManager.tv) {
2020-05-04 12:44:12 +02:00
cssClass += ' show-focus';
if (enableFocusTransform) {
2020-05-04 12:44:12 +02:00
cssClass += ' show-animation';
}
}
2020-07-15 09:29:15 +01:00
const cardBoxCssClass = 'cardBox';
2020-07-15 09:29:15 +01:00
const innerOpening = '<div class="' + cardBoxCssClass + '">';
let cardContainer = '';
2020-05-04 12:44:12 +02:00
cardContainer += '<button raised class="' + cssClass + '" style="display:inline-block;" data-id="' + item.id + '" data-url="' + (item.url || '') + '" data-cardtype="' + item.cardType + '">';
cardContainer += innerOpening;
cardContainer += '<div class="cardScalable">';
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;
2020-05-04 12:44:12 +02:00
}).join('');
2020-07-15 09:29:15 +01:00
const itemsContainer = view.querySelector('.servers');
2019-04-10 00:47:58 -07:00
if (!items.length) {
2020-05-04 12:44:12 +02:00
html = '<p>' + globalize.translate('MessageNoServersAvailable') + '</p>';
2019-04-10 00:47:58 -07: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) {
2020-05-04 12:44:12 +02:00
if (params.showuser == '1') {
view.classList.add('libraryPage');
view.classList.remove('standalonePage');
view.classList.add('noSecondaryNavPage');
2019-04-10 00:47:58 -07:00
} else {
2020-05-04 12:44:12 +02:00
view.classList.add('standalonePage');
view.classList.remove('libraryPage');
view.classList.remove('noSecondaryNavPage');
2019-04-10 00:47:58 -07:00
}
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) {
2020-08-14 08:46:34 +02:00
import('../../../components/alert').then(({default: alert}) => {
2019-04-10 00:47:58 -07:00
alert(options);
});
2018-10-23 01:05:09 +03:00
}
function showServerConnectionFailure() {
2020-05-04 12:44:12 +02:00
alertText(globalize.translate('MessageUnableToConnectToServer'));
2018-10-23 01:05:09 +03:00
}
export default function (view, params) {
2018-10-23 01:05:09 +03:00
function connectToServer(server) {
2019-04-10 00:47:58 -07:00
loading.show();
2020-08-30 06:06:47 +02:00
window.connectionManager.connectToServer(server, {
2018-10-23 01:05:09 +03:00
enableAutoLogin: appSettings.enableAutoLogin()
}).then(function (result) {
2018-10-23 01:05:09 +03:00
loading.hide();
2020-07-15 09:29:15 +01:00
const apiClient = result.ApiClient;
2018-10-23 01:05:09 +03:00
switch (result.State) {
2020-05-04 12:44:12 +02:00
case 'SignedIn':
2019-04-10 00:47:58 -07:00
Dashboard.onServerChanged(apiClient.getCurrentUserId(), apiClient.accessToken(), apiClient);
2020-05-04 12:44:12 +02:00
Dashboard.navigate('home.html');
2018-10-23 01:05:09 +03:00
break;
2020-05-04 12:44:12 +02:00
case 'ServerSignIn':
2019-04-10 00:47:58 -07:00
Dashboard.onServerChanged(null, null, apiClient);
2020-05-04 12:44:12 +02:00
Dashboard.navigate('login.html?serverid=' + result.Servers[0].Id);
2018-10-23 01:05:09 +03:00
break;
2020-05-04 12:44:12 +02:00
case 'ServerUpdateNeeded':
2018-10-23 01:05:09 +03:00
alertTextWithOptions({
2020-05-04 12:44:12 +02: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;
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
}
});
2018-10-23 01:05:09 +03:00
}
function deleteServer(server) {
2019-04-10 00:47:58 -07:00
loading.show();
2020-08-30 06:06:47 +02:00
window.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) {
2020-07-15 09:29:15 +01:00
const menuItems = [];
2018-10-23 01:05:09 +03:00
menuItems.push({
2020-05-04 12:44:12 +02:00
name: globalize.translate('Connect'),
id: 'connect'
2019-04-10 00:47:58 -07:00
});
menuItems.push({
2020-05-04 12:44:12 +02:00
name: globalize.translate('Delete'),
id: 'delete'
2018-10-23 01:05:09 +03:00
});
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) {
2018-10-23 01:05:09 +03:00
switch (id) {
2020-05-04 12:44:12 +02:00
case 'connect':
2018-10-23 01:05:09 +03:00
connectToServer(server);
break;
2020-05-04 12:44:12 +02:00
case 'delete':
2018-10-23 01:05:09 +03:00
deleteServer(server);
}
});
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-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();
2020-08-30 06:06:47 +02:00
window.connectionManager.getAvailableServers().then(onServersRetrieved);
2018-10-23 01:05:09 +03:00
}
2019-04-10 00:47:58 -07:00
2020-07-15 09:29:15 +01:00
let servers;
updatePageStyle(view, params);
2020-05-04 12:44:12 +02:00
view.addEventListener('viewshow', function (e) {
2020-07-15 09:29:15 +01:00
const isRestored = e.detail.isRestored;
appRouter.setTitle(null);
2020-07-19 04:36:47 +02:00
libraryMenu.setTransparentMenu(true);
if (!isRestored) {
loadServers();
}
2019-04-10 00:47:58 -07:00
});
2020-05-04 12:44:12 +02:00
view.querySelector('.servers').addEventListener('click', function (e) {
2020-07-15 09:29:15 +01:00
const card = dom.parentWithClass(e.target, 'card');
2018-10-23 01:05:09 +03:00
if (card) {
2020-07-15 09:29:15 +01:00
const url = card.getAttribute('data-url');
2019-04-10 00:47:58 -07:00
if (url) {
appRouter.show(url);
} else {
2020-07-15 09:29:15 +01:00
const 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
}
}
});
2020-07-15 09:29:15 +01:00
}
/* eslint-enable indent */