define(["jQuery", "globalize", "scripts/taskbutton", "dom", "libraryMenu", "layoutManager", "loading", "browser", "listViewStyle", "flexStyles", "emby-itemscontainer", "cardStyle", "material-icons", "emby-button"], function ($, globalize, taskButton, dom, libraryMenu, layoutManager, loading, browser) { "use strict"; var enableFocusTransform = !browser.slow && !browser.edge; function getDeviceHtml(device) { 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 if (layoutManager.tv) { cssClass += " show-focus"; if (enableFocusTransform) { cssClass += " show-animation"; } } html += '
'; html += '
'; html += '
'; html += '
'; html += '
'; html += '
dvr
'; html += "
"; html += "
"; html += '
'; html += ''; html += '
' + (device.FriendlyName || getTunerName(device.Type)) + "
"; html += '
'; html += device.Url || " "; html += "
"; html += "
"; html += "
"; return html += "
"; } function renderDevices(page, devices) { var html = devices.map(getDeviceHtml).join(""); page.querySelector(".devicesList").innerHTML = html; } function deleteDevice(page, id) { var message = globalize.translate("MessageConfirmDeleteTunerDevice"); require(["confirm"], function (confirm) { confirm(message, globalize.translate("HeaderDeleteDevice")).then(function () { loading.show(); ApiClient.ajax({ type: "DELETE", url: ApiClient.getUrl("LiveTv/TunerHosts", { Id: id }) }).then(function () { reload(page); }); }); }); } function reload(page) { loading.show(); ApiClient.getNamedConfiguration("livetv").then(function (config) { renderDevices(page, config.TunerHosts); renderProviders(page, config.ListingProviders); }); loading.hide(); } function submitAddDeviceForm(page) { page.querySelector(".dlgAddDevice").close(); loading.show(); ApiClient.ajax({ type: "POST", url: ApiClient.getUrl("LiveTv/TunerHosts"), data: JSON.stringify({ Type: $("#selectTunerDeviceType", page).val(), Url: $("#txtDevicePath", page).val() }), contentType: "application/json" }).then(function () { reload(page); }, function () { Dashboard.alert({ message: globalize.translate("ErrorAddingTunerDevice") }); }); } function renderProviders(page, providers) { var html = ""; if (providers.length) { html += '
'; for (var i = 0, length = providers.length; i < length; i++) { var provider = providers[i]; html += '
'; html += 'dvr'; html += '"; html += ''; html += "
"; } html += "
"; } var elem = $(".providerList", page).html(html); $(".btnOptions", elem).on("click", function () { var id = this.getAttribute("data-id"); showProviderOptions(page, id, this); }); } function showProviderOptions(page, providerId, button) { var items = []; items.push({ name: globalize.translate("ButtonDelete"), id: "delete" }); items.push({ name: globalize.translate("MapChannels"), id: "map" }); require(["actionsheet"], function (actionsheet) { actionsheet.show({ items: items, positionTo: button }).then(function (id) { switch (id) { case "delete": deleteProvider(page, providerId); break; case "map": mapChannels(page, providerId); } }); }); } function mapChannels(page, providerId) { require(["components/channelmapper/channelmapper"], function (channelmapper) { new channelmapper({ serverId: ApiClient.serverInfo().Id, providerId: providerId }).show(); }); } function deleteProvider(page, id) { var message = globalize.translate("MessageConfirmDeleteGuideProvider"); require(["confirm"], function (confirm) { confirm(message, globalize.translate("HeaderDeleteProvider")).then(function () { loading.show(); ApiClient.ajax({ type: "DELETE", url: ApiClient.getUrl("LiveTv/ListingProviders", { Id: id }) }).then(function () { reload(page); }, function () { reload(page); }); }); }); } function getTunerName(providerId) { switch (providerId = providerId.toLowerCase()) { case "m3u": return "M3U"; case "hdhomerun": return "HDHomeRun"; case "hauppauge": return "Hauppauge"; case "satip": return "DVB"; default: return "Unknown"; } } function getProviderName(providerId) { switch (providerId = providerId.toLowerCase()) { case "schedulesdirect": return "Schedules Direct"; case "xmltv": return "XMLTV"; default: return "Unknown"; } } function getProviderConfigurationUrl(providerId) { switch (providerId = providerId.toLowerCase()) { case "xmltv": return "livetvguideprovider.html?type=xmltv"; case "schedulesdirect": return "livetvguideprovider.html?type=schedulesdirect"; } } function addProvider(button) { var menuItems = []; menuItems.push({ name: "Schedules Direct", id: "SchedulesDirect" }); menuItems.push({ name: "XMLTV", id: "xmltv" }); require(["actionsheet"], function (actionsheet) { actionsheet.show({ items: menuItems, positionTo: button, callback: function (id) { Dashboard.navigate(getProviderConfigurationUrl(id)); } }); }); } function addDevice(button) { Dashboard.navigate("livetvtuner.html"); } function showDeviceMenu(button, tunerDeviceId) { var items = []; items.push({ name: globalize.translate("ButtonDelete"), id: "delete" }); items.push({ name: globalize.translate("ButtonEdit"), id: "edit" }); require(["actionsheet"], function (actionsheet) { actionsheet.show({ items: items, positionTo: button }).then(function (id) { switch (id) { case "delete": deleteDevice(dom.parentWithClass(button, "page"), tunerDeviceId); break; case "edit": Dashboard.navigate("livetvtuner.html?id=" + tunerDeviceId); } }); }); } function onDevicesListClick(e) { var card = dom.parentWithClass(e.target, "card"); if (card) { var id = card.getAttribute("data-id"); var btnCardOptions = dom.parentWithClass(e.target, "btnCardOptions"); if (btnCardOptions) { showDeviceMenu(btnCardOptions, id); } else { Dashboard.navigate("livetvtuner.html?id=" + id); } } } $(document).on("pageinit", "#liveTvStatusPage", function () { var page = this; $(".btnAddDevice", page).on("click", function () { addDevice(this); }); $(".formAddDevice", page).on("submit", function () { submitAddDeviceForm(page); return false; }); $(".btnAddProvider", page).on("click", function () { addProvider(this); }); page.querySelector(".devicesList").addEventListener("click", onDevicesListClick); }).on("pageshow", "#liveTvStatusPage", function () { var page = this; reload(page); taskButton({ mode: "on", progressElem: page.querySelector(".refreshGuideProgress"), taskKey: "RefreshGuide", button: page.querySelector(".btnRefresh") }); }).on("pagehide", "#liveTvStatusPage", function () { var page = this; taskButton({ mode: "off", progressElem: page.querySelector(".refreshGuideProgress"), taskKey: "RefreshGuide", button: page.querySelector(".btnRefresh") }); }); });