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/encodingsettings.js
2020-04-05 17:22:02 -04:00

191 lines
8.3 KiB
JavaScript

define(["jQuery", "loading", "globalize", "dom", "libraryMenu"], function ($, loading, globalize, dom, libraryMenu) {
"use strict";
function loadPage(page, config, systemInfo) {
Array.prototype.forEach.call(page.querySelectorAll(".chkDecodeCodec"), function (c) {
c.checked = -1 !== (config.HardwareDecodingCodecs || []).indexOf(c.getAttribute("data-codec"));
});
page.querySelector("#chkHardwareEncoding").checked = config.EnableHardwareEncoding;
$("#selectVideoDecoder", page).val(config.HardwareAccelerationType);
$("#selectThreadCount", page).val(config.EncodingThreadCount);
$("#txtDownMixAudioBoost", page).val(config.DownMixAudioBoost);
page.querySelector(".txtEncoderPath").value = config.EncoderAppPathDisplay || "";
$("#txtTranscodingTempPath", page).val(systemInfo.TranscodingTempPath || "");
$("#txtVaapiDevice", page).val(config.VaapiDevice || "");
page.querySelector("#selectEncoderPreset").value = config.EncoderPreset || "";
page.querySelector("#txtH264Crf").value = config.H264Crf || "";
page.querySelector("#selectDeinterlaceMethod").value = config.DeinterlaceMethod || "";
page.querySelector("#chkEnableSubtitleExtraction").checked = config.EnableSubtitleExtraction || false;
page.querySelector("#chkEnableThrottling").checked = config.EnableThrottling || false;
page.querySelector("#selectVideoDecoder").dispatchEvent(new CustomEvent("change", {
bubbles: true
}));
loading.hide();
}
function onSaveEncodingPathFailure(response) {
loading.hide();
var msg = "";
msg = globalize.translate("FFmpegSavePathNotFound");
require(["alert"], function (alert) {
alert(msg);
});
}
function updateEncoder(form) {
return ApiClient.getSystemInfo().then(function (systemInfo) {
return ApiClient.ajax({
url: ApiClient.getUrl("System/MediaEncoder/Path"),
type: "POST",
data: {
Path: form.querySelector(".txtEncoderPath").value,
PathType: "Custom"
}
}).then(Dashboard.processServerConfigurationUpdateResult, onSaveEncodingPathFailure);
});
}
function onSubmit() {
var form = this;
var onDecoderConfirmed = function () {
loading.show();
ApiClient.getNamedConfiguration("encoding").then(function (config) {
config.DownMixAudioBoost = $("#txtDownMixAudioBoost", form).val();
config.TranscodingTempPath = $("#txtTranscodingTempPath", form).val();
config.EncodingThreadCount = $("#selectThreadCount", form).val();
config.HardwareAccelerationType = $("#selectVideoDecoder", form).val();
config.VaapiDevice = $("#txtVaapiDevice", form).val();
config.EncoderPreset = form.querySelector("#selectEncoderPreset").value;
config.H264Crf = parseInt(form.querySelector("#txtH264Crf").value || "0");
config.DeinterlaceMethod = form.querySelector("#selectDeinterlaceMethod").value;
config.EnableSubtitleExtraction = form.querySelector("#chkEnableSubtitleExtraction").checked;
config.EnableThrottling = form.querySelector("#chkEnableThrottling").checked;
config.HardwareDecodingCodecs = Array.prototype.map.call(Array.prototype.filter.call(form.querySelectorAll(".chkDecodeCodec"), function (c) {
return c.checked;
}), function (c) {
return c.getAttribute("data-codec");
});
config.EnableHardwareEncoding = form.querySelector("#chkHardwareEncoding").checked;
ApiClient.updateNamedConfiguration("encoding", config).then(function () {
updateEncoder(form);
}, function () {
require(["alert"], function (alert) {
alert(globalize.translate("DefaultErrorMessage"));
});
Dashboard.processServerConfigurationUpdateResult();
});
});
};
if ($("#selectVideoDecoder", form).val()) {
require(["alert"], function (alert) {
alert({
title: globalize.translate("TitleHardwareAcceleration"),
text: globalize.translate("HardwareAccelerationWarning")
}).then(onDecoderConfirmed);
});
} else {
onDecoderConfirmed();
}
return false;
}
function setDecodingCodecsVisible(context, value) {
value = value || "";
var any;
Array.prototype.forEach.call(context.querySelectorAll(".chkDecodeCodec"), function (c) {
if (-1 === c.getAttribute("data-types").split(",").indexOf(value)) {
dom.parentWithTag(c, "LABEL").classList.add("hide");
} else {
dom.parentWithTag(c, "LABEL").classList.remove("hide");
any = true;
}
});
if (any) {
context.querySelector(".decodingCodecsList").classList.remove("hide");
} else {
context.querySelector(".decodingCodecsList").classList.add("hide");
}
}
function getTabs() {
return [{
href: "encodingsettings.html",
name: Globalize.translate("Transcoding")
}, {
href: "playbackconfiguration.html",
name: Globalize.translate("TabResumeSettings")
}, {
href: "streamingsettings.html",
name: Globalize.translate("TabStreaming")
}];
}
$(document).on("pageinit", "#encodingSettingsPage", function () {
var page = this;
page.querySelector("#selectVideoDecoder").addEventListener("change", function () {
if ("vaapi" == this.value) {
page.querySelector(".fldVaapiDevice").classList.remove("hide");
page.querySelector("#txtVaapiDevice").setAttribute("required", "required");
} else {
page.querySelector(".fldVaapiDevice").classList.add("hide");
page.querySelector("#txtVaapiDevice").removeAttribute("required");
}
if (this.value) {
page.querySelector(".hardwareAccelerationOptions").classList.remove("hide");
} else {
page.querySelector(".hardwareAccelerationOptions").classList.add("hide");
}
setDecodingCodecsVisible(page, this.value);
});
$("#btnSelectEncoderPath", page).on("click.selectDirectory", function () {
require(["directorybrowser"], function (directoryBrowser) {
var picker = new directoryBrowser();
picker.show({
includeFiles: true,
callback: function (path) {
if (path) {
$(".txtEncoderPath", page).val(path);
}
picker.close();
}
});
});
});
$("#btnSelectTranscodingTempPath", page).on("click.selectDirectory", function () {
require(["directorybrowser"], function (directoryBrowser) {
var picker = new directoryBrowser();
picker.show({
callback: function (path) {
if (path) {
$("#txtTranscodingTempPath", page).val(path);
}
picker.close();
},
validateWriteable: true,
header: globalize.translate("HeaderSelectTranscodingPath"),
instruction: globalize.translate("HeaderSelectTranscodingPathHelp")
});
});
});
$(".encodingSettingsForm").off("submit", onSubmit).on("submit", onSubmit);
}).on("pageshow", "#encodingSettingsPage", function () {
loading.show();
libraryMenu.setTabs("playback", 0, getTabs);
var page = this;
ApiClient.getNamedConfiguration("encoding").then(function (config) {
ApiClient.getSystemInfo().then(function (systemInfo) {
loadPage(page, config, systemInfo);
});
});
});
});