File: //volume1/@appstore/HyperBackup/ui/backupwidget.js
/* Copyright (c) 2022 Synology Inc. All rights reserved. */
Ext.define("SYNO.SDS.Backup.ScheduleBackupWidget",{extend:"SYNO.SDS._Widget.GridPanel",constructor:function(a){this.NUM_REC_PER_PAGE=2;this.callParent(arguments)},onActivateScheduleDone:function(d,b,c,a){if(d){this.ProcessBackupStatus(b.task_list)}},onStartPolling:function(){this.pollingID=this.pollReg({webapi:{api:"SYNO.Backup.Task",version:1,method:"list",params:{additional:["schedule","next_bkp_time","last_bkp_time","last_bkp_result:Backupable","is_modified"]}},interval:10,immediate:true,scope:this,status_callback:this.onActivateScheduleDone})},onStopPolling:function(){if(!Ext.isEmpty(this.pollingID)){this.pollUnreg(this.pollingID);delete this.pollingID}},onGridCellClick:function(){},onClick:function(d,c,b){this.callParent(arguments);var a=Ext.fly(c);if(a&&(a.hasClass("help_link"))){SYNO.SDS.AppLaunch("SYNO.SDS.Backup.Application",{id:a.getAttribute("task-id")})}},getColumnModel:function(){if(this.cmSystemLog){return this.cmSystemLog}var a=new Ext.grid.ColumnModel({columns:[{id:"bkpstatus",width:290,renderer:this.backupTaskRenderer.createDelegate(this)}]});this.cmSystemLog=a;return a},getStore:function(){if(this.dsSystemLog){return this.dsSystemLog}var a=new Ext.data.Store({reader:new Ext.data.ArrayReader({},[{name:"type"},{name:"task"},{name:"tasks"},{name:"status"},{name:"total"},{name:"time"}])});this.dsSystemLog=a;this.addManagedComponent(a);return a},getTime:function(b){var a=parseInt(b,10);return String.format("{0}:{1}",String.leftPad(Math.floor(a/60),2,"0"),String.leftPad(a%60,2,"0"))},moreContentRender:function(c,a){var b=String.format(SYNO.SDS.Backup.String("app",c),a.length);if(1<a.length){b+=String.format(" [{0}]",a.map(function(d){return d.name}).join(","))}return this.contentRender(b,"")},contentRender:function(b,a,d){var c=String.format('<div class = "syno-sds-backupapp-scedule-task" ext:qtip="{1}">{0}: {2}</div>',_T("localbkp","localbkp_bkpset_name"),SYNO.SDS.Backup.Util.htmlEncodeTip(b),Ext.util.Format.htmlEncode(b));if(!Ext.isEmpty(a)){if(Ext.isEmpty(d)){d=a}c+=String.format('<div ext:qtip="{2}">{0}: {1}</div>',_T("widget","backup_status"),a,Ext.util.Format.htmlEncode(d))}return c},backupTaskRenderer:function(c,a,b){return new SYNO.SDS.Backup.BackupTaskView(b.json).getDecorator()},getLastBkp:function(d){var i={},c=[],f=[],g=[],e=[],b=[],j=[];Ext.each(d,function(l){if(("success"===l.last_bkp_result||"done"===l.last_bkp_result)&&true!==l.is_modified){c.push(l)}else{if("discard_failed"===l.status||("none"===l.status&&("backingup"===l.last_bkp_result||"resuming"===l.last_bkp_result||"failed"===l.last_bkp_result||"failed_checking"===l.last_bkp_result))){f.push(l)}else{if("partial"===l.last_bkp_result&&true!==l.is_modified){e.push(l)}else{if("cancel"===l.last_bkp_result){b.push(l)}else{if("suspend"===l.last_bkp_result){j.push(l)}else{g.push(l)}}}}}},this);var h=function(m,l){return new Date(l.last_bkp_time).getTime()-new Date(m.last_bkp_time).getTime()};c.sort(h);f.sort(h);e.sort(h);b.sort(h);j.sort(h);i.title=SYNO.SDS.Backup.String("app","widget_backup_title");i.cls="syno-sds-backupapp-scedule-enable";var a=function(l){return SYNO.SDS.Backup.GetBkpResultStr(l.last_bkp_result,l.is_modified,l.task_id)};if(f.length===1){i.time=f[0].last_bkp_time;i.iconCls="syno-sds-backupapp-scedule-icon failed";i.content=this.contentRender(f[0].name,a(f[0]))}else{if(f.length>1){i.time="";i.iconCls="syno-sds-backupapp-scedule-icon failed";i.content=this.moreContentRender("more_failed",f)}else{if(b.length===1){i.time=b[0].last_bkp_time;i.iconCls="syno-sds-backupapp-scedule-icon cancel";i.content=this.contentRender(b[0].name,a(b[0]))}else{if(b.length>1){i.time="";i.iconCls="syno-sds-backupapp-scedule-icon cancel";i.content=this.moreContentRender("more_cancel",b)}else{if(j.length===1){i.time=j[0].last_bkp_time;i.iconCls="syno-sds-backupapp-scedule-icon suspend";i.content=this.contentRender(j[0].name,a(j[0]))}else{if(j.length>1){i.time="";i.iconCls="syno-sds-backupapp-scedule-icon suspend";i.content=this.moreContentRender("more_suspend",j)}else{if(e.length===1){i.time=e[0].last_bkp_time;i.iconCls="syno-sds-backupapp-scedule-icon partial";var k=SYNO.SDS.Backup.GetBkpResultStr(e[0].last_bkp_result,e[0].is_modified);i.content=this.contentRender(e[0].name,a(e[0]),k)}else{if(e.length>1){i.time="";i.iconCls="syno-sds-backupapp-scedule-icon partial";i.content=this.moreContentRender("more_partial",e)}else{if(c.length===1){i.time=c[0].last_bkp_time;i.iconCls="syno-sds-backupapp-scedule-icon success";i.content=this.contentRender(c[0].name,a(c[0]))}else{if(c.length>1){i.time="";i.iconCls="syno-sds-backupapp-scedule-icon success";i.content=this.moreContentRender("more_success",c)}else{i.time=String.format("--{0}--{0}--",_T("common","colon"));i.iconCls="syno-sds-backupapp-scedule-icon no-result";i.content=this.contentRender(SYNO.SDS.Backup.String("app","no_backup"),"")}}}}}}}}}}return i},getNextBkp:function(d){var c=[],a={};Ext.each(d,function(e){e.next_bkp_epoch_time=Date.parseDate(e.next_bkp_time,"Y/m/d H:i");if(undefined!==e.next_bkp_epoch_time){c.push(e)}},this);var b=function(f,e){return f.next_bkp_epoch_time-e.next_bkp_epoch_time};c.sort(b);a.title=SYNO.SDS.Backup.String("app","backup_schedule_title");a.cls="syno-sds-backupapp-scedule-enable";if(0!==c.length){a.iconCls="syno-sds-backupapp-scedule-icon schedule-active";a.time=c[0].next_bkp_time;a.content=this.contentRender(c[0].name,"")}else{a.iconCls="syno-sds-backupapp-scedule-icon schedule-inactive";a.time=String.format("--{0}--{0}--",_T("common","colon"));a.content=this.contentRender(SYNO.SDS.Backup.String("app","no_backup_schedule"),"")}return a},ProcessBackupStatus:function(b){var a=[];a.push(this.getLastBkp(b));a.push(this.getNextBkp(b));this.getStore().loadData(a,false);this.doLayout()},onActivate:function(){this.onStartPolling()},onDeactivate:function(){this.onStopPolling()}});SYNO.SDS.Backup.BackupTaskView=function(a){this.cfg=a;this.getDecorator=function(){return String.format('<div class = "{0}">{1}</div>',this.cfg.cls,this.getContent(this.cfg))};this.getContent=function(b){var c=String.format('<div class = "{0}"></div>',b.iconCls);var e=String.format('<div class = "syno-sds-backupapp-scedule-title-bar"><div class = "syno-sds-backupapp-scedule-title" ext:qtip="{0}">{0}</div><span class = "syno-sds-backupapp-scedule-time" ext:qtip="{1}">{1}</span></div>',b.title,b.time);var d=String.format('<div class = "{0}">{1}</div>',b.contentCls,b.content);return c+'<div class = "syno-sds-backupapp-scedule-content">'+e+d+"</div>"}};