2020-07-24 10:23:14 +02:00
|
|
|
<<<<<<< HEAD
|
2020-07-09 16:20:32 +01:00
|
|
|
import loading from 'loading';
|
|
|
|
import appRouter from 'appRouter';
|
|
|
|
import layoutManager from 'layoutManager';
|
|
|
|
import appSettings from 'appSettings';
|
|
|
|
import appHost from 'apphost';
|
|
|
|
import focusManager from 'focusManager';
|
|
|
|
import connectionManager from 'connectionManager';
|
|
|
|
import globalize from 'globalize';
|
|
|
|
import actionSheet from 'actionsheet';
|
|
|
|
import dom from 'dom';
|
|
|
|
import browser from 'browser';
|
|
|
|
import 'material-icons';
|
|
|
|
import 'flexStyles';
|
|
|
|
import 'emby-scroller';
|
|
|
|
import 'emby-itemscontainer';
|
|
|
|
import 'cardStyle';
|
|
|
|
import '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;
|
2020-07-24 10:23:14 +02:00
|
|
|
=======
|
2020-07-19 04:36:47 +02:00
|
|
|
define(['loading', 'appRouter', 'layoutManager', 'libraryMenu', 'appSettings', 'apphost', 'focusManager', 'connectionManager', 'globalize', 'actionsheet', 'dom', 'browser', 'material-icons', 'flexStyles', 'emby-scroller', 'emby-itemscontainer', 'cardStyle', 'emby-button'], function (loading, appRouter, layoutManager, libraryMenu, appSettings, appHost, focusManager, connectionManager, globalize, actionSheet, dom, browser) {
|
2020-05-04 12:44:12 +02:00
|
|
|
'use strict';
|
2018-10-23 01:05:09 +03:00
|
|
|
|
2019-11-11 12:28:27 +03:00
|
|
|
var enableFocusTransform = !browser.slow && !browser.edge;
|
2020-07-24 10:23:14 +02:00
|
|
|
>>>>>>> upstream/master
|
2019-11-11 12:28:27 +03:00
|
|
|
|
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) {
|
2019-11-06 13:43:39 +03:00
|
|
|
return {
|
|
|
|
name: server.Name,
|
|
|
|
showIcon: true,
|
2020-05-04 12:44:12 +02:00
|
|
|
icon: 'cast',
|
|
|
|
cardType: '',
|
2019-11-06 13:43:39 +03:00
|
|
|
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;
|
2019-11-06 13:43:39 +03:00
|
|
|
|
|
|
|
if (item.showIcon) {
|
2020-04-26 02:37:28 +03:00
|
|
|
cardImageContainer = '<span class="cardImageIcon material-icons ' + item.icon + '"></span>';
|
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
|
|
|
|
|
2020-07-15 09:29:15 +01:00
|
|
|
let cssClass = 'card overflowSquareCard loginSquareCard scalableCard overflowSquareCard-scalable';
|
2019-11-06 13:43:39 +03:00
|
|
|
|
|
|
|
if (layoutManager.tv) {
|
2020-05-04 12:44:12 +02:00
|
|
|
cssClass += ' show-focus';
|
2019-11-11 12:28:27 +03:00
|
|
|
|
|
|
|
if (enableFocusTransform) {
|
2020-05-04 12:44:12 +02:00
|
|
|
cssClass += ' show-animation';
|
2019-11-11 12:28:27 +03:00
|
|
|
}
|
2019-11-06 13:43:39 +03:00
|
|
|
}
|
|
|
|
|
2020-07-15 09:29:15 +01:00
|
|
|
const cardBoxCssClass = 'cardBox';
|
2019-11-11 12:28:27 +03:00
|
|
|
|
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 + '">';
|
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;
|
2020-05-04 12:44:12 +02:00
|
|
|
}).join('');
|
2020-07-15 09:29:15 +01:00
|
|
|
const itemsContainer = view.querySelector('.servers');
|
2019-11-06 13:43:39 +03:00
|
|
|
|
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-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) {
|
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 showGeneralError() {
|
2019-04-10 00:47:58 -07:00
|
|
|
loading.hide();
|
2020-05-04 12:44:12 +02:00
|
|
|
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) {
|
2020-07-09 16:20:32 +01:00
|
|
|
import('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
|
|
|
}
|
2019-01-16 15:01:17 +09:00
|
|
|
|
2020-07-09 16:20:32 +01: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();
|
|
|
|
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();
|
2020-07-15 09:29:15 +01:00
|
|
|
const apiClient = result.ApiClient;
|
2019-11-06 13:43:39 +03:00
|
|
|
|
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;
|
2019-11-06 13:43:39 +03:00
|
|
|
|
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;
|
2019-11-06 13:43:39 +03:00
|
|
|
|
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;
|
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) {
|
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
|
2019-11-06 13:43:39 +03:00
|
|
|
}).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;
|
2019-11-06 13:43:39 +03:00
|
|
|
|
2020-05-04 12:44:12 +02:00
|
|
|
case 'delete':
|
2018-10-23 01:05:09 +03:00
|
|
|
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
|
|
|
|
2020-07-15 09:29:15 +01:00
|
|
|
let servers;
|
2019-01-16 14:55:32 +09:00
|
|
|
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;
|
2019-01-16 15:01:17 +09:00
|
|
|
appRouter.setTitle(null);
|
2020-07-19 04:36:47 +02:00
|
|
|
libraryMenu.setTransparentMenu(true);
|
2019-11-06 13:43:39 +03:00
|
|
|
|
|
|
|
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');
|
2019-11-06 13:43:39 +03:00
|
|
|
|
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-11-06 13:43:39 +03:00
|
|
|
|
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');
|
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
|
|
|
});
|
2020-07-15 09:29:15 +01:00
|
|
|
}
|
2020-07-09 16:20:32 +01:00
|
|
|
|
|
|
|
/* eslint-enable indent */
|