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

233 lines
8.8 KiB
JavaScript
Raw Normal View History

2020-05-04 12:44:12 +02:00
define(['globalize', 'loading', 'libraryMenu', 'dom', 'emby-input', 'emby-button', 'emby-checkbox', 'emby-select'], function (globalize, loading, libraryMenu, dom) {
'use strict';
2018-10-23 01:05:09 +03:00
function isM3uVariant(type) {
2020-05-04 12:44:12 +02:00
return ['nextpvr'].indexOf(type || '') !== -1;
2018-10-23 01:05:09 +03:00
}
function fillTypes(view, currentId) {
2020-05-04 12:44:12 +02:00
return ApiClient.getJSON(ApiClient.getUrl('LiveTv/TunerHosts/Types')).then(function (types) {
var selectType = view.querySelector('.selectType');
var html = '';
html += types.map(function (tuner) {
2020-05-04 12:44:12 +02:00
return '<option value="' + tuner.Id + '">' + tuner.Name + '</option>';
}).join('');
2019-03-09 11:37:40 +09:00
html += '<option value="other">';
2020-05-04 12:44:12 +02:00
html += globalize.translate('TabOther');
html += '</option>';
2019-03-09 11:37:40 +09:00
selectType.innerHTML = html;
selectType.disabled = null != currentId;
2020-05-04 12:44:12 +02:00
selectType.value = '';
onTypeChange.call(selectType);
});
2018-10-23 01:05:09 +03:00
}
function reload(view, providerId) {
2020-05-04 12:44:12 +02:00
view.querySelector('.txtDevicePath').value = '';
view.querySelector('.chkFavorite').checked = false;
view.querySelector('.txtDevicePath').value = '';
if (providerId) {
2020-05-04 12:44:12 +02:00
ApiClient.getNamedConfiguration('livetv').then(function (config) {
var info = config.TunerHosts.filter(function (i) {
return i.Id === providerId;
})[0];
fillTunerHostInfo(view, info);
});
}
2018-10-23 01:05:09 +03:00
}
function fillTunerHostInfo(view, info) {
2020-05-04 12:44:12 +02:00
var selectType = view.querySelector('.selectType');
var type = info.Type || '';
if (info.Source && isM3uVariant(info.Source)) {
2019-03-09 11:37:40 +09:00
type = info.Source;
}
2019-03-09 11:37:40 +09:00
selectType.value = type;
onTypeChange.call(selectType);
2020-05-04 12:44:12 +02:00
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';
2018-10-23 01:05:09 +03:00
}
function submitForm(page) {
loading.show();
var info = {
2020-05-04 12:44:12 +02:00
Type: page.querySelector('.selectType').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
2018-10-23 01:05:09 +03:00
};
if (isM3uVariant(info.Type)) {
info.Source = info.Type;
2020-05-04 12:44:12 +02:00
info.Type = 'm3u';
}
2020-05-04 12:44:12 +02:00
var id = getParameterByName('id');
if (id) {
info.Id = id;
}
2018-10-23 01:05:09 +03:00
ApiClient.ajax({
2020-05-04 12:44:12 +02:00
type: 'POST',
url: ApiClient.getUrl('LiveTv/TunerHosts'),
2018-10-23 01:05:09 +03:00
data: JSON.stringify(info),
2020-05-04 12:44:12 +02:00
contentType: 'application/json'
}).then(function (result) {
Dashboard.processServerConfigurationUpdateResult();
2020-05-04 12:44:12 +02:00
Dashboard.navigate('livetvstatus.html');
}, function () {
loading.hide();
Dashboard.alert({
2020-05-04 12:44:12 +02:00
message: globalize.translate('ErrorSavingTvProvider')
});
});
2018-10-23 01:05:09 +03:00
}
function getRequirePromise(deps) {
return new Promise(function (resolve, reject) {
require(deps, resolve);
});
2018-10-23 01:05:09 +03:00
}
function getDetectedDevice() {
2020-05-04 12:44:12 +02:00
return getRequirePromise(['tunerPicker']).then(function (tunerPicker) {
return new tunerPicker().show({
2018-10-23 01:05:09 +03:00
serverId: ApiClient.serverId()
});
});
2018-10-23 01:05:09 +03:00
}
function onTypeChange() {
var value = this.value;
2020-05-04 12:44:12 +02:00
var view = dom.parentWithClass(this, 'page');
var mayIncludeUnsupportedDrmChannels = 'hdhomerun' === value;
var supportsTranscoding = 'hdhomerun' === value;
var supportsFavorites = 'hdhomerun' === value;
var supportsTunerIpAddress = 'hdhomerun' === value;
var supportsTunerFileOrUrl = 'm3u' === value;
var supportsStreamLooping = 'm3u' === value;
var supportsTunerCount = 'm3u' === value;
var supportsUserAgent = 'm3u' === value;
var suppportsSubmit = 'other' !== value;
var supportsSelectablePath = supportsTunerFileOrUrl;
2020-05-04 12:44:12 +02:00
var txtDevicePath = view.querySelector('.txtDevicePath');
if (supportsTunerIpAddress) {
2020-05-04 12:44:12 +02:00
txtDevicePath.label(globalize.translate('LabelTunerIpAddress'));
view.querySelector('.fldPath').classList.remove('hide');
} else if (supportsTunerFileOrUrl) {
2020-05-04 12:44:12 +02:00
txtDevicePath.label(globalize.translate('LabelFileOrUrl'));
view.querySelector('.fldPath').classList.remove('hide');
} else {
2020-05-04 12:44:12 +02:00
view.querySelector('.fldPath').classList.add('hide');
}
if (supportsSelectablePath) {
2020-05-04 12:44:12 +02:00
view.querySelector('.btnSelectPath').classList.remove('hide');
view.querySelector('.txtDevicePath').setAttribute('required', 'required');
} else {
2020-05-04 12:44:12 +02:00
view.querySelector('.btnSelectPath').classList.add('hide');
view.querySelector('.txtDevicePath').removeAttribute('required');
}
if (supportsUserAgent) {
2020-05-04 12:44:12 +02:00
view.querySelector('.fldUserAgent').classList.remove('hide');
} else {
2020-05-04 12:44:12 +02:00
view.querySelector('.fldUserAgent').classList.add('hide');
}
if (supportsFavorites) {
2020-05-04 12:44:12 +02:00
view.querySelector('.fldFavorites').classList.remove('hide');
} else {
2020-05-04 12:44:12 +02:00
view.querySelector('.fldFavorites').classList.add('hide');
}
if (supportsTranscoding) {
2020-05-04 12:44:12 +02:00
view.querySelector('.fldTranscode').classList.remove('hide');
} else {
2020-05-04 12:44:12 +02:00
view.querySelector('.fldTranscode').classList.add('hide');
}
if (supportsStreamLooping) {
2020-05-04 12:44:12 +02:00
view.querySelector('.fldStreamLoop').classList.remove('hide');
} else {
2020-05-04 12:44:12 +02:00
view.querySelector('.fldStreamLoop').classList.add('hide');
}
if (supportsTunerCount) {
2020-05-04 12:44:12 +02:00
view.querySelector('.fldTunerCount').classList.remove('hide');
view.querySelector('.txtTunerCount').setAttribute('required', 'required');
} else {
2020-05-04 12:44:12 +02:00
view.querySelector('.fldTunerCount').classList.add('hide');
view.querySelector('.txtTunerCount').removeAttribute('required');
}
if (mayIncludeUnsupportedDrmChannels) {
2020-05-04 12:44:12 +02:00
view.querySelector('.drmMessage').classList.remove('hide');
} else {
2020-05-04 12:44:12 +02:00
view.querySelector('.drmMessage').classList.add('hide');
}
if (suppportsSubmit) {
2020-05-04 12:44:12 +02:00
view.querySelector('.button-submit').classList.remove('hide');
} else {
2020-05-04 12:44:12 +02:00
view.querySelector('.button-submit').classList.add('hide');
}
2018-10-23 01:05:09 +03:00
}
return function (view, params) {
if (!params.id) {
2020-05-04 12:44:12 +02:00
view.querySelector('.btnDetect').classList.remove('hide');
}
2020-05-04 12:44:12 +02:00
view.addEventListener('viewshow', function () {
2018-10-23 01:05:09 +03:00
var currentId = params.id;
fillTypes(view, currentId).then(function () {
reload(view, currentId);
});
});
2020-05-04 12:44:12 +02:00
view.querySelector('form').addEventListener('submit', function (e) {
submitForm(view);
e.preventDefault();
e.stopPropagation();
return false;
});
2020-05-04 12:44:12 +02:00
view.querySelector('.selectType').addEventListener('change', onTypeChange);
view.querySelector('.btnDetect').addEventListener('click', function () {
getDetectedDevice().then(function (info) {
fillTunerHostInfo(view, info);
});
});
2020-05-04 12:44:12 +02:00
view.querySelector('.btnSelectPath').addEventListener('click', function () {
require(['directorybrowser'], function (directoryBrowser) {
var picker = new directoryBrowser();
2018-10-23 01:05:09 +03:00
picker.show({
includeFiles: true,
callback: function (path) {
if (path) {
2020-05-04 12:44:12 +02:00
view.querySelector('.txtDevicePath').value = path;
}
picker.close();
2018-10-23 01:05:09 +03:00
}
});
});
});
};
});