1 line
No EOL
7 KiB
JavaScript
1 line
No EOL
7 KiB
JavaScript
import dialogHelper from"./../modules/dialoghelper/dialoghelper.js";import layoutManager from"./../modules/layoutmanager.js";import globalize from"./../modules/common/globalize.js";import loading from"./../modules/loading/loading.js";import genericedit from"./../modules/genericedit/genericedit.js";import formHelper from"./../modules/common/responsehelper.js";import connectionManager from"./../modules/emby-apiclient/connectionmanager.js";import"./../modules/emby-elements/emby-input/emby-input.js";import"./../modules/emby-elements/emby-button/emby-button.js";import"./../modules/emby-elements/emby-checkbox/emby-checkbox.js";import"./../modules/emby-elements/emby-select/emby-select.js";import"./../modules/emby-elements/emby-scroller/emby-scroller.js";import"./../modules/emby-elements/emby-dialogclosebutton/emby-dialogclosebutton.js";let hasChanges;function getValue(sourceObject,propertyPath){let subObject=sourceObject;var pathElements=propertyPath.split(".");for(let i=0;i<pathElements.length;i++){var pathElement=pathElements[i].replace("colitem","");if(!Object.hasOwn(subObject,pathElement))return null;subObject=subObject[pathElement]}return subObject}function setValue(sourceObject,propertyPath,value){let subObject=sourceObject;var pathElements=propertyPath.split(".");for(let i=0;i<pathElements.length-1;i++){var pathElement=pathElements[i].replace("colitem","");if(!Object.hasOwn(subObject,pathElement))return;subObject=subObject[pathElement]}sourceObject=pathElements[pathElements.length-1];subObject[sourceObject]=value}function showEditorInternal(apiClient,codec,editObjectContainer,template){var dialogOptions={removeOnClose:!(hasChanges=!1),scrollY:!0};editObjectContainer&&(layoutManager.tv?dialogOptions.size="fullscreen":dialogOptions.size="small");let dlg=dialogHelper.createDialog(dialogOptions);dlg.classList.add("formDialog"),dlg.classList.add("codecEditorDialog"),dlg.innerHTML=globalize.translateDocument(template,"sharedcomponents");var dialogOptions=dlg.querySelector(".btnSave"),template=dlg.querySelector(".btnReset");let editContainer=dlg.querySelector(".codecConfig");return dlg.querySelector(".formDialogHeaderTitle").innerHTML=codec.IsHardwareCodec?codec.Name:codec.MediaTypeName,editObjectContainer?(dlg.querySelector(".formDialogFooter").classList.remove("hide"),dlg.querySelector(".warningBanner").classList.remove("hide"),editObjectContainer.EditorRoot.DisplayName=null,dialogOptions.classList.remove("hide"),template.classList.remove("hide"),genericedit.renderForm(editObjectContainer,editContainer).then(function(){genericedit.setFormValues(editObjectContainer,editContainer)}),template.addEventListener("click",function(){var editors=editObjectContainer.EditorRoot.EditorItems;for(let n=0;n<editors.length;n++){var editor=editors[n],defval=getValue(editObjectContainer.DefaultObject,editor.Id);setValue(editObjectContainer.Object,editor.Id,defval)}genericedit.setFormValues(editObjectContainer,editContainer)})):(dialogOptions=createCodecInfo(codec),dlg.querySelector(".codecInfo").innerHTML=dialogOptions),loading.hide(),dlg.querySelector("form").addEventListener("submit",function(e){genericedit.getItemValues(editObjectContainer,editContainer);var url=apiClient.getUrl("Encoding/CodecParameters",{CodecId:codec.Id,ParameterContext:"Playback"});return apiClient.ajax({type:"POST",url:url,data:JSON.stringify(editObjectContainer.Object),contentType:"application/json"}).then(function(result){dialogHelper.close(dlg),formHelper.handleConfigurationSavedResponse(result)},formHelper.handleErrorResponse),e.preventDefault(),!1}),new Promise(function(resolve,reject){dlg.addEventListener("close",function(){(hasChanges?resolve:reject)()}),dialogHelper.open(dlg)})}function createCodecInfo(codec){var infoSections=[],codec=(infoSections.push(codec.Description),infoSections.push(createCodecInfo1(codec)),infoSections.push(createProfilesTable(codec)),infoSections.map(wrapInfoSection).join(""));return codec}function createCodecInfo1(codec){var rows=[],frameSize=(codec.MaxBitRate&&rows.push(createRowV(["Max Bitrate: ",codec.MaxBitRate])),[]),frameSize=(codec.MinWidth&&codec.MinHeight&&frameSize.push(codec.MinWidth+"x"+codec.MinHeight),codec.MaxWidth&&codec.MaxHeight&&(0===frameSize.length&&frameSize.push("max "),frameSize.push(codec.MaxWidth+"x"+codec.MaxHeight)),0<frameSize.length&&rows.push(createRowV(["Frame Sizes: ",frameSize.join("...")])),[]);return codec.MinFrameRate&&frameSize.push(codec.MinFrameRate+"fps"),codec.MaxFrameRate&&(0===frameSize.length&&frameSize.push("max "),frameSize.push(codec.MaxFrameRate+"fps")),0<frameSize.length&&rows.push(createRowV(["Frame Rates: ",frameSize.join("...")])),codec.MaxInstanceCount&&rows.push(createRowV(["Max Instances: ",codec.MaxInstanceCount])),codec.SupportedColorFormatStrings&&rows.push(createRowV(["Color Formats: ",codec.SupportedColorFormatStrings.join(", ")])),'<table style="border-spacing:1em .5em;">'+rows.join("\n")+"</table>"}function wrapInfoSection(info){return info&&0<info.length?'<div class="" style="margin-bottom:0.4em;">'+info+"</div>":""}function createProfilesTable(codec){if(!codec.ProfileAndLevelInformation||0===codec.ProfileAndLevelInformation.length)return"";var items=codec.ProfileAndLevelInformation,rows=[],codec=createHeaderRow(["Profile","Max Level","Max Bitrate","Bit Depths","Resolutions"]);rows.push(codec);for(let i=0;i<items.length;i++){var profile=items[i].Profile;let desc=profile.Description||"";desc=desc.replace(" Profile","");var profile=profile.BitDepths||[],level=items[i].Level;let resrates="";level.ResolutionRateStrings&&0<level.ResolutionRateStrings.length&&(resrates=level.ResolutionRateStrings[0],1<level.ResolutionRateStrings.length)&&(resrates+=" - "+level.ResolutionRateStrings[level.ResolutionRateStrings.length-1]);level=createRow([desc,level.Description,level.MaxBitRateDisplay,profile.join(", "),resrates]);rows.push(level)}return'<table style="border-spacing:.5em;">'+rows.join("\n")+"</table>"}function createRowV(cellData){return cellData[0]='<span style="white-space: nowrap; font-weight: bold;">'+cellData[0]+"</span>",createRow(cellData)}function createRow(cellData){return"<tr>"+('<td style="padding: 0; vertical-align: top;">'+cellData.join('</td><td style="padding: 0; vertical-align: top;">')+"</td>")+"</tr>"}function createHeaderRow(cellData){return"<tr>"+('<th class="text-align-start" style="padding: 0; white-space: nowrap;">'+cellData.join('</th><th class="text-align-start" style="padding: 0; white-space: nowrap;">')+"</th>")+"</tr>"}function showEditor(codec,editParams){return loading.show(),new Promise(function(resolve,reject){require(["text!transcoding/codeceditor.html"],function(template){template=globalize.translateHtml(template);let apiClient=connectionManager.currentApiClient();var url;codec.SupportsParameters&&editParams?(url=apiClient.getUrl("Encoding/CodecParameters",{CodecId:codec.Id,ParameterContext:"Playback"}),apiClient.getJSON(url).then(function(editObjectContainer){showEditorInternal(apiClient,codec,editObjectContainer,template).then(resolve,reject)})):showEditorInternal(apiClient,codec,null,template).then(resolve,reject)})})}export default{show:showEditor}; |