1 line
No EOL
7.3 KiB
JavaScript
1 line
No EOL
7.3 KiB
JavaScript
import connectionManager from"./../emby-apiclient/connectionmanager.js";import globalize from"./../common/globalize.js";import layoutManager from"./../layoutmanager.js";import loading from"./../loading/loading.js";import dialogHelper from"./../dialoghelper/dialoghelper.js";import"./../emby-elements/emby-button/paper-icon-button-light.js";import"./../emby-elements/emby-button/emby-button.js";import"./../emby-elements/emby-scroller/emby-scroller.js";import"./../emby-elements/emby-itemscontainer/emby-itemscontainer.js";import"./../emby-elements/emby-dialogclosebutton/emby-dialogclosebutton.js";import serverNotifications from"./../common/input/api.js";import events from"./../emby-apiclient/events.js";import{appHost}from"./../common/servicelocator.js";import listView from"./../listview/listview.js";import dom from"./../dom.js";function syncNow(){require(["localsync"],function(localSync){localSync.sync()})}function renderJob(context,job,dialogOptions,originalOptions){Emby.importModule("./modules/sync/sync.js").then(function(syncDialog){syncDialog.renderForm({elem:context.querySelector(".syncJobFormContent"),dialogOptions:dialogOptions,dialogOptionsFn:getTargetDialogOptionsFn(dialogOptions),readOnlySyncTarget:!0,mode:originalOptions.mode}).then(function(){fillJobValues(context,job,dialogOptions)})})}function getTargetDialogOptionsFn(dialogOptions){return function(targetId){return Promise.resolve(dialogOptions)}}function triggerChange(select){select.dispatchEvent(new CustomEvent("change",{bubbles:!0}))}function fillJobValues(context,job,editOptions){var selectProfile=context.querySelector(".selectProfile"),selectProfile=(selectProfile&&(selectProfile.value=job.Profile||"",triggerChange(selectProfile)),context.querySelector(".selectQuality")),selectProfile=(selectProfile&&(selectProfile.value=job.Quality||"",triggerChange(selectProfile)),context.querySelector(".selectJobContainer")),selectProfile=(selectProfile&&(selectProfile.value=job.Container||"",triggerChange(selectProfile)),context.querySelector(".selectVideoCodec")),selectProfile=(selectProfile&&(selectProfile.value=job.VideoCodec||"",triggerChange(selectProfile)),context.querySelector(".selectAudioCodec")),selectProfile=(selectProfile&&(selectProfile.value=job.AudioCodec||"",triggerChange(selectProfile)),context.querySelector(".chkUnwatchedOnly")),selectProfile=(selectProfile&&(selectProfile.checked=job.UnwatchedOnly),context.querySelector(".chkSyncNewContent")),selectProfile=(selectProfile&&(selectProfile.checked=job.SyncNewContent),context.querySelector(".txtItemLimit")),selectProfile=(selectProfile&&(selectProfile.value=job.ItemLimit),context.querySelector(".txtBitrate")),selectProfile=(job.Bitrate?selectProfile.value=job.Bitrate/1e6:selectProfile.value="",editOptions.Targets.filter(function(t){return t.Id===job.TargetId})[0]),editOptions=selectProfile?selectProfile.Name:"",selectProfile=context.querySelector(".selectSyncTarget");selectProfile&&(selectProfile.value=editOptions)}function loadJob(context,id,apiClient,originalOptions){loading.show(),apiClient.getJSON(apiClient.getUrl("Sync/Jobs/"+id)).then(function(job){return apiClient.getJSON(apiClient.getUrl("Sync/Options",{UserId:job.UserId,ItemIds:job.RequestedItemIds&&job.RequestedItemIds.length?job.RequestedItemIds.join(""):null,ParentId:job.ParentId,Category:job.Category,TargetId:job.TargetId})).then(function(options){renderJob(context,job,options,originalOptions),loading.hide()})},function(error){loading.hide(),dialogHelper.close(context)})}function saveJob(context,id,apiClient){loading.show(),apiClient.getJSON(apiClient.getUrl("Sync/Jobs/"+id)).then(function(job){Emby.importModule("./modules/sync/sync.js").then(function(syncDialog){syncDialog.setJobValues(job,context),apiClient.ajax({url:apiClient.getUrl("Sync/Jobs/"+id),type:"POST",data:JSON.stringify(job),contentType:"application/json"}).then(function(){appHost.supports("sync")&&syncNow(),loading.hide(),dialogHelper.close(context)})})},function(error){loading.hide(),dialogHelper.close(context)})}function onItemsContainerUpgraded(){this.resume({refresh:!0})}function onOpened(){var itemsContainer=this.querySelector(".jobItems");itemsContainer.resume?onItemsContainerUpgraded.call(itemsContainer):dom.addEventListener(itemsContainer,"upgraded",onItemsContainerUpgraded.bind(this),{once:!0})}function getListViewOptions(items){return{enableDefaultIcon:!0,action:"none",fields:["Name","SyncJobItemStatus"],draggable:!1,multiSelect:!1,contextMenu:!0,hoverPlayButton:!1,draggableXActions:!1,imageSize:"small",enableUserDataButtons:!1,mediaInfo:!1}}function getListOptions(items){return{renderer:listView,options:getListViewOptions(items),virtualScrollLayout:"vertical-list"}}function getItems(query){var id=this.id,apiClient=this.apiClient;let serverId=apiClient.serverId(),mode=this.mode;return apiClient.getJSON(apiClient.getUrl("Sync/JobItems",Object.assign(query,{JobId:id,AddMetadata:!0}))).then(function(result){var items=result.Items;for(let i=0,length=items.length;i<length;i++){var item=items[i];item.Type="SyncJobItem",item.ServerId=serverId,"convert"===mode&&(item.SyncJobType="Convert")}return result})}function showEditor(options){let apiClient=connectionManager.getApiClient(options.serverId),id=options.jobId;var dlgElementOptions={removeOnClose:!0,scrollY:!1,autoFocus:!1};layoutManager.tv?dlgElementOptions.size="fullscreen":dlgElementOptions.size="medium";let dlg=dialogHelper.createDialog(dlgElementOptions),html=(dlg.classList.add("formDialog"),""),itemsContainer=(html=(html=(html+='<div class="formDialogHeader">')+'<button type="button" is="emby-dialogclosebutton"></button>'+'<h3 class="formDialogHeaderTitle">')+("convert"===options.mode?globalize.translate("Convert"):globalize.translate("Download"))+"</h3>",appHost.supports("externallinks")&&(html+='<a href="https://support.emby.media/support/solutions/articles/44001162174-sync" target="_blank" is="emby-linkbutton" class="paper-icon-button-light noautofocus btnHelp flex align-items-center dialogHeaderButton button-help"><i class="md-icon"></i></a>'),html=(html=(html=(html=(html=(html=(html+="</div>")+'<div is="emby-scroller" data-horizontal="false" data-forcescrollbar="true" data-focusscroll="true" class="formDialogContent">'+'<div class="scrollSlider">')+'<form class="dialogContentInner dialog-content-centered syncJobForm padded-left padded-right">'+'<div class="syncJobFormContent"></div>')+'<div class="jobItems" is="emby-itemscontainer" data-monitor="SyncJobItems" data-virtualscrolllayout="vertical-grid"></div>'+'<div class="formDialogFooter">')+('<button is="emby-button" type="submit" class="raised button-submit block formDialogFooterItem"><span>'+globalize.translate("Save")+"</span></button>"))+"</div>"+"</form>")+"</div>"+"</div>",dlg.innerHTML=html,dlg.querySelector("form").addEventListener("submit",function(e){return saveJob(dlg,id,apiClient),e.preventDefault(),!1}),dlg.querySelector(".jobItems"));function onSyncJobMessage(e,apiClient,job){String(job.Id)===id&&itemsContainer.refreshItems()}itemsContainer.fetchData=getItems.bind({apiClient:apiClient,id:id,mode:options.mode}),itemsContainer.getListOptions=getListOptions.bind(this),loadJob(dlg,id,apiClient,options),dlg.addEventListener("opened",onOpened);dlgElementOptions=dialogHelper.open(dlg);return events.on(serverNotifications,"SyncJobUpdated",onSyncJobMessage),dlgElementOptions.then(function(){return events.off(serverNotifications,"SyncJobUpdated",onSyncJobMessage),Promise.reject()})}export default{show:showEditor}; |