import connectionManager from"./../emby-apiclient/connectionmanager.js";import globalize from"./../common/globalize.js";import layoutManager from"./../layoutmanager.js";import dialogHelper from"./../dialoghelper/dialoghelper.js";import"./../emby-elements/emby-scroller/emby-scroller.js";import"./../emby-elements/emby-select/emby-select.js";import"./../emby-elements/emby-input/emby-input.js";import"./../emby-elements/emby-button/paper-icon-button-light.js";import"./../emby-elements/emby-dialogclosebutton/emby-dialogclosebutton.js";import{appHost}from"./../common/servicelocator.js";import focusManager from"./../focusmanager.js";import appSettings from"./../common/appsettings.js";import registrationServices from"./../registrationservices/registrationservices.js";import appRouter from"./../approuter.js";function showDialog(options){return Emby.importModule("./modules/dialog/dialog.js").then(function(dialog){return dialog(options)})}require(["formDialogStyle"]);let currentDialogOptions;function showToast(options){return Emby.importModule("./modules/toast/toast.js").then(function(toast){return toast(options)})}function showAlert(options){return Emby.importModule("./modules/common/dialogs/alert.js").then(function(alert){return alert(options)})}function submitJob(dlg,apiClient,userId,syncOptions,form){if(!userId)throw new Error("userId cannot be null");if(!syncOptions)throw new Error("syncOptions cannot be null");if(!form)throw new Error("form cannot be null");var selectSyncTarget=form.querySelector(".selectSyncTarget");let target=selectSyncTarget?.value;if(!target)return showAlert(globalize.translate("PleaseSelectDeviceToSyncTo")),!1;var selectedIndex=selectSyncTarget.selectedIndex;if(-1!==selectedIndex&&((selectSyncTarget.options[selectedIndex]?.innerHTML)?.toLowerCase().includes("windows")&&!apiClient.isMinServerVersion("4.8.4")))return showAlert("To use the download feature, please update Emby Server to at least 4.8.4 or greater."),!0;selectSyncTarget={userId:userId,TargetId:target,ParentId:syncOptions.ParentId,Category:syncOptions.Category};return setJobValues(selectSyncTarget,form),syncOptions.items&&syncOptions.items.length&&(selectSyncTarget.ItemIds=(syncOptions.items||[]).map(function(i){return i.Id||i}).join(",")),apiClient.createSyncJob(selectSyncTarget).then(function(){dialogHelper.close(dlg),showSubmissionToast(syncOptions.mode,target,apiClient),"download"===syncOptions.mode&&syncNow()}),!0}function showSubmissionToast(mode,targetId,apiClient){showToast("convert"===mode?globalize.translate("ConvertingDots"):globalize.translate("DownloadingDots"))}function syncNow(){require(["localsync"],function(localSync){localSync.sync()})}function submitQuickSyncJob(apiClient,userId,targetId,syncOptions){if(!userId)throw new Error("userId cannot be null");if(!syncOptions)throw new Error("syncOptions cannot be null");if(targetId)return userId={userId:userId,TargetId:targetId,ParentId:syncOptions.ParentId,Category:syncOptions.Category,Quality:syncOptions.Quality,Bitrate:syncOptions.Bitrate},syncOptions.items&&syncOptions.items.length&&(userId.ItemIds=(syncOptions.items||[]).map(function(i){return i.Id||i}).join(",")),apiClient.createSyncJob(userId).then(function(){showSubmissionToast(syncOptions.mode,targetId,apiClient),"download"===syncOptions.mode&&syncNow()});throw new Error("targetId cannot be null")}function setJobValues(job,form){var txtBitrate=form.querySelector(".txtBitrate");let bitrate=txtBitrate?txtBitrate.value:null;bitrate=bitrate&&1e6*parseFloat(bitrate),job.Bitrate=bitrate;txtBitrate=form.querySelector(".selectQuality"),txtBitrate&&(job.Quality=txtBitrate.value,appSettings.set("sync-lastquality",job.Quality||"")),txtBitrate=form.querySelector(".selectProfile"),txtBitrate&&(job.Profile=txtBitrate.value),txtBitrate=form.querySelector(".selectJobContainer"),txtBitrate&&(job.Container=txtBitrate.value),txtBitrate=form.querySelector(".selectVideoCodec"),txtBitrate&&(job.VideoCodec=txtBitrate.value),txtBitrate=form.querySelector(".selectAudioCodec"),txtBitrate&&(job.AudioCodec=txtBitrate.value),txtBitrate=form.querySelector(".txtItemLimit"),txtBitrate&&(job.ItemLimit=txtBitrate.value||null),txtBitrate=form.querySelector(".chkSyncNewContent"),txtBitrate&&(job.SyncNewContent=txtBitrate.checked),txtBitrate=form.querySelector(".chkUnwatchedOnly");txtBitrate&&(job.UnwatchedOnly=txtBitrate.checked)}function renderForm(options){return new Promise(function(resolve,reject){require(["emby-checkbox","emby-input","emby-select"],function(){renderFormInternal(options,connectionManager.deviceId(),resolve)})})}function renderFormInternal(options,defaultTargetId,resolve){let elem=options.elem;var dialogOptions=options.dialogOptions;let targets=dialogOptions.Targets,html="";var mode=options.mode,targetContainerClass="download"===mode?" hide":"",syncTargetLabel="convert"===mode?globalize.translate("LabelConvertTo"):globalize.translate("LabelDownloadTo");"download"===mode&&(targets=targets.filter(function(t){return defaultTargetId===t.Id})),options.readOnlySyncTarget?html=(html+='
')+'
':(html+='
',targetContainerClass=targets.length?"":" required",html=(html+='",targets.length||(html+='
'+globalize.translate("LabelSyncNoTargetsHelp")+"
"),appHost.supports("externallinks")&&(html+='
'+globalize.translate("LearnMore")+"
"),html+="
");let settingsDisabled=!1;options.readOnlySyncTarget&&-1===dialogOptions.Options.indexOf("UnwatchedOnly")&&-1===dialogOptions.Options.indexOf("SyncNewContent")&&-1===dialogOptions.Options.indexOf("ItemLimit")&&(settingsDisabled=!0);html=(html=(html=(html=(html=(html=(html=(html=(html=(html=(html=(html=(html=(html=(html=(html=(html=(html=(html=(html=(html+='
')+'')+'
')+'
')+'
')+'
')+'
')+'
')+'')+'
')+'
')+'
')+'
')+'
',-1!==dialogOptions.Options.indexOf("UnwatchedOnly")&&(html=(html=(html=(html+='
')+'")+("convert"===mode?'
'+globalize.translate("ConvertUnwatchedVideosOnlyHelp")+"
":'
'+globalize.translate("SyncUnwatchedVideosOnlyHelp")+"
")+"
"),-1!==dialogOptions.Options.indexOf("SyncNewContent")&&(html=(html=(html=(html+='
')+'")+("convert"===mode?'
'+globalize.translate("AutomaticallyConvertNewContentHelp")+"
":'
'+globalize.translate("AutomaticallySyncNewContentHelp")+"
")+"
"),-1!==dialogOptions.Options.indexOf("ItemLimit")&&(html=(html=(html+='
')+'')+("convert"===mode?'
'+globalize.translate("ConvertItemLimitHelp")+"
":'
'+globalize.translate("DownloadItemLimitHelp")+"
")+"
"),elem.innerHTML=html;targetContainerClass=elem.querySelector(".selectSyncTarget"),targetContainerClass&&(targetContainerClass.addEventListener("change",function(){loadQualityOptions(elem,this.value,options.dialogOptionsFn).then(resolve)}),targetContainerClass.dispatchEvent(new CustomEvent("change",{bubbles:!0}))),syncTargetLabel=elem.querySelector(".selectProfile"),syncTargetLabel&&(syncTargetLabel.addEventListener("change",function(){onProfileChange(elem,this.value)}),dialogOptions.ProfileOptions.length)&&syncTargetLabel.dispatchEvent(new CustomEvent("change",{bubbles:!0})),mode=elem.querySelector(".selectQuality"),mode&&(mode.addEventListener("change",function(){onQualityChange(elem,this.value)}),mode.dispatchEvent(new CustomEvent("change",{bubbles:!0}))),targetContainerClass=elem.querySelector(".selectJobContainer"),targetContainerClass&&(targetContainerClass.addEventListener("change",onContainerChange),targetContainerClass.dispatchEvent(new CustomEvent("change",{bubbles:!0}))),dialogOptions=elem.querySelector(".selectVideoCodec"),dialogOptions&&(dialogOptions.addEventListener("change",onVideoCodecChange),dialogOptions.dispatchEvent(new CustomEvent("change",{bubbles:!0}))),syncTargetLabel=elem.querySelector(".selectAudioCodec");syncTargetLabel&&(syncTargetLabel.addEventListener("change",onAudioCodecChange),syncTargetLabel.dispatchEvent(new CustomEvent("change",{bubbles:!0}))),setTimeout(function(){focusManager.autoFocus(elem)},100)}function showWifiMessage(){var options={title:globalize.translate("HeaderWaitingForWifi"),text:globalize.translate("WifiRequiredToDownload")},items=[];items.push({name:options.confirmText||globalize.translate("ButtonOk"),id:"ok",type:"submit"}),items.push({name:options.cancelText||globalize.translate("HeaderDownloadSettings"),id:"downloadsettings",type:"cancel"}),options.buttons=items,showDialog(options).then(function(result){return"ok"===result?Promise.resolve():"downloadsettings"===result?(appRouter.show(appRouter.getRouteUrl("downloadsettings")),Promise.resolve()):Promise.reject()})}function validateNetwork(){switch(navigator.connection?navigator.connection.type:null){case"cellular":case"bluetooth":return showWifiMessage(),!1;default:return!0}}function showSyncMenu(options){return"download"===options.mode&&appSettings.syncOnlyOnWifi()&&!validateNetwork()?Promise.reject():registrationServices.validateFeature("sync").then(function(){return showSyncMenuInternal(options)})}function enableAutoSync(options){return"download"===options.mode&&("Audio"===(options=(options.items||[])[0]||{}).Type||"Photo"===options.Type||"MusicAlbum"===options.Type||"MusicArtist"===options.Type||"MusicGenre"===options.Type||"Playlist"===options.Type&&"Audio"===options.MediaType)}function showSyncMenuInternal(options){let apiClient=connectionManager.getApiClient(options.items[0]),userId=apiClient.getCurrentUserId();if(enableAutoSync(options))return submitQuickSyncJob(apiClient,userId,apiClient.deviceId(),{items:options.items,Quality:"custom",Bitrate:appSettings.maxStaticMusicBitrate()});let dialogOptionsFn=getTargetDialogOptionsFn(apiClient,{UserId:userId,ItemIds:(options.items||[]).map(function(i){return i.Id||i}).join(","),ParentId:options.ParentId,Category:options.Category,IncludeProviders:"convert"===options.mode?"ConvertSyncProvider":null,ExcludeProviders:"convert"===options.mode?null:"ConvertSyncProvider"});return dialogOptionsFn().then(function(dialogOptions){currentDialogOptions=dialogOptions;var dlgElementOptions={removeOnClose:!0,scrollY:!1,autoFocus:!1};layoutManager.tv?dlgElementOptions.size="fullscreen":dlgElementOptions.size="small";let dlg=dialogHelper.createDialog(dlgElementOptions),html=(dlg.classList.add("formDialog"),"");html=(html+='
')+'

';dlgElementOptions="convert"===options.mode?globalize.translate("Convert"):globalize.translate("Download");html=html+dlgElementOptions+"

",appHost.supports("externallinks")&&(helpUrl="convert"===options.mode?"https://support.emby.media/support/solutions/articles/44001849018-convert-media":"https://support.emby.media/support/solutions/articles/44001162174-sync",html+=''),html=(html=(html=(html=(html=(html+="
")+'
')+'
')+'
")+"
")+"
",dlg.innerHTML=html;let submitted=!1;dlg.querySelector("form").addEventListener("submit",function(e){return submitted=submitJob(dlg,apiClient,userId,options,this),e.preventDefault(),!1});var helpUrl=dialogHelper.open(dlg);return renderForm({elem:dlg.querySelector(".formFields"),dialogOptions:dialogOptions,dialogOptionsFn:dialogOptionsFn,mode:options.mode}),helpUrl.then(function(){return submitted?Promise.resolve():Promise.reject()})})}function getTargetDialogOptionsFn(apiClient,query){return function(targetId){return query.TargetId=targetId,apiClient.getJSON(apiClient.getUrl("Sync/Options",query))}}function setQualityFieldVisible(form,visible){var fldQuality=form.querySelector(".fldQuality"),selectQuality=form.querySelector(".selectQuality");visible?(fldQuality&&fldQuality.classList.remove("hide"),selectQuality&&(selectQuality.removeAttribute("required"),onQualityChange(form,selectQuality.value))):(fldQuality&&fldQuality.classList.add("hide"),selectQuality&&selectQuality.removeAttribute("required"),onQualityChange(form,""))}function onContainerChange(){this.closest(".selectContainer").querySelector(".fieldDescription").innerHTML=globalize.translate("VideoFilesWillBeConvertedTo",this.value)}function onVideoCodecChange(){var description=this.closest(".selectContainer").querySelector(".fieldDescription"),value=this.value,values=value.split(",");1"+o.Name+""}).join(""),selectProfile.dispatchEvent(new CustomEvent("change",{bubbles:!0}))),form.querySelector(".selectQuality"));if(fldProfile){fldProfile.innerHTML=options.QualityOptions.map(function(o){var selectedAttribute=o.IsDefault?" selected":"";return'"}).join("");let lastQuality=appSettings.get("sync-lastquality");lastQuality&&options.QualityOptions.filter(function(i){return i.Id===lastQuality}).length&&(fldProfile.value=lastQuality),fldProfile.dispatchEvent(new CustomEvent("change",{bubbles:!0}))}}function loadQualityOptions(form,targetId,dialogOptionsFn){return dialogOptionsFn(targetId).then(function(options){return renderTargetDialogOptions(form,options)})}export default{showMenu:showSyncMenu,renderForm:renderForm,setJobValues:setJobValues};