dashboard-ui/scheduledtasks/scheduledtasks.js
2023-08-31 15:30:17 +02:00

1 line
8.2 KiB
JavaScript

define(["exports","./../modules/viewmanager/basesettingsview.js","./../modules/common/globalize.js","./../modules/common/textencoding.js","./../modules/loading/loading.js","./../modules/emby-apiclient/events.js","./../modules/common/input/api.js","./../modules/humanedate/humanedate.js","./../modules/emby-elements/emby-button/emby-button.js","./../modules/common/methodtimer.js","./../modules/listview/listview.js"],function(_exports,_basesettingsview,_globalize,_textencoding,_loading,_events,_api,_humanedate,_embyButton,_methodtimer,_listview){function reloadList(page){return _loading.default.show(),ApiClient.getScheduledTasks({isHidden:!1}).then(function(tasks){!function(page,tasks){tasks=tasks.sort(function(a,b){return(a=a.Category+" "+a.Name)===(b=b.Category+" "+b.Name)?0:a<b?-1:1});for(var currentCategory,html="",i=0,length=tasks.length;i<length;i++){var task=tasks[i];task.Category!==currentCategory&&((currentCategory=task.Category)&&(html+="</div></div>"),html=(html=(html=(html+='<div class="verticalSection verticalSection-extrabottompadding" style="margin-bottom:1.8em;">')+'<div class="sectionTitleContainer"><h2 class="sectionTitle secondaryText">')+currentCategory+"</h2>")+"</div><div>"),html=(html=(html=(html=(html=(html=html+('<div class="listItem listItem-border scheduledTaskPaperIconItem" data-status="'+task.State+'">')+'<div class="listItemBody two-line listItemBody-noleftpadding">')+("<a class='clearLink text-align-start' style='margin:0;padding:0;display:block;font-weight:inherit;' is='emby-linkbutton' href='scheduledtask?id="+task.Id+"'>"))+("<div class='listItemBodyText listItemBodyText-lf' style='font-weight:500;'>"+task.Name+"</div>"))+("<div class='listItemBodyText-secondary secondaryText listItemBodyText taskProgress"+task.Id+"'>"+getTaskProgressHtml(task)+"</div>"))+("<div class='listItemBodyText-secondary secondaryText listItemBodyText'>"+_textencoding.default.htmlEncode(task.Description||"")+"</div>"))+"</a>"+"</div>","Idle"===task.State?html+='<button type="button" is="paper-icon-button-light" class="listItemButton btnTask'+task.Id+' btnStartTask" data-taskid="'+task.Id+'" title="'+_globalize.default.translate("Start")+'" aria-label="'+_globalize.default.translate("Start")+'"><i class="md-icon autortl">&#xe038;</i></button>':"Running"===task.State?html+='<button type="button" is="paper-icon-button-light" class="listItemButton btnTask'+task.Id+' btnStopTask" data-taskid="'+task.Id+'" title="'+_globalize.default.translate("Stop")+'" aria-label="'+_globalize.default.translate("Stop")+'"><i class="md-icon">stop</i></button>':html+='<button type="button" is="paper-icon-button-light" class="listItemButton btnTask'+task.Id+' btnStartTask hide" data-taskid="'+task.Id+'" title="'+_globalize.default.translate("Start")+'" aria-label="'+_globalize.default.translate("Start")+'"><i class="md-icon autortl">&#xe038;</i></button>',html+="</div>"}tasks.length&&(html+="</div></div>");page.querySelector(".divScheduledTasks").innerHTML=html}(page,tasks),_loading.default.hide()})}function getTaskProgressHtml(task){var firstDateStr,secondDateStr,numhours,numminutes,elapsedStr,html="";return"Idle"===task.State?task.LastExecutionResult&&(html+=_globalize.default.translate("LabelScheduledTaskLastRan").replace("{0}",(0,_humanedate.default)(task.LastExecutionResult.EndTimeUtc)).replace("{1}",(firstDateStr=task.LastExecutionResult.StartTimeUtc,secondDateStr=task.LastExecutionResult.EndTimeUtc,firstDateStr=new Date(firstDateStr),secondDateStr=(new Date(secondDateStr).getTime()-firstDateStr.getTime())/1e3,firstDateStr=Math.floor(secondDateStr%31536e3/86400),numhours=Math.floor(secondDateStr%31536e3%86400/3600),numminutes=Math.floor(secondDateStr%31536e3%86400%3600/60),secondDateStr=Math.round(secondDateStr%31536e3%86400%3600%60),elapsedStr="",elapsedStr=(elapsedStr=(elapsedStr=(elapsedStr=(elapsedStr=(1===firstDateStr?firstDateStr+" day ":"")+(1<firstDateStr?firstDateStr+" days ":""))+(1===numhours?numhours+" hour ":"")+(1<numhours?numhours+" hours ":""))+(1===numminutes?numminutes+" minute ":"")+(1<numminutes?numminutes+" minutes ":""))+(0<elapsedStr.length?"and ":""))+(1===secondDateStr?secondDateStr+" second":"")+(0===secondDateStr||1<secondDateStr?secondDateStr+" seconds":""))),"Failed"===task.LastExecutionResult.Status?html+=" <span style='color:#FF0000;'>("+_globalize.default.translate("LabelFailed")+")</span>":"Cancelled"===task.LastExecutionResult.Status?html+=" <span style='color:#0026FF;'>("+_globalize.default.translate("LabelCancelled")+")</span>":"Aborted"===task.LastExecutionResult.Status&&(html+=" <span style='color:#FF0000;'>"+_globalize.default.translate("LabelAbortedByServerShutdown")+"</span>")):"Running"===task.State?html=(html=(html+='<div class="flex align-items-center">')+'<div class="itemProgressBar itemProgressBarRound flex-grow" title="'+(firstDateStr=(task.CurrentProgressPercentage||0).toFixed(1))+'%" style="height:.25em;"><div class="itemProgressBarForeground itemProgressBarForegroundRound" style="width:'+firstDateStr+'%;"></div></div>')+"<span style='margin-left:.25em;'>"+firstDateStr+"%</span></div>":html+="<span style='color:#FF0000;'>"+_globalize.default.translate("LabelStopping")+"</span>",html}function updateTaskButton(elem,state){var title="Idle"===state?(elem.classList.add("btnStartTask"),elem.classList.remove("btnStopTask"),elem.classList.remove("hide"),elem.querySelector("i").innerHTML="&#xe038;",_globalize.default.translate("Start")):"Running"===state?(elem.classList.remove("btnStartTask"),elem.classList.add("btnStopTask"),elem.classList.remove("hide"),elem.querySelector("i").innerHTML="stop",_globalize.default.translate("Stop")):(elem.classList.add("btnStartTask"),elem.classList.remove("btnStopTask"),elem.classList.add("hide"),elem.querySelector("i").innerHTML="&#xe038;",_globalize.default.translate("Start"));elem.title=title,elem.setAttribute("aria-label",title),elem.closest(".listItem").setAttribute("data-status",state)}function onScheduledTasksUpdate(e,apiClient,info){if(apiClient.serverId()===this.serverId)for(var view=this.view,tasks=info,i=0,length=tasks.length;i<length;i++){var task=tasks[i],taskElem=view.querySelector(".taskProgress"+task.Id);taskElem&&(taskElem.innerHTML=getTaskProgressHtml(task),updateTaskButton(view.querySelector(".btnTask"+task.Id),task.State))}}function startInterval(instance){ApiClient.startMessageListener("ScheduledTasksInfo","1000,1000"),instance.pollInterval&&(instance.pollInterval.destroy(),instance.pollInterval=null),instance.pollInterval=new _methodtimer.default({onInterval:function(){ApiClient.isMessageChannelOpen()||reloadList(this.view)}.bind(instance),timeoutMs:1e4,type:"interval"})}function View(view,params){_basesettingsview.default.apply(this,arguments),this.serverId=ApiClient.serverId(),view.querySelector(".divScheduledTasks").addEventListener("click",function(e){var id,btnStartTask=e.target.closest(".btnStartTask"),btnStopTask=(btnStartTask&&(id=btnStartTask.getAttribute("data-taskid"),ApiClient.startScheduledTask(id).then(function(){updateTaskButton(btnStartTask,"Running"),reloadList(view)})),e.target.closest(".btnStopTask"));btnStopTask&&(id=btnStopTask.getAttribute("data-taskid"),ApiClient.stopScheduledTask(id).then(function(){updateTaskButton(btnStopTask,""),reloadList(view)}))})}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,Object.assign(View.prototype,_basesettingsview.default.prototype),View.prototype.onResume=function(options){_basesettingsview.default.prototype.onResume.apply(this,arguments),startInterval(this),this.boundonScheduledTasksUpdate||(this.boundonScheduledTasksUpdate=onScheduledTasksUpdate.bind(this)),_events.default.on(_api.default,"ScheduledTasksInfo",this.boundonScheduledTasksUpdate)},View.prototype.loadSettingsInternal=function(){return reloadList(this.view)},View.prototype.onPause=function(){var instance;_basesettingsview.default.prototype.onPause.apply(this,arguments),this.boundonScheduledTasksUpdate&&_events.default.off(_api.default,"ScheduledTasksInfo",this.boundonScheduledTasksUpdate),instance=this,ApiClient.stopMessageListener("ScheduledTasksInfo"),instance.pollInterval&&(instance.pollInterval.destroy(),instance.pollInterval=null)},View.prototype.destroy=function(){_basesettingsview.default.prototype.destroy.apply(this,arguments),this.boundonScheduledTasksUpdate=null},_exports.default=View});