1 line
No EOL
4.3 KiB
JavaScript
1 line
No EOL
4.3 KiB
JavaScript
import connectionManager from"./../modules/emby-apiclient/connectionmanager.js";import globalize from"./../modules/common/globalize.js";import events from"./../modules/emby-apiclient/events.js";import serverNotifications from"./../modules/common/input/api.js";import MethodTimer from"./../modules/common/methodtimer.js";import"./../modules/emby-elements/emby-button/emby-button.js";import"./../modules/emby-elements/emby-progressbar/emby-progressbar.js";function updateTasks(instance,tasks){let options=instance.options;var wasRunning,instance=options.button,tasks=tasks.filter(function(t){return t.Key===options.taskKey})[0];options.panel&&(tasks?options.panel.classList.remove("hide"):options.panel.classList.add("hide")),tasks&&("Idle"===tasks.State?(wasRunning=instance.hasAttribute("disabled"),instance.removeAttribute("disabled"),wasRunning&&options.onStatusChange&&options.onStatusChange()):instance.setAttribute("disabled","disabled"),instance.setAttribute("data-taskid",tasks.Id),wasRunning=(tasks.CurrentProgressPercentage||0).toFixed(1),options.progressElem&&(options.progressElem.innerHTML='<div class="itemProgressBarForeground itemProgressBarForegroundRound" style="width:'+wasRunning+'%;"></div>',"Running"===tasks.State?options.progressElem.classList.remove("hide"):options.progressElem.classList.add("hide")),options.lastResultElem)&&("Failed"===(instance=tasks.LastExecutionResult?tasks.LastExecutionResult.Status:"")?options.lastResultElem.html('<span style="color:#FF0000;">('+globalize.translate("Failed")+")</span>"):"Cancelled"===instance?options.lastResultElem.html('<span style="color:#0026FF;">('+globalize.translate("Cancelled")+")</span>"):"Aborted"===instance?options.lastResultElem.html('<span style="color:#FF0000;">'+globalize.translate("LabelAbortedByServerShutdown")+"</span>"):options.lastResultElem.html(instance))}function pollTasks(instance){connectionManager.getApiClient(instance.options.serverId).getScheduledTasks({IsEnabled:!0}).then(function(result){updateTasks(instance,result)})}function onScheduledTaskMessageConfirmed(instance,taskId){connectionManager.getApiClient(instance.options.serverId).startScheduledTask(taskId).then(function(){return pollTasks(instance)})}function onButtonClick(e){onScheduledTaskMessageConfirmed(this,e.target.closest("button").getAttribute("data-taskid"))}function onScheduledTasksUpdate(e,apiClient,info){apiClient.serverId()===this.options.serverId&&updateTasks(this,info)}function onPollIntervalFired(){connectionManager.getApiClient(this.options.serverId).isMessageChannelOpen()||pollTasks(this)}function stopInterval(instance){var interval=instance.pollInterval;interval&&interval.destroy(),instance.pollInterval=null}function startInterval(instance){var apiClient=connectionManager.getApiClient(instance.options.serverId);stopInterval(instance),apiClient.startMessageListener("ScheduledTasksInfo","1000,1000"),instance.pollInterval=new MethodTimer({onInterval:instance.boundonPollIntervalFired,timeoutMs:1e4,type:"interval"})}function stopEvents(instance){connectionManager.getApiClient(instance.options.serverId).stopMessageListener("ScheduledTasksInfo"),stopInterval(instance)}function TaskButton(options){var instance=this||new TaskButton(options);(instance.options=options).serverId||(options.serverId=connectionManager.currentApiClient().serverId()),options.panel&&options.panel.classList.add("hide"),instance.paused=!0,instance.boundOnButtonClick=onButtonClick.bind(instance),instance.boundonScheduledTasksUpdate=onScheduledTasksUpdate.bind(instance),instance.boundonPollIntervalFired=onPollIntervalFired.bind(instance),"on"===options.mode?instance.resume({}):"off"===options.mode&&instance.pause()}TaskButton.prototype.resume=function(options){this.paused&&(this.paused=!1,this.options.button.addEventListener("click",this.boundOnButtonClick),pollTasks(this),startInterval(this),events.on(serverNotifications,"ScheduledTasksInfo",this.boundonScheduledTasksUpdate))},TaskButton.prototype.pause=function(){this.paused=!0,this.boundOnButtonClick&&this.options.button.removeEventListener("click",this.boundOnButtonClick),this.boundonScheduledTasksUpdate&&events.off(serverNotifications,"ScheduledTasksInfo",this.boundonScheduledTasksUpdate),stopEvents(this)},TaskButton.prototype.destroy=function(){this.pause(),this.options=null,this.boundOnButtonClick=null,this.boundonScheduledTasksUpdate=null,this.boundonPollIntervalFired=null};export default TaskButton; |