HEX
Server: Apache/2.4.63 (Unix)
System: Linux TOMS-220NAS 4.4.302+ #86009 SMP Wed Nov 26 18:19:17 CST 2025 x86_64
User: flavio87 (1026)
PHP: 8.3.27
Disabled: NONE
Upload Files
File: //var/packages/HyperBackup/target/ui/jobtray.js
/* Copyright (c) 2026 Synology Inc. All rights reserved. */

!function(){var t=SYNO.SDS.Backup.Client.Explore.Utils.GetString,e=SYNO.SDS.Backup.Client.Explore.Utils.GetJobTrayCls,i=function(t){return"waiting"===t?"waiting":"running"};Ext.define("SYNO.SDS.Backup.Client.JobTray.AppInstance",{extend:"SYNO.SDS.AppInstance",appTrayItemName:"SYNO.SDS.Backup.Client.JobTray.TrayItem",start:function(t){this.trayItem.monitor(t)},addDownloadId:function(t){this.trayItem.addDownloadId(t)},isPreparingDownload:function(){return!Ext.isEmpty(this.trayItem.getDownloadIds())}}),Ext.define("SYNO.SDS.Backup.Client.JobTray.TrayItem",{extend:"SYNO.SDS.Tray.ArrowTray",downloadIds:{},panelAlign:"t-b",constructor:function(){this.launched=!1,this.taskButtonIsReadyResolve=null,this.taskButtonIsReady=new Promise((t=>{this.taskButtonIsReadyResolve=t})),this.jsConfig={},this.jsConfig.iconCls="sds-tray-item-ani-upload",this.cancelList=[],this.callParent(arguments)},initPanel:function(){return new SYNO.SDS.Backup.Client.JobTray.Panel({cls:e()+" syno-sds-backup-jobtray-panel",trayitem:this})},monitor:function(t){Ext.apply(this,t),this.onStopPolling(),this.onStartPolling(),this.launched=!1},addDownloadId:function(t){this.downloadIds[t]=!0},onButtonReady:function(){this.taskButtonIsReadyResolve()},onBeforeDestroy:function(){this.onStopPolling(),this.callParent(arguments)},onStartPolling:async function(){this.pollingID||(await this.taskButtonIsReady,this.setTaskButtonVisible(!0),this.pollingID=this.pollReg({webapi:{api:"SYNO.SDS.Backup.Client.Explore.Job",version:1,method:"list",params:{backend:this.backend,download_ids:this.getDownloadIds()}},interval:2,immediate:!0,scope:this,status_callback:this.onPollingDone}))},onStopPolling:function(){this.pollingID&&(this.pollUnreg(this.pollingID),this.pollingID=null)},onPollingDone:function(t,e,i,n){var s=this.cancelList;e.job_list=e.job_list.filter((function(t){return 0>s.indexOf(t.id)})),this.panel.store.loadData(e),this.updateDownloadIds(e.job_list),this.updateView(e.job_list.length)},getDownloadIds:function(){var t=[];return Ext.iterate(this.downloadIds,(function(e,i){t.push(e)})),t},updateDownloadIds:function(t){var e={};Ext.each(t,(function(t){if("download"!==t.status)return!0;e[t.download_id]=!0})),this.downloadIds=e},updateView:function(t){9<t&&(t=9),this.panel.setHeight(83*t+43),this.panel.updateScroller(),0===t?this.hideTrayIcon():this.launched||this.showTrayIcon()},hideTrayIcon:function(){this.taskButton.toggle(!1),this.panel.hide(),this.setTaskButtonVisible(!1),this.onStopPolling(),this.launched=!1,this.cancelList=[]},showTrayIcon:function(){this.panel.show(),this.panel.el.anchorTo(this.taskButton.el,this.arrowAlignPosition,[0,11]),this.launched=!0}}),Ext.define("SYNO.SDS.Backup.Client.JobTray.Panel",{extend:"SYNO.SDS.Tray.Panel",width:304,layout:"fit",style:"padding: 0",autoFlexcroll:!0,constructor:function(){this.callParent(arguments),this.addClass("syno-ux-panel")},scrollTo:function(t){this.fleXcrollTo(t)},initComponent:function(){this.callParent(arguments),this.gridPanel=new SYNO.SDS.Backup.Client.JobTray.GridPanel({plugins:[new SYNO.CellActions({actionWidth:24,tpl:'<div class="ux-cell-value"><div class="ux-cell-actions"><tpl for="actions"><div class="ux-cell-action {cls}" ext:qtip="{qtip}" style="{style}">&nbsp;</div></tpl></div></div>',listeners:{action:{fn:function(t,e,i,n){var s=t.getSelectionModel(),a=t.store;s.selectRow(a.indexOf(e),!0),this.removeTask(a,e)},scope:this}},isRecordAlreadyClicked:function(){return!0},align:"center"})],colModel:this.initColumnModel(),store:this.getStore(),sm:new Ext.grid.RowSelectionModel({singleSelect:!0}),autoHeight:!0,title:t("app","backup_explorer"),bbar:[]}),this.add(this.gridPanel)},removeTask:function(t,e){this.sendWebAPI({api:"SYNO.SDS.Backup.Client.Explore.Job",version:1,method:"cancel",params:{unique:e.data.unique,backend:this.trayitem.backend}}),t.remove(e),this.trayitem.cancelList.push(e.data.id),this.trayitem.updateView(t.getCount())},getStore:function(){return this.store||(this.store=new Ext.data.JsonStore({root:"job_list",fields:["id","unique","name","processed_size","total_size","status","can_cancel"],autoDestroy:!0,idProperty:"id",listeners:{load:{scope:this,fn:function(t,e){Ext.each(e,(function(t){if(!t.data.can_cancel){var e=this.gridPanel.getStore();this.gridPanel.getView().getRow(e.indexOf(t)).classList.add("disable-cancel")}}),this)}}}})),this.store},initColumnModel:function(){return new Ext.grid.ColumnModel({defaults:{menuDisabled:!0,sortable:!1},columns:[{id:"name",dataIndex:"id",align:"left",width:249,renderer:this.nameRenderer.createDelegate(this),scope:this},{dataIndex:"id",align:"left",css:"vertical-align: bottom;",width:35,cellActions:[{iconCls:"sds-progress-cancel",qtip:_T("common","cancel")}]}]})},nameRenderer:function(e,n,s,a,o,l){var r=0;0<s.data.total_size&&(r=Math.floor(s.data.processed_size/s.data.total_size*100));var d,c=new SYNO.SDS.Utils.ProgressBar({barWidth:185,barHeight:16,showValueText:!0}),u=(d=s.data.status,t("explorer","copy"===d?"tray_copy_status":"restore"===d?"tray_restore_status":"download"===d?"tray_download_status":"tray_wait_status"));return new Ext.XTemplate('<div class="jobtray-item"><div class="jobtray-file-text">{name}</div><div class="jobtray-status-text {statusCss}">{statusText}</div></div><table><tbody><tr><td>{progressBar}</td></tr></tbody></table>').apply({name:SYNO.SDS.Backup.Explore.widthEllipsis(s.data.name,256),statusText:u,statusCss:i(s.data.status),progressBar:c.fill(r),invvalue:100-r})}}),Ext.define("SYNO.SDS.Backup.Client.JobTray.GridPanel",{extend:"SYNO.ux.GridPanel",cls:"jobtray-grid-panel",hideHeaders:!0,header:!0,forceFit:!0,getView:function(){return this.view||(this.view=new SYNO.ux.FleXcroll.grid.GridView(Ext.apply(this.viewConfig||{},{autoFlexcroll:!1,initTemplates:function(){Ext.grid.GridView.prototype.initTemplates.apply(this,arguments);var t=['<tr class="x-grid3-row-body-tr" style="{bodyStyle}">','<td colspan="{cols}" class="x-grid3-body-cell" tabIndex="0" hidefocus="on">','<div class="x-grid3-row-body">{body}</div>',"</td>","</tr>"].join(""),e=['<table class="x-grid3-row-table" border="0" cellspacing="0" cellpadding="0" style="{tstyle}">',"<tbody>","<tr>{cells}</tr>",this.enableRowBody?t:"","</tbody>","</table>"].join("");this.templates.row=new Ext.Template('<div class="x-grid3-row {alt}" style="{tstyle}">'+e+"</div>"),this.templates.row.disableFormats=!0,this.templates.row.compile()},onLayout:function(){this.scrollOffset=0,this.fitColumns(!1)}}))),this.view}})}();