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

178 lines
6.4 KiB
JavaScript
Raw Normal View History

define(["dialogHelper", "dom", "layoutManager", "connectionManager", "globalize", "loading", "browser", "material-icons", "formDialogStyle", "emby-button", "emby-itemscontainer", "cardStyle"], function (dialogHelper, dom, layoutManager, connectionManager, globalize, loading, browser) {
2018-10-23 01:05:09 +03:00
"use strict";
var enableFocusTransform = !browser.slow && !browser.edge;
2018-10-23 01:05:09 +03:00
function getEditorHtml() {
var html = "";
2019-10-09 19:35:12 +03:00
html += '<div class="formDialogContent scrollY">';
html += '<div class="dialogContentInner dialog-content-centered">';
html += '<div class="loadingContent hide">';
html += "<h1>" + globalize.translate("DetectingDevices") + "...</h1>";
html += "<p>" + globalize.translate("MessagePleaseWait") + "</p>";
html += "</div>";
html += '<h1 style="margin-bottom:.25em;" class="devicesHeader hide">' + globalize.translate("HeaderNewDevices") + "</h1>";
html += '<div is="emby-itemscontainer" class="results vertical-wrap">';
html += "</div>";
html += "</div>";
return html += "</div>";
2018-10-23 01:05:09 +03:00
}
function getDeviceHtml(device) {
2019-10-09 19:35:12 +03:00
var padderClass;
var html = "";
var cssClass = "card scalableCard";
var cardBoxCssClass = "cardBox visualCardBox";
cssClass += " backdropCard backdropCard-scalable";
padderClass = "cardPadder-backdrop";
// TODO move card creation code to Card component
2019-10-09 19:35:12 +03:00
if (layoutManager.tv) {
cssClass += " show-focus";
if (enableFocusTransform) {
cssClass += " show-animation";
}
2019-10-09 19:35:12 +03:00
}
html += '<button type="button" class="' + cssClass + '" data-id="' + device.DeviceId + '" style="min-width:33.3333%;">';
html += '<div class="' + cardBoxCssClass + '">';
html += '<div class="cardScalable visualCardBox-cardScalable">';
html += '<div class="' + padderClass + '"></div>';
html += '<div class="cardContent searchImage">';
html += '<div class="cardImageContainer coveredImage"><i class="cardImageIcon md-icon">dvr</i></div>';
html += "</div>";
html += "</div>";
html += '<div class="cardFooter visualCardBox-cardFooter">';
html += '<div class="cardText cardTextCentered">' + getTunerName(device.Type) + "</div>";
html += '<div class="cardText cardTextCentered cardText-secondary">' + device.FriendlyName + "</div>";
html += '<div class="cardText cardText-secondary cardTextCentered">';
html += device.Url || "&nbsp;";
html += "</div>";
html += "</div>";
html += "</div>";
return html += "</button>";
2018-10-23 01:05:09 +03:00
}
function getTunerName(providerId) {
switch (providerId = providerId.toLowerCase()) {
case "m3u":
return "M3U";
2019-10-09 19:35:12 +03:00
2018-10-23 01:05:09 +03:00
case "hdhomerun":
return "HDHomerun";
2019-10-09 19:35:12 +03:00
2018-10-23 01:05:09 +03:00
case "hauppauge":
return "Hauppauge";
2019-10-09 19:35:12 +03:00
2018-10-23 01:05:09 +03:00
case "satip":
return "DVB";
2019-10-09 19:35:12 +03:00
2018-10-23 01:05:09 +03:00
default:
2019-10-09 19:35:12 +03:00
return "Unknown";
2018-10-23 01:05:09 +03:00
}
}
function renderDevices(view, devices) {
2019-10-09 19:35:12 +03:00
var i;
var length;
var html = "";
for (i = 0, length = devices.length; i < length; i++) {
html += getDeviceHtml(devices[i]);
}
if (devices.length) {
view.querySelector(".devicesHeader").classList.remove("hide");
} else {
html = "<p><br/>" + globalize.translate("NoNewDevicesFound") + "</p>";
view.querySelector(".devicesHeader").classList.add("hide");
}
2018-10-23 01:05:09 +03:00
var elem = view.querySelector(".results");
2019-10-09 19:35:12 +03:00
elem.innerHTML = html;
if (layoutManager.tv) {
focusManager.autoFocus(elem);
}
2018-10-23 01:05:09 +03:00
}
function discoverDevices(view, apiClient) {
2019-10-09 19:35:12 +03:00
loading.show();
view.querySelector(".loadingContent").classList.remove("hide");
return ApiClient.getJSON(ApiClient.getUrl("LiveTv/Tuners/Discvover", {
NewDevicesOnly: true
})).then(function (devices) {
currentDevices = devices;
renderDevices(view, devices);
view.querySelector(".loadingContent").classList.add("hide");
loading.hide();
});
2018-10-23 01:05:09 +03:00
}
function tunerPicker() {
2019-10-09 19:35:12 +03:00
this.show = function (options) {
2018-10-23 01:05:09 +03:00
var dialogOptions = {
2019-10-09 19:35:12 +03:00
removeOnClose: true,
scrollY: false
2018-10-23 01:05:09 +03:00
};
2019-10-09 19:35:12 +03:00
if (layoutManager.tv) {
dialogOptions.size = "fullscreen";
} else {
dialogOptions.size = "small";
}
2018-10-23 01:05:09 +03:00
var dlg = dialogHelper.createDialog(dialogOptions);
dlg.classList.add("formDialog");
var html = "";
2019-10-09 19:35:12 +03:00
html += '<div class="formDialogHeader">';
html += '<button is="paper-icon-button-light" class="btnCancel autoSize" tabindex="-1"><i class="md-icon">&#xE5C4;</i></button>';
html += '<h3 class="formDialogHeaderTitle">';
html += globalize.translate("HeaderLiveTvTunerSetup");
html += "</h3>";
html += "</div>";
html += getEditorHtml();
dlg.innerHTML = html;
dlg.querySelector(".btnCancel").addEventListener("click", function () {
dialogHelper.close(dlg);
2018-10-23 01:05:09 +03:00
});
var deviceResult;
2019-10-09 19:35:12 +03:00
dlg.querySelector(".results").addEventListener("click", function (e) {
2018-10-23 01:05:09 +03:00
var tunerCard = dom.parentWithClass(e.target, "card");
2019-10-09 19:35:12 +03:00
2018-10-23 01:05:09 +03:00
if (tunerCard) {
var deviceId = tunerCard.getAttribute("data-id");
2019-10-09 19:35:12 +03:00
deviceResult = currentDevices.filter(function (d) {
return d.DeviceId === deviceId;
})[0];
dialogHelper.close(dlg);
2018-10-23 01:05:09 +03:00
}
2019-10-09 19:35:12 +03:00
});
if (layoutManager.tv) {
centerFocus(dlg.querySelector(".formDialogContent"), false, true);
}
2018-10-23 01:05:09 +03:00
var apiClient = connectionManager.getApiClient(options.serverId);
2019-10-09 19:35:12 +03:00
discoverDevices(dlg, apiClient);
if (layoutManager.tv) {
centerFocus(dlg.querySelector(".formDialogContent"), false, false);
}
return dialogHelper.open(dlg).then(function () {
if (deviceResult) {
return Promise.resolve(deviceResult);
}
return Promise.reject();
});
};
2018-10-23 01:05:09 +03:00
}
2019-10-09 19:35:12 +03:00
2018-10-23 01:05:09 +03:00
var currentDevices = [];
2019-10-09 19:35:12 +03:00
return tunerPicker;
});