1 line
No EOL
12 KiB
JavaScript
1 line
No EOL
12 KiB
JavaScript
import BaseTab from"./../modules/tabbedview/basetab.js";import loading from"./../modules/loading/loading.js";import globalize from"./../modules/common/globalize.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-premierecontainer/emby-premierecontainer.js";import listView from"./../modules/listview/listview.js";import layoutManager from"./../modules/layoutmanager.js";import"./codeccontroller.js";function loadPage(instance,config,codecs,defaultCodecConfigurations){var view=instance.view,selectHwa=view.querySelector(".selectHwa"),defaultCodecConfigurations=(selectHwa.value=config.HardwareAccelerationMode||0,1===config.HardwareAccelerationMode?defaultCodecConfigurations:config.CodecConfigurations||[]);instance.codecList||(instance.codecList=codecs,renderCodecs(instance,view,codecs,defaultCodecConfigurations)),view.querySelector(".chkEnableThrottle").checked=config.EnableThrottling,view.querySelector(".txtDownMixAudioBoost").value=config.DownMixAudioBoost,view.querySelector(".txtTranscodingTempPath").value=config.TranscodingTempPath||"",view.querySelector(".chkEnableSubtitleExtraction").checked=config.EnableSubtitleExtraction||!1,onHwaModeChange.call(instance,{target:selectHwa,currentTarget:selectHwa}),loading.hide()}function getCodecItems(instance,filterFn,query){let items=instance.codecList.filter(filterFn);items.sort(function(c1,c2){return c2.Priority-c1.Priority});let serverId=instance.getApiClient().serverId();filterFn=(items=items.map(function(i){let name=i.Name;return i.IsHardwareCodec||(name=i.MediaTypeName),{OriginalItem:i,Type:"Codec",Id:i.Id,IsFolder:!1,ServerId:serverId,Name:name,CanReorder:i.IsHardwareCodec}})).length;for(let i=0,length=items.length;i<length;i++){var item=items[i];item.CanMoveUp=0<i,item.CanMoveDown=i<items.length-1}return Promise.resolve({Items:items,TotalRecordCount:filterFn})}function getSoftwareEncoderItems(query){return getCodecItems(this,function(codec){return"Encoder"===codec.Direction&&!codec.IsHardwareCodec&&codec.SupportsParameters},query)}function getCodecGroupItems(query){let options=this;return getCodecItems(options.instance,function(codec){return codec.MediaTypeName===options.Group&&codec.Direction===options.Direction&&codec.IsHardwareCodec===options.IsHardwareCodec},query)}function getSoftwareEncoderListOptions(items){return{renderer:listView,options:{defaultBackground:!1,moreButton:!1,action:layoutManager.tv?"edit":"none",multiSelect:!1,image:!1,draggable:!1,draggableXActions:!1,buttonCommands:["edit"],fields:["Name"]}}}function getCodecGroupListOptions(items){items=1<items.length;return{renderer:listView,options:{defaultBackground:!1,moreButton:!1,action:layoutManager.tv?"menu":"none",multiSelect:!1,image:!1,buttonCommands:["codecinfo","edit"],dragReorder:items,draggable:items,draggableXActions:!1,fields:["ItemCheckbox","Name"],checkboxAction:onItemsChecked,getIsItemChecked:getIsItemChecked,commandActions:{moveInOrder:onItemsMoved.bind(this)}}}}function getIsItemChecked(item){return item.OriginalItem.IsEnabled}function onItemsChecked(options){var items=options.items,checked=options.checked;for(let i=0,length=items.length;i<length;i++)items[i].OriginalItem.IsEnabled=checked;return Promise.resolve()}function arraymove(arr,fromIndex,toIndex){var element=arr[fromIndex];arr.splice(fromIndex,1),arr.splice(toIndex,0,element)}function onItemsMovedToNewIndex(movedItems,allItems,options){console.log("onItemsMovedToNewIndex");movedItems=allItems.indexOf(movedItems[0].OriginalItem),options=options.newIndex;if(console.log("onItemsMovedToNewIndex, fromIndex: "+movedItems+", newIndex: "+options),movedItems!==options){arraymove(allItems,movedItems,options);for(let i=0,length=allItems.length;i<length;i++)allItems[i].Priority=100-i}return Promise.resolve()}function onItemsMoved(items,options){let firstCodec=items[0].OriginalItem;var allItems=this.codecList.filter(function(c){return c.IsHardwareCodec===firstCodec.IsHardwareCodec&&c.MediaTypeName===firstCodec.MediaTypeName&&c.Direction===firstCodec.Direction});return allItems.sort(function(c1,c2){return c2.Priority-c1.Priority}),onItemsMovedToNewIndex(items,allItems,options)}function renderCodecs(instance,context,codecs,codecConfigs){if(null==codecs||0===codecs.length)return!1;applyPriorities(codecs,codecConfigs),context.querySelector(".hardwareDecoders").innerHTML=renderCodecsGrouped(context,codecConfigs,codecs.filter(function(codec){return"Decoder"===codec.Direction&&codec.IsHardwareCodec})),context.querySelector(".hardwareEncoders").innerHTML=renderCodecsGrouped(context,codecConfigs,codecs.filter(function(codec){return"Encoder"===codec.Direction&&codec.IsHardwareCodec}));var itemContainers=context.querySelectorAll(".itemsContainerCodecGroup");for(let i=0,length=itemContainers.length;i<length;i++){var itemContainer=itemContainers[i];itemContainer.fetchData=getCodecGroupItems.bind({instance:instance,Direction:itemContainer.getAttribute("data-direction"),Group:itemContainer.getAttribute("data-group"),IsHardwareCodec:"true"===itemContainer.getAttribute("data-ishardwarecodec")}),itemContainer.getListOptions=getCodecGroupListOptions.bind(instance)}return!0}function renderCodecsGrouped(context,codecConfigs,codecs){return codecs.map(function(item){return item.MediaTypeName}).filter(distinct).map(function(group){var groupCodecs=codecs.filter(function(codec){return codec.MediaTypeName===group});return renderCodecGroup(context,group,groupCodecs)}).join("")}function renderCodecGroup(context,group,codecs){var html="",direction=codecs[0].Direction;return html+'<div style="margin-bottom:1.8em;">'+('<h3 style="margin:0;" class="secondaryText">'+group+"</h3>")+('<div is="emby-itemscontainer" data-ishardwarecodec="'+codecs[0].IsHardwareCodec+'" data-direction="'+direction+'" data-group="'+group+'" class="codecList itemsContainer itemsContainerCodecGroup vertical-list">')+"</div></div>"}function onSubmit(e){let instance=this,form=e.target,apiClient=(loading.show(),instance.getApiClient());return apiClient.getNamedConfiguration("encoding").then(function(config){config.DownMixAudioBoost=form.querySelector(".txtDownMixAudioBoost").value,config.TranscodingTempPath=form.querySelector(".txtTranscodingTempPath").value,config.EnableSubtitleExtraction=form.querySelector(".chkEnableSubtitleExtraction").checked,config.EnableThrottling=form.querySelector(".chkEnableThrottle").checked;var selectHwa=form.querySelector(".selectHwa"),codecConfigs=(config.HardwareAccelerationMode=parseInt(selectHwa.value),[]);if(2===config.HardwareAccelerationMode){var codecList=instance.codecList;for(let i=0,length=codecList.length;i<length;i++){var codec=codecList[i];codec.IsHardwareCodec&&codecConfigs.push({CodecId:codec.Id,Priority:codec.Priority,IsEnabled:codec.IsEnabled})}}config.HardwareAccelerationType=null,config.CodecConfigurations=codecConfigs,apiClient.updateNamedConfiguration("encoding",config).then(function(response){loading.hide(),formHelper.handleConfigurationSavedResponse(response)})}),e.preventDefault(),e.stopPropagation(),!1}function getConfigurationByCodecId(codecConfigs,codecId){if(codecId&&null!=codecConfigs&&0!==codecConfigs.length)for(let i=0;i<codecConfigs.length;i++)if(codecConfigs[i]&&codecConfigs[i].CodecId&&codecConfigs[i].CodecId===codecId)return codecConfigs[i];return null}function applyPriorities(codecs,codecConfigs){for(let i=0,length=codecs.length;i<length;i++){var codec=codecs[i],config=getConfigurationByCodecId(codecConfigs,codec.Id);codec.Priority=config?.Priority||0,codec.IsEnabled=config?.IsEnabled||!1}}function distinct(value,index,self){return self.indexOf(value)===index}function onHwaModeChange(e){var e=e.currentTarget,advancedSections=this.view.querySelectorAll(".hwaAdvanced"),mode=e.value;for(let i=0,length=advancedSections.length;i<length;i++)"2"===mode?advancedSections[i].classList.remove("hide"):advancedSections[i].classList.add("hide")}function onMediaEncodingInitializaed(instance,apiClient){loading.show();var configPromise=apiClient.getNamedConfiguration("encoding"),codecInfoPromise=apiClient.getVideoCodecInformation().catch(function(){return[]}),apiClient=apiClient.getJSON(apiClient.getUrl("Encoding/CodecConfiguration/Defaults")).catch(function(){return[]});return Promise.all([configPromise,codecInfoPromise,apiClient]).then(function(responses){loadPage(instance,responses[0],responses[1],responses[2])})}function retryCheckMediaEncodingInitialization(instance,apiClient){return new Promise(function(resolve,reject){setTimeout(function(){checkMediaEncodingInitialization(instance,apiClient).then(resolve,reject)},1e3)})}function checkMediaEncodingInitialization(instance,apiClient){return loading.show(),apiClient.getToneMapOptions().then(function(toneMapOptions){var view=instance.view;return view.querySelector(".encodingSettingsForm").classList.remove("hide"),view.querySelector(".encodingNotInitializedMessage").classList.add("hide"),onMediaEncodingInitializaed(instance,apiClient,toneMapOptions)},function(errorResponse){var view=instance.view;if(view.querySelector(".encodingSettingsForm").classList.add("hide"),view.querySelector(".encodingNotInitializedMessage").classList.remove("hide"),503===errorResponse.status)return retryCheckMediaEncodingInitialization(instance,apiClient);loading.hide()})}function TranscodingTab(view,params){BaseTab.apply(this,arguments)}Object.assign(TranscodingTab.prototype,BaseTab.prototype),TranscodingTab.prototype.loadTemplate=function(){return require(["text!transcoding/transcodingtab.html"])},TranscodingTab.prototype.onTemplateLoaded=function(){BaseTab.prototype.onTemplateLoaded.apply(this,arguments);var apiClient=connectionManager.currentApiClient();let view=this.view;view.querySelector(".selectHwa").addEventListener("change",onHwaModeChange.bind(this)),view.querySelector(".hwaGuideLink").innerHTML=globalize.translate("SeeOurHwaGuide",'<a is="emby-linkbutton" href="https://support.emby.media/support/solutions/articles/44001160148-hardware-acceleration-overview" class="button-link" target="_blank">',"</a>"),view.querySelector(".btnSelectTranscodingTempPath").addEventListener("click",function(){Emby.importModule("./modules/directorybrowser/directorybrowser.js").then(function(directoryBrowser){let picker=new directoryBrowser;picker.show({callback:function(path){path&&(view.querySelector(".txtTranscodingTempPath").value=path),picker.close()},validateWriteable:!0,header:globalize.translate("HeaderSelectTranscodingPath"),instruction:globalize.translate("HeaderSelectTranscodingPathHelp")})})}),view.querySelector(".encodingSettingsForm").addEventListener("submit",onSubmit.bind(this)),apiClient.getSystemInfo().then(function(systemInfo){var hwaPremiereInfo=view.querySelectorAll(".hwaPremiereInfo");for(let i=0,length=hwaPremiereInfo.length;i<length;i++)systemInfo.HardwareAccelerationRequiresPremiere?hwaPremiereInfo[i].classList.remove("hide"):hwaPremiereInfo[i].classList.add("hide"),hwaPremiereInfo[i].innerHTML=globalize.translate("FeatureRequiresEmbyPremiere",'<a href="https://emby.media/premiere" data-preset="premiereinfo" is="emby-linkbutton" type="button" class="button-link btnHwaPremiere">',"</a>")});apiClient=view.querySelector(".softwareEncoders");apiClient.fetchData=getSoftwareEncoderItems.bind(this),apiClient.getListOptions=getSoftwareEncoderListOptions.bind(this)},TranscodingTab.prototype.onResume=function(options){BaseTab.prototype.onResume.apply(this,arguments);let instance=this;return checkMediaEncodingInitialization(this,this.getApiClient()).then(function(){let itemContainers=instance.view.querySelectorAll(".itemsContainer");var promises=[];for(let i=0,length=itemContainers.length;i<length;i++)promises.push(itemContainers[i].waitForCustomElementUpgrade());return Promise.all(promises).then(function(){for(let i=0,length=itemContainers.length;i<length;i++)itemContainers[i].resume(options)})})},TranscodingTab.prototype.onPause=function(){BaseTab.prototype.onPause.apply(this,arguments);var itemContainers=this.view.querySelectorAll(".itemsContainer");for(let i=0,length=itemContainers.length;i<length;i++)itemContainers[i].pause()},TranscodingTab.prototype.destroy=function(){BaseTab.prototype.destroy.apply(this,arguments),this.codecList=null};export default TranscodingTab; |