diff --git a/package.json b/package.json index e6bb8ab898..a9e269f5ef 100644 --- a/package.json +++ b/package.json @@ -206,6 +206,7 @@ "src/controllers/playback/video/index.js", "src/controllers/searchpage.js", "src/controllers/livetvtuner.js", + "src/controllers/livetvstatus.js", "src/controllers/shows/episodes.js", "src/controllers/shows/tvgenres.js", "src/controllers/shows/tvlatest.js", diff --git a/src/controllers/livetvstatus.js b/src/controllers/livetvstatus.js index 84ea006fd9..f37760808a 100644 --- a/src/controllers/livetvstatus.js +++ b/src/controllers/livetvstatus.js @@ -1,294 +1,305 @@ -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'; +import $ from 'jQuery'; +import globalize from 'globalize'; +import taskButton from 'scripts/taskbutton'; +import dom from 'dom'; +import layoutManager from 'layoutManager'; +import loading from 'loading'; +import browser from 'browser'; +import 'listViewStyle'; +import 'flexStyles'; +import 'emby-itemscontainer'; +import 'cardStyle'; +import 'material-icons'; +import 'emby-button'; - var enableFocusTransform = !browser.slow && !browser.edge; +const 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'; +function getDeviceHtml(device) { + let padderClass; + let html = ''; + let cssClass = 'card scalableCard'; + let cardBoxCssClass = 'cardBox visualCardBox'; + cssClass += ' backdropCard backdropCard-scalable'; + padderClass = 'cardPadder-backdrop'; - // TODO move card creation code to Card component + // TODO move card creation code to Card component - if (layoutManager.tv) { - cssClass += ' show-focus'; + if (layoutManager.tv) { + cssClass += ' show-focus'; - if (enableFocusTransform) { - cssClass += ' show-animation'; - } + if (enableFocusTransform) { + cssClass += ' show-animation'; } - - html += '
'; - html += '
'; - html += '
'; - html += '
'; - html += '
'; - html += '
'; - 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; - } + html += '
'; + html += '
'; + html += '
'; + html += '
'; + html += '
'; + html += '
'; + html += '
'; + html += '
'; + html += '
'; + html += ''; + html += '
' + (device.FriendlyName || getTunerName(device.Type)) + '
'; + html += '
'; + html += device.Url || ' '; + html += '
'; + html += '
'; + html += '
'; + return html += '
'; +} - function deleteDevice(page, id) { - var message = globalize.translate('MessageConfirmDeleteTunerDevice'); +function renderDevices(page, devices) { + page.querySelector('.devicesList').innerHTML = devices.map(getDeviceHtml).join(''); +} - require(['confirm'], function (confirm) { - confirm.default(message, globalize.translate('HeaderDeleteDevice')).then(function () { - loading.show(); - ApiClient.ajax({ - type: 'DELETE', - url: ApiClient.getUrl('LiveTv/TunerHosts', { - Id: id - }) - }).then(function () { - reload(page); - }); +function deleteDevice(page, id) { + const message = globalize.translate('MessageConfirmDeleteTunerDevice'); + + import('confirm').then(({default: 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); +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') }); - 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) { + let html = ''; - 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 += ''; - html += ''; - html += ''; - html += '
'; - } + if (providers.length) { + html += '
'; + for (let i = 0, length = providers.length; i < length; i++) { + const provider = providers[i]; + html += ''; } - var elem = $('.providerList', page).html(html); - $('.btnOptions', elem).on('click', function () { - var id = this.getAttribute('data-id'); - showProviderOptions(page, id, this); - }); + html += '
'; } - function showProviderOptions(page, providerId, button) { - var items = []; - items.push({ - name: globalize.translate('ButtonDelete'), - id: 'delete' - }); - items.push({ - name: globalize.translate('MapChannels'), - id: 'map' - }); + const elem = $('.providerList', page).html(html); + $('.btnOptions', elem).on('click', function () { + const id = this.getAttribute('data-id'); + showProviderOptions(page, id, this); + }); +} - require(['actionsheet'], function (actionsheet) { - actionsheet.show({ - items: items, - positionTo: button - }).then(function (id) { - switch (id) { - case 'delete': - deleteProvider(page, providerId); - break; +function showProviderOptions(page, providerId, button) { + const items = []; + items.push({ + name: globalize.translate('ButtonDelete'), + id: 'delete' + }); + items.push({ + name: globalize.translate('MapChannels'), + id: 'map' + }); - case 'map': - mapChannels(page, providerId); - } - }); - }); - } + import('actionsheet').then(({default: actionsheet}) => { + actionsheet.show({ + items: items, + positionTo: button + }).then(function (id) { + switch (id) { + case 'delete': + deleteProvider(page, providerId); + break; - function mapChannels(page, providerId) { - require(['components/channelMapper/channelMapper'], function (channelMapper) { - new channelMapper.default({ - serverId: ApiClient.serverInfo().Id, - providerId: providerId - }).show(); - }); - } - - function deleteProvider(page, id) { - var message = globalize.translate('MessageConfirmDeleteGuideProvider'); - - require(['confirm'], function (confirm) { - confirm.default(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); + case 'map': + mapChannels(page, providerId); } + }); + }); +} + +function mapChannels(page, providerId) { + import('components/channelMapper/channelMapper').then(({default: channelMapper}) => { + new channelMapper({ + serverId: ApiClient.serverInfo().Id, + providerId: providerId + }).show(); + }); +} + +function deleteProvider(page, id) { + const message = globalize.translate('MessageConfirmDeleteGuideProvider'); + + import('confirm').then(({default: 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) { + const menuItems = []; + menuItems.push({ + name: 'Schedules Direct', + id: 'SchedulesDirect' + }); + menuItems.push({ + name: 'XMLTV', + id: 'xmltv' + }); + + import('actionsheet').then(({default: 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) { + const items = []; + items.push({ + name: globalize.translate('ButtonDelete'), + id: 'delete' + }); + items.push({ + name: globalize.translate('ButtonEdit'), + id: 'edit' + }); + + import('actionsheet').then(({default: 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) { + const card = dom.parentWithClass(e.target, 'card'); + + if (card) { + const id = card.getAttribute('data-id'); + const btnCardOptions = dom.parentWithClass(e.target, 'btnCardOptions'); + + if (btnCardOptions) { + showDeviceMenu(btnCardOptions, id); + } else { + Dashboard.navigate('livetvtuner.html?id=' + id); } } +} +export default function () { $(document).on('pageinit', '#liveTvStatusPage', function () { - var page = this; + const page = this; $('.btnAddDevice', page).on('click', function () { addDevice(this); }); @@ -301,21 +312,21 @@ define(['jQuery', 'globalize', 'scripts/taskbutton', 'dom', 'libraryMenu', 'layo }); page.querySelector('.devicesList').addEventListener('click', onDevicesListClick); }).on('pageshow', '#liveTvStatusPage', function () { - var page = this; + const page = this; reload(page); - taskButton.default({ + taskButton({ mode: 'on', progressElem: page.querySelector('.refreshGuideProgress'), taskKey: 'RefreshGuide', button: page.querySelector('.btnRefresh') }); }).on('pagehide', '#liveTvStatusPage', function () { - var page = this; - taskButton.default({ + const page = this; + taskButton({ mode: 'off', progressElem: page.querySelector('.refreshGuideProgress'), taskKey: 'RefreshGuide', button: page.querySelector('.btnRefresh') }); }); -}); +}