mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
Migrated livetvtuner.js file to es6 module
This commit is contained in:
parent
ade438f53d
commit
c5e6b5d95d
2 changed files with 217 additions and 220 deletions
|
@ -193,6 +193,7 @@
|
||||||
"src/controllers/playback/queue/index.js",
|
"src/controllers/playback/queue/index.js",
|
||||||
"src/controllers/playback/video/index.js",
|
"src/controllers/playback/video/index.js",
|
||||||
"src/controllers/searchpage.js",
|
"src/controllers/searchpage.js",
|
||||||
|
"src/controllers/livetvtuner.js",
|
||||||
"src/controllers/shows/episodes.js",
|
"src/controllers/shows/episodes.js",
|
||||||
"src/controllers/shows/tvgenres.js",
|
"src/controllers/shows/tvgenres.js",
|
||||||
"src/controllers/shows/tvlatest.js",
|
"src/controllers/shows/tvlatest.js",
|
||||||
|
|
|
@ -1,232 +1,228 @@
|
||||||
define(['globalize', 'loading', 'libraryMenu', 'dom', 'emby-input', 'emby-button', 'emby-checkbox', 'emby-select'], function (globalize, loading, libraryMenu, dom) {
|
import globalize from 'globalize';
|
||||||
'use strict';
|
import loading from 'loading';
|
||||||
|
import dom from 'dom';
|
||||||
|
import 'emby-input';
|
||||||
|
import 'emby-button';
|
||||||
|
import 'emby-checkbox';
|
||||||
|
import 'emby-select';
|
||||||
|
|
||||||
function isM3uVariant(type) {
|
function isM3uVariant(type) {
|
||||||
return ['nextpvr'].indexOf(type || '') !== -1;
|
return ['nextpvr'].indexOf(type || '') !== -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
function fillTypes(view, currentId) {
|
function fillTypes(view, currentId) {
|
||||||
return ApiClient.getJSON(ApiClient.getUrl('LiveTv/TunerHosts/Types')).then(function (types) {
|
return ApiClient.getJSON(ApiClient.getUrl('LiveTv/TunerHosts/Types')).then(function (types) {
|
||||||
var selectType = view.querySelector('.selectType');
|
const selectType = view.querySelector('.selectType');
|
||||||
var html = '';
|
let html = '';
|
||||||
html += types.map(function (tuner) {
|
html += types.map(function (tuner) {
|
||||||
return '<option value="' + tuner.Id + '">' + tuner.Name + '</option>';
|
return '<option value="' + tuner.Id + '">' + tuner.Name + '</option>';
|
||||||
}).join('');
|
}).join('');
|
||||||
html += '<option value="other">';
|
html += '<option value="other">';
|
||||||
html += globalize.translate('TabOther');
|
html += globalize.translate('TabOther');
|
||||||
html += '</option>';
|
html += '</option>';
|
||||||
selectType.innerHTML = html;
|
selectType.innerHTML = html;
|
||||||
selectType.disabled = null != currentId;
|
selectType.disabled = null != currentId;
|
||||||
selectType.value = '';
|
selectType.value = '';
|
||||||
onTypeChange.call(selectType);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function reload(view, providerId) {
|
|
||||||
view.querySelector('.txtDevicePath').value = '';
|
|
||||||
view.querySelector('.chkFavorite').checked = false;
|
|
||||||
view.querySelector('.txtDevicePath').value = '';
|
|
||||||
|
|
||||||
if (providerId) {
|
|
||||||
ApiClient.getNamedConfiguration('livetv').then(function (config) {
|
|
||||||
var info = config.TunerHosts.filter(function (i) {
|
|
||||||
return i.Id === providerId;
|
|
||||||
})[0];
|
|
||||||
fillTunerHostInfo(view, info);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function fillTunerHostInfo(view, info) {
|
|
||||||
var selectType = view.querySelector('.selectType');
|
|
||||||
var type = info.Type || '';
|
|
||||||
|
|
||||||
if (info.Source && isM3uVariant(info.Source)) {
|
|
||||||
type = info.Source;
|
|
||||||
}
|
|
||||||
|
|
||||||
selectType.value = type;
|
|
||||||
onTypeChange.call(selectType);
|
onTypeChange.call(selectType);
|
||||||
view.querySelector('.txtDevicePath').value = info.Url || '';
|
});
|
||||||
view.querySelector('.txtFriendlyName').value = info.FriendlyName || '';
|
}
|
||||||
view.querySelector('.txtUserAgent').value = info.UserAgent || '';
|
|
||||||
view.querySelector('.fldDeviceId').value = info.DeviceId || '';
|
|
||||||
view.querySelector('.chkFavorite').checked = info.ImportFavoritesOnly;
|
|
||||||
view.querySelector('.chkTranscode').checked = info.AllowHWTranscoding;
|
|
||||||
view.querySelector('.chkStreamLoop').checked = info.EnableStreamLooping;
|
|
||||||
view.querySelector('.txtTunerCount').value = info.TunerCount || '0';
|
|
||||||
}
|
|
||||||
|
|
||||||
function submitForm(page) {
|
function reload(view, providerId) {
|
||||||
loading.show();
|
view.querySelector('.txtDevicePath').value = '';
|
||||||
var info = {
|
view.querySelector('.chkFavorite').checked = false;
|
||||||
Type: page.querySelector('.selectType').value,
|
view.querySelector('.txtDevicePath').value = '';
|
||||||
Url: page.querySelector('.txtDevicePath').value || null,
|
|
||||||
UserAgent: page.querySelector('.txtUserAgent').value || null,
|
|
||||||
FriendlyName: page.querySelector('.txtFriendlyName').value || null,
|
|
||||||
DeviceId: page.querySelector('.fldDeviceId').value || null,
|
|
||||||
TunerCount: page.querySelector('.txtTunerCount').value || 0,
|
|
||||||
ImportFavoritesOnly: page.querySelector('.chkFavorite').checked,
|
|
||||||
AllowHWTranscoding: page.querySelector('.chkTranscode').checked,
|
|
||||||
EnableStreamLooping: page.querySelector('.chkStreamLoop').checked
|
|
||||||
};
|
|
||||||
|
|
||||||
if (isM3uVariant(info.Type)) {
|
if (providerId) {
|
||||||
info.Source = info.Type;
|
ApiClient.getNamedConfiguration('livetv').then(function (config) {
|
||||||
info.Type = 'm3u';
|
const info = config.TunerHosts.filter(function (i) {
|
||||||
}
|
return i.Id === providerId;
|
||||||
|
})[0];
|
||||||
var id = getParameterByName('id');
|
fillTunerHostInfo(view, info);
|
||||||
|
|
||||||
if (id) {
|
|
||||||
info.Id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
ApiClient.ajax({
|
|
||||||
type: 'POST',
|
|
||||||
url: ApiClient.getUrl('LiveTv/TunerHosts'),
|
|
||||||
data: JSON.stringify(info),
|
|
||||||
contentType: 'application/json'
|
|
||||||
}).then(function (result) {
|
|
||||||
Dashboard.processServerConfigurationUpdateResult();
|
|
||||||
Dashboard.navigate('livetvstatus.html');
|
|
||||||
}, function () {
|
|
||||||
loading.hide();
|
|
||||||
Dashboard.alert({
|
|
||||||
message: globalize.translate('ErrorSavingTvProvider')
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function getRequirePromise(deps) {
|
function fillTunerHostInfo(view, info) {
|
||||||
return new Promise(function (resolve, reject) {
|
const selectType = view.querySelector('.selectType');
|
||||||
require(deps, resolve);
|
let type = info.Type || '';
|
||||||
});
|
|
||||||
|
if (info.Source && isM3uVariant(info.Source)) {
|
||||||
|
type = info.Source;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getDetectedDevice() {
|
selectType.value = type;
|
||||||
return getRequirePromise(['tunerPicker']).then(function (tunerPicker) {
|
onTypeChange.call(selectType);
|
||||||
return new tunerPicker().show({
|
view.querySelector('.txtDevicePath').value = info.Url || '';
|
||||||
serverId: ApiClient.serverId()
|
view.querySelector('.txtFriendlyName').value = info.FriendlyName || '';
|
||||||
});
|
view.querySelector('.txtUserAgent').value = info.UserAgent || '';
|
||||||
});
|
view.querySelector('.fldDeviceId').value = info.DeviceId || '';
|
||||||
}
|
view.querySelector('.chkFavorite').checked = info.ImportFavoritesOnly;
|
||||||
|
view.querySelector('.chkTranscode').checked = info.AllowHWTranscoding;
|
||||||
|
view.querySelector('.chkStreamLoop').checked = info.EnableStreamLooping;
|
||||||
|
view.querySelector('.txtTunerCount').value = info.TunerCount || '0';
|
||||||
|
}
|
||||||
|
|
||||||
function onTypeChange() {
|
function submitForm(page) {
|
||||||
var value = this.value;
|
loading.show();
|
||||||
var view = dom.parentWithClass(this, 'page');
|
const info = {
|
||||||
var mayIncludeUnsupportedDrmChannels = 'hdhomerun' === value;
|
Type: page.querySelector('.selectType').value,
|
||||||
var supportsTranscoding = 'hdhomerun' === value;
|
Url: page.querySelector('.txtDevicePath').value || null,
|
||||||
var supportsFavorites = 'hdhomerun' === value;
|
UserAgent: page.querySelector('.txtUserAgent').value || null,
|
||||||
var supportsTunerIpAddress = 'hdhomerun' === value;
|
FriendlyName: page.querySelector('.txtFriendlyName').value || null,
|
||||||
var supportsTunerFileOrUrl = 'm3u' === value;
|
DeviceId: page.querySelector('.fldDeviceId').value || null,
|
||||||
var supportsStreamLooping = 'm3u' === value;
|
TunerCount: page.querySelector('.txtTunerCount').value || 0,
|
||||||
var supportsTunerCount = 'm3u' === value;
|
ImportFavoritesOnly: page.querySelector('.chkFavorite').checked,
|
||||||
var supportsUserAgent = 'm3u' === value;
|
AllowHWTranscoding: page.querySelector('.chkTranscode').checked,
|
||||||
var suppportsSubmit = 'other' !== value;
|
EnableStreamLooping: page.querySelector('.chkStreamLoop').checked
|
||||||
var supportsSelectablePath = supportsTunerFileOrUrl;
|
|
||||||
var txtDevicePath = view.querySelector('.txtDevicePath');
|
|
||||||
|
|
||||||
if (supportsTunerIpAddress) {
|
|
||||||
txtDevicePath.label(globalize.translate('LabelTunerIpAddress'));
|
|
||||||
view.querySelector('.fldPath').classList.remove('hide');
|
|
||||||
} else if (supportsTunerFileOrUrl) {
|
|
||||||
txtDevicePath.label(globalize.translate('LabelFileOrUrl'));
|
|
||||||
view.querySelector('.fldPath').classList.remove('hide');
|
|
||||||
} else {
|
|
||||||
view.querySelector('.fldPath').classList.add('hide');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (supportsSelectablePath) {
|
|
||||||
view.querySelector('.btnSelectPath').classList.remove('hide');
|
|
||||||
view.querySelector('.txtDevicePath').setAttribute('required', 'required');
|
|
||||||
} else {
|
|
||||||
view.querySelector('.btnSelectPath').classList.add('hide');
|
|
||||||
view.querySelector('.txtDevicePath').removeAttribute('required');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (supportsUserAgent) {
|
|
||||||
view.querySelector('.fldUserAgent').classList.remove('hide');
|
|
||||||
} else {
|
|
||||||
view.querySelector('.fldUserAgent').classList.add('hide');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (supportsFavorites) {
|
|
||||||
view.querySelector('.fldFavorites').classList.remove('hide');
|
|
||||||
} else {
|
|
||||||
view.querySelector('.fldFavorites').classList.add('hide');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (supportsTranscoding) {
|
|
||||||
view.querySelector('.fldTranscode').classList.remove('hide');
|
|
||||||
} else {
|
|
||||||
view.querySelector('.fldTranscode').classList.add('hide');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (supportsStreamLooping) {
|
|
||||||
view.querySelector('.fldStreamLoop').classList.remove('hide');
|
|
||||||
} else {
|
|
||||||
view.querySelector('.fldStreamLoop').classList.add('hide');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (supportsTunerCount) {
|
|
||||||
view.querySelector('.fldTunerCount').classList.remove('hide');
|
|
||||||
view.querySelector('.txtTunerCount').setAttribute('required', 'required');
|
|
||||||
} else {
|
|
||||||
view.querySelector('.fldTunerCount').classList.add('hide');
|
|
||||||
view.querySelector('.txtTunerCount').removeAttribute('required');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mayIncludeUnsupportedDrmChannels) {
|
|
||||||
view.querySelector('.drmMessage').classList.remove('hide');
|
|
||||||
} else {
|
|
||||||
view.querySelector('.drmMessage').classList.add('hide');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (suppportsSubmit) {
|
|
||||||
view.querySelector('.button-submit').classList.remove('hide');
|
|
||||||
} else {
|
|
||||||
view.querySelector('.button-submit').classList.add('hide');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return function (view, params) {
|
|
||||||
if (!params.id) {
|
|
||||||
view.querySelector('.btnDetect').classList.remove('hide');
|
|
||||||
}
|
|
||||||
|
|
||||||
view.addEventListener('viewshow', function () {
|
|
||||||
var currentId = params.id;
|
|
||||||
fillTypes(view, currentId).then(function () {
|
|
||||||
reload(view, currentId);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
view.querySelector('form').addEventListener('submit', function (e) {
|
|
||||||
submitForm(view);
|
|
||||||
e.preventDefault();
|
|
||||||
e.stopPropagation();
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
view.querySelector('.selectType').addEventListener('change', onTypeChange);
|
|
||||||
view.querySelector('.btnDetect').addEventListener('click', function () {
|
|
||||||
getDetectedDevice().then(function (info) {
|
|
||||||
fillTunerHostInfo(view, info);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
view.querySelector('.btnSelectPath').addEventListener('click', function () {
|
|
||||||
require(['directorybrowser'], function (directoryBrowser) {
|
|
||||||
var picker = new directoryBrowser.default();
|
|
||||||
picker.show({
|
|
||||||
includeFiles: true,
|
|
||||||
callback: function (path) {
|
|
||||||
if (path) {
|
|
||||||
view.querySelector('.txtDevicePath').value = path;
|
|
||||||
}
|
|
||||||
|
|
||||||
picker.close();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
});
|
|
||||||
|
if (isM3uVariant(info.Type)) {
|
||||||
|
info.Source = info.Type;
|
||||||
|
info.Type = 'm3u';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (getParameterByName('id')) {
|
||||||
|
info.Id = getParameterByName('id');
|
||||||
|
}
|
||||||
|
|
||||||
|
ApiClient.ajax({
|
||||||
|
type: 'POST',
|
||||||
|
url: ApiClient.getUrl('LiveTv/TunerHosts'),
|
||||||
|
data: JSON.stringify(info),
|
||||||
|
contentType: 'application/json'
|
||||||
|
}).then(function (result) {
|
||||||
|
Dashboard.processServerConfigurationUpdateResult();
|
||||||
|
Dashboard.navigate('livetvstatus.html');
|
||||||
|
}, function () {
|
||||||
|
loading.hide();
|
||||||
|
Dashboard.alert({
|
||||||
|
message: globalize.translate('ErrorSavingTvProvider')
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function getDetectedDevice() {
|
||||||
|
return import('tunerPicker').then(({default: tunerPicker}) => {
|
||||||
|
return new tunerPicker().show({
|
||||||
|
serverId: ApiClient.serverId()
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function onTypeChange() {
|
||||||
|
const value = this.value;
|
||||||
|
const view = dom.parentWithClass(this, 'page');
|
||||||
|
const mayIncludeUnsupportedDrmChannels = 'hdhomerun' === value;
|
||||||
|
const supportsTranscoding = 'hdhomerun' === value;
|
||||||
|
const supportsFavorites = 'hdhomerun' === value;
|
||||||
|
const supportsTunerIpAddress = 'hdhomerun' === value;
|
||||||
|
const supportsTunerFileOrUrl = 'm3u' === value;
|
||||||
|
const supportsStreamLooping = 'm3u' === value;
|
||||||
|
const supportsTunerCount = 'm3u' === value;
|
||||||
|
const supportsUserAgent = 'm3u' === value;
|
||||||
|
const suppportsSubmit = 'other' !== value;
|
||||||
|
const supportsSelectablePath = supportsTunerFileOrUrl;
|
||||||
|
const txtDevicePath = view.querySelector('.txtDevicePath');
|
||||||
|
|
||||||
|
if (supportsTunerIpAddress) {
|
||||||
|
txtDevicePath.label(globalize.translate('LabelTunerIpAddress'));
|
||||||
|
view.querySelector('.fldPath').classList.remove('hide');
|
||||||
|
} else if (supportsTunerFileOrUrl) {
|
||||||
|
txtDevicePath.label(globalize.translate('LabelFileOrUrl'));
|
||||||
|
view.querySelector('.fldPath').classList.remove('hide');
|
||||||
|
} else {
|
||||||
|
view.querySelector('.fldPath').classList.add('hide');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (supportsSelectablePath) {
|
||||||
|
view.querySelector('.btnSelectPath').classList.remove('hide');
|
||||||
|
view.querySelector('.txtDevicePath').setAttribute('required', 'required');
|
||||||
|
} else {
|
||||||
|
view.querySelector('.btnSelectPath').classList.add('hide');
|
||||||
|
view.querySelector('.txtDevicePath').removeAttribute('required');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (supportsUserAgent) {
|
||||||
|
view.querySelector('.fldUserAgent').classList.remove('hide');
|
||||||
|
} else {
|
||||||
|
view.querySelector('.fldUserAgent').classList.add('hide');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (supportsFavorites) {
|
||||||
|
view.querySelector('.fldFavorites').classList.remove('hide');
|
||||||
|
} else {
|
||||||
|
view.querySelector('.fldFavorites').classList.add('hide');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (supportsTranscoding) {
|
||||||
|
view.querySelector('.fldTranscode').classList.remove('hide');
|
||||||
|
} else {
|
||||||
|
view.querySelector('.fldTranscode').classList.add('hide');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (supportsStreamLooping) {
|
||||||
|
view.querySelector('.fldStreamLoop').classList.remove('hide');
|
||||||
|
} else {
|
||||||
|
view.querySelector('.fldStreamLoop').classList.add('hide');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (supportsTunerCount) {
|
||||||
|
view.querySelector('.fldTunerCount').classList.remove('hide');
|
||||||
|
view.querySelector('.txtTunerCount').setAttribute('required', 'required');
|
||||||
|
} else {
|
||||||
|
view.querySelector('.fldTunerCount').classList.add('hide');
|
||||||
|
view.querySelector('.txtTunerCount').removeAttribute('required');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mayIncludeUnsupportedDrmChannels) {
|
||||||
|
view.querySelector('.drmMessage').classList.remove('hide');
|
||||||
|
} else {
|
||||||
|
view.querySelector('.drmMessage').classList.add('hide');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (suppportsSubmit) {
|
||||||
|
view.querySelector('.button-submit').classList.remove('hide');
|
||||||
|
} else {
|
||||||
|
view.querySelector('.button-submit').classList.add('hide');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function (view, params) {
|
||||||
|
if (!params.id) {
|
||||||
|
view.querySelector('.btnDetect').classList.remove('hide');
|
||||||
|
}
|
||||||
|
|
||||||
|
view.addEventListener('viewshow', function () {
|
||||||
|
const currentId = params.id;
|
||||||
|
fillTypes(view, currentId).then(function () {
|
||||||
|
reload(view, currentId);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
view.querySelector('form').addEventListener('submit', function (e) {
|
||||||
|
submitForm(view);
|
||||||
|
e.preventDefault();
|
||||||
|
e.stopPropagation();
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
view.querySelector('.selectType').addEventListener('change', onTypeChange);
|
||||||
|
view.querySelector('.btnDetect').addEventListener('click', function () {
|
||||||
|
getDetectedDevice().then(function (info) {
|
||||||
|
fillTunerHostInfo(view, info);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
view.querySelector('.btnSelectPath').addEventListener('click', function () {
|
||||||
|
import('directorybrowser').then(({default: directorybrowser}) => {
|
||||||
|
const picker = new directorybrowser();
|
||||||
|
picker.show({
|
||||||
|
includeFiles: true,
|
||||||
|
callback: function (path) {
|
||||||
|
if (path) {
|
||||||
|
view.querySelector('.txtDevicePath').value = path;
|
||||||
|
}
|
||||||
|
|
||||||
|
picker.close();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue