define(["jQuery", "loading", "events", "globalize", "serverNotifications", "humanedate", "listViewStyle", "emby-linkbutton"], function($, loading, events, globalize, serverNotifications) { "use strict"; function reloadList(page) { ApiClient.getScheduledTasks({ isHidden: !1 }).then(function(tasks) { populateList(page, tasks), loading.hide() }) } function populateList(page, tasks) { tasks = tasks.sort(function(a, b) { return a = a.Category + " " + a.Name, b = b.Category + " " + b.Name, a == b ? 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, currentCategory && (html += "", html += ""), html += '
', html += '
', html += '

', html += currentCategory, html += "

", 0 === i && (html += '' + globalize.translate("Help") + ""), html += "
", html += '
'), html += '
', html += "", html += 'schedule', html += "", html += '", "Idle" == task.State ? html += '' : "Running" == task.State ? html += '' : html += '', html += "
" } tasks.length && (html += "
", html += "
"), page.querySelector(".divScheduledTasks").innerHTML = html } function humane_elapsed(firstDateStr, secondDateStr) { var dt1 = new Date(firstDateStr), dt2 = new Date(secondDateStr), seconds = (dt2.getTime() - dt1.getTime()) / 1e3, numdays = Math.floor(seconds % 31536e3 / 86400), numhours = Math.floor(seconds % 31536e3 % 86400 / 3600), numminutes = Math.floor(seconds % 31536e3 % 86400 % 3600 / 60), numseconds = Math.round(seconds % 31536e3 % 86400 % 3600 % 60), elapsedStr = ""; return elapsedStr += 1 == numdays ? numdays + " day " : "", elapsedStr += numdays > 1 ? numdays + " days " : "", elapsedStr += 1 == numhours ? numhours + " hour " : "", elapsedStr += numhours > 1 ? numhours + " hours " : "", elapsedStr += 1 == numminutes ? numminutes + " minute " : "", elapsedStr += numminutes > 1 ? numminutes + " minutes " : "", elapsedStr += elapsedStr.length > 0 ? "and " : "", elapsedStr += 1 == numseconds ? numseconds + " second" : "", elapsedStr += 0 == numseconds || numseconds > 1 ? numseconds + " seconds" : "" } function getTaskProgressHtml(task) { var html = ""; if ("Idle" == task.State) task.LastExecutionResult && (html += globalize.translate("LabelScheduledTaskLastRan").replace("{0}", humane_date(task.LastExecutionResult.EndTimeUtc)).replace("{1}", humane_elapsed(task.LastExecutionResult.StartTimeUtc, task.LastExecutionResult.EndTimeUtc)), "Failed" == task.LastExecutionResult.Status ? html += " (" + globalize.translate("LabelFailed") + ")" : "Cancelled" == task.LastExecutionResult.Status ? html += " (" + globalize.translate("LabelCancelled") + ")" : "Aborted" == task.LastExecutionResult.Status && (html += " " + globalize.translate("LabelAbortedByServerShutdown") + "")); else if ("Running" == task.State) { var progress = (task.CurrentProgressPercentage || 0).toFixed(1); html += '
', html += '
', html += '
', html += "
", html += "
", html += "" + progress + "%", html += "
" } else html += "" + globalize.translate("LabelStopping") + ""; return html } function updateTaskButton(elem, state) { "Idle" == state ? (elem.classList.add("btnStartTask"), elem.classList.remove("btnStopTask"), elem.classList.remove("hide"), elem.querySelector("i").innerHTML = "play_arrow", elem.title = globalize.translate("ButtonStart")) : "Running" == state ? (elem.classList.remove("btnStartTask"), elem.classList.add("btnStopTask"), elem.classList.remove("hide"), elem.querySelector("i").innerHTML = "stop", elem.title = globalize.translate("ButtonStop")) : (elem.classList.add("btnStartTask"), elem.classList.remove("btnStopTask"), elem.classList.add("hide"), elem.querySelector("i").innerHTML = "play_arrow", elem.title = globalize.translate("ButtonStart")), $(elem).parents(".listItem")[0].setAttribute("data-status", state) } return function(view, params) { function updateTasks(tasks) { for (var i = 0, length = tasks.length; i < length; i++) { var task = tasks[i]; view.querySelector("#taskProgress" + task.Id).innerHTML = getTaskProgressHtml(task); updateTaskButton(view.querySelector("#btnTask" + task.Id), task.State) } } function onPollIntervalFired() { ApiClient.isMessageChannelOpen() || reloadList(view) } function onScheduledTasksUpdate(e, apiClient, info) { apiClient.serverId() === serverId && updateTasks(info) } function startInterval() { ApiClient.sendMessage("ScheduledTasksInfoStart", "1000,1000"), pollInterval && clearInterval(pollInterval), pollInterval = setInterval(onPollIntervalFired, 1e4) } function stopInterval() { ApiClient.sendMessage("ScheduledTasksInfoStop"), pollInterval && clearInterval(pollInterval) } var pollInterval, serverId = ApiClient.serverId(); $(".divScheduledTasks", view).on("click", ".btnStartTask", function() { var button = this, id = button.getAttribute("data-taskid"); ApiClient.startScheduledTask(id).then(function() { updateTaskButton(button, "Running"), reloadList(view) }) }).on("click", ".btnStopTask", function() { var button = this, id = button.getAttribute("data-taskid"); ApiClient.stopScheduledTask(id).then(function() { updateTaskButton(button, ""), reloadList(view) }) }), view.addEventListener("viewbeforehide", function() { events.off(serverNotifications, "ScheduledTasksInfo", onScheduledTasksUpdate), stopInterval() }), view.addEventListener("viewshow", function() { loading.show(), startInterval(), reloadList(view), events.on(serverNotifications, "ScheduledTasksInfo", onScheduledTasksUpdate) }) } });