define(["jQuery", "loading", "emby-checkbox", "listViewStyle", "emby-input", "emby-select", "emby-linkbutton", "flexStyles"], function($, loading) { "use strict"; return function(page, providerId, options) { function reload() { loading.show(), ApiClient.getNamedConfiguration("livetv").then(function(config) { var info = config.ListingProviders.filter(function(i) { return i.Id === providerId })[0] || {}; listingsId = info.ListingsId, $("#selectListing", page).val(info.ListingsId || ""), page.querySelector(".txtUser").value = info.Username || "", page.querySelector(".txtPass").value = "", page.querySelector(".txtZipCode").value = info.ZipCode || "", info.Username && info.Password ? page.querySelector(".listingsSection").classList.remove("hide") : page.querySelector(".listingsSection").classList.add("hide"), page.querySelector(".chkAllTuners").checked = info.EnableAllTuners, page.querySelector(".chkAllTuners").checked ? page.querySelector(".selectTunersSection").classList.add("hide") : page.querySelector(".selectTunersSection").classList.remove("hide"), setCountry(info), refreshTunerDevices(page, info, config.TunerHosts) }) } function setCountry(info) { ApiClient.getJSON(ApiClient.getUrl("LiveTv/ListingProviders/SchedulesDirect/Countries")).then(function(result) { var i, length, countryList = []; for (var region in result) { var countries = result[region]; if (countries.length && "ZZZ" !== region) for (i = 0, length = countries.length; i < length; i++) countryList.push({ name: countries[i].fullName, value: countries[i].shortName }) } countryList.sort(function(a, b) { return a.name > b.name ? 1 : a.name < b.name ? -1 : 0 }), $("#selectCountry", page).html(countryList.map(function(c) { return '" }).join("")).val(info.Country || ""), $(page.querySelector(".txtZipCode")).trigger("change") }, function() { Dashboard.alert({ message: Globalize.translate("ErrorGettingTvLineups") }) }), loading.hide() } function sha256(str) { if (!self.TextEncoder) return Promise.resolve(""); var buffer = new TextEncoder("utf-8").encode(str); return crypto.subtle.digest("SHA-256", buffer).then(function(hash) { return hex(hash) }) } function hex(buffer) { for (var hexCodes = [], view = new DataView(buffer), i = 0; i < view.byteLength; i += 4) { var value = view.getUint32(i), stringValue = value.toString(16), paddedValue = ("00000000" + stringValue).slice(-"00000000".length); hexCodes.push(paddedValue) } return hexCodes.join("") } function submitLoginForm() { loading.show(), sha256(page.querySelector(".txtPass").value).then(function(passwordHash) { var info = { Type: "SchedulesDirect", Username: page.querySelector(".txtUser").value, EnableAllTuners: !0, Password: passwordHash, Pw: page.querySelector(".txtPass").value }, id = providerId; id && (info.Id = id), ApiClient.ajax({ type: "POST", url: ApiClient.getUrl("LiveTv/ListingProviders", { ValidateLogin: !0 }), data: JSON.stringify(info), contentType: "application/json", dataType: "json" }).then(function(result) { Dashboard.processServerConfigurationUpdateResult(), providerId = result.Id, reload() }, function() { Dashboard.alert({ message: Globalize.translate("ErrorSavingTvProvider") }) }) }) } function submitListingsForm() { var selectedListingsId = $("#selectListing", page).val(); if (!selectedListingsId) return void Dashboard.alert({ message: Globalize.translate("ErrorPleaseSelectLineup") }); loading.show(); var id = providerId; ApiClient.getNamedConfiguration("livetv").then(function(config) { var info = config.ListingProviders.filter(function(i) { return i.Id === id })[0]; info.ZipCode = page.querySelector(".txtZipCode").value, info.Country = $("#selectCountry", page).val(), info.ListingsId = selectedListingsId, info.EnableAllTuners = page.querySelector(".chkAllTuners").checked, info.EnabledTuners = info.EnableAllTuners ? [] : $(".chkTuner", page).get().filter(function(i) { return i.checked }).map(function(i) { return i.getAttribute("data-id") }), ApiClient.ajax({ type: "POST", url: ApiClient.getUrl("LiveTv/ListingProviders", { ValidateListings: !0 }), data: JSON.stringify(info), contentType: "application/json" }).then(function(result) { loading.hide(), !1 !== options.showConfirmation && Dashboard.processServerConfigurationUpdateResult(), Events.trigger(self, "submitted") }, function() { loading.hide(), Dashboard.alert({ message: Globalize.translate("ErrorAddingListingsToSchedulesDirect") }) }) }) } function refreshListings(value) { if (!value) return void $("#selectListing", page).html(""); loading.show(), ApiClient.ajax({ type: "GET", url: ApiClient.getUrl("LiveTv/ListingProviders/Lineups", { Id: providerId, Location: value, Country: $("#selectCountry", page).val() }), dataType: "json" }).then(function(result) { $("#selectListing", page).html(result.map(function(o) { return '" })), listingsId && $("#selectListing", page).val(listingsId), loading.hide() }, function(result) { Dashboard.alert({ message: Globalize.translate("ErrorGettingTvLineups") }), refreshListings(""), loading.hide() }) } function getTunerName(providerId) { switch (providerId = providerId.toLowerCase()) { case "m3u": return "M3U Playlist"; case "hdhomerun": return "HDHomerun"; case "satip": return "DVB"; default: return "Unknown" } } function refreshTunerDevices(page, providerInfo, devices) { for (var html = "", i = 0, length = devices.length; i < length; i++) { var device = devices[i]; html += '