File: /volume1/@appstore/HyperBackup/ui/module.js
/* Copyright (c) 2026 Synology Inc. All rights reserved. */
Ext.define("SYNO.SDS.Backup.PrivateKeyDownloadWindow",{extend:"SYNO.SDS.ModalWindow",task_id:void 0,file_name:void 0,constructor:function(e){this.formPanel=new SYNO.ux.FormPanel({fieldWidth:160,labelWidth:150,items:[{xtype:"syno_displayfield",value:SYNO.SDS.Backup.String("app","download_encryption_key_verify_hint")},{xtype:"syno_textfield",fieldLabel:SYNO.SDS.Backup.String("app","task_password_input"),textType:"password",name:"password",minLength:8,maxLength:64,allowBlank:!1}]});var t=Ext.apply({width:500,height:180,resizable:!1,title:SYNO.SDS.Backup.String("app","download_encryption_key_verify"),layout:"fit",items:[this.formPanel],keys:[{key:Ext.EventObject.ENTER,handler:this.onSubmit,stopEvent:!0,scope:this}],buttons:[{itemId:"cancel",text:_T("common","cancel"),handler:this.close,scope:this},{itemId:"apply",btnStyle:"blue",text:_T("common","ok"),handler:this.onSubmit,scope:this}]},e);this.callParent([t])},onOpen:function(){this.callParent(arguments),this.formPanel.getForm().findField("password").focus(!1,100)},onSubmit:function(){if(this.formPanel.getForm().isValid()){var e=this.getParams();this.findAppWindow().downloadWebAPI({webapi:{api:"SYNO.Backup.Target",version:1,method:"private_key_download_by_password",params:e,encryption:["password"]},callback:function(e,t,i,a){i||this.appWin.getMsgBox().alert(this.title,SYNO.SDS.Backup.GetErrorString(a.code))},scope:this}),this.close()}},getParams:function(){return Ext.apply({task_id:this.task_id,file_name:this.file_name,support_utf8_name:Ext.isChrome||Ext.isGecko||Ext.isSafari},this.formPanel.getForm().getValues())}}),function(){var e=function(e,t){var i,a;if("month_view"===t){if(0==e%14)return a="",0<(i=e/7)&&(a=String.format('<div class="text">'+_T("backup","time_before")+"</div>",i,_T("common","time_weeks"))),new Ext.Container({cls:"weekline",html:a})}else if(0==e%12)return a="",0<(i=e)&&i<52&&(a=String.format('<div class="text">'+_T("backup","time_before")+"</div>",i,_T("common","time_weeks"))),new Ext.Container({cls:"weekline",html:a});return new Ext.Container({cls:"block"})},t=function(e){var t=null;if(t=e.isFirstNode?new Ext.Container({cls:"block pin"}):-1===e.versionNumber?new Ext.Container({cls:"block pass"}):new Ext.Container({cls:"block"}),0<e.versionNumber){var i=String.format("{0} {1}",e.versionNumber,_T("backup","version_nums")),a="",n="";a=0===e.index?_T("backup","nearest_backup"):e.isFirstNode?e.firstNodeText:"month_view"===e.viewMode?String.format(_T("backup","time_before"),e.index,_T("common","time_days")):String.format(_T("backup","time_before"),e.index,_T("common","time_weeks")),n=e.isFirstNode&&e.firstNodeExceedTenYear?a:i+", "+a,t.add(new Ext.BoxComponent({cls:"cycle",autoEl:{"ext:qtip":n}}))}return t},i=function(e,t){var i;if(!(t<=0)){if(t>=e.length){for(i=0;i<e.length;++i)e[i]=0;return e}for(i=e.length-1;i>=t;--i)e[i]=e[i-t];for(i=t-1;i>=0;--i)e[i]=0}},a=function(e){var t=e.slice(),i=[];return 0===t.length&&t.push([0,3600,1]),Ext.each(t,(function(e){var t={},a=e[1]/3600;t.range=Math.ceil(e[0]/86400),t.bitwise=function(e){var t,i=Array.apply(null,new Array(24)).map(Number.prototype.valueOf,0);if(e>=24)return i[23]=1,i;for(t=0;t<24;++t)0==t%e&&(i[23-t]=1);return i}(a),0==a%24?(t.type="date",t.interval=a/24):(t.type="hour",t.interval=a),i.push(t)})),i.sort((function(e,t){return 0===e.range||0===t.range?t.range-e.range:e.range-t.range})),i},n=function(e,t){for(var i,a=0;-1!==a;){for(a=-1,i=0;i<e.length;++i)if(0!==e[i].range&&e[i].range<t+1){a=i;break}-1!==a&&e.splice(a,1)}},r=function(e,t){var i=[];return Ext.each(e,(function(e){var a,n;"hour"===e.type?(a=t%e.interval*24%e.interval,n=e.bitwise.slice(),0!==a&&(n=function(e,t){var i,a=e.length-t;if(!(t<=0)){if(t>=e.length){for(i=0;i<e.length;++i)e[i]=0;return e}for(i=0;i<a;++i)e[i]=e[i+t];for(i=a;i<e.length;++i)e[i]=0}}(n,a=e.interval-a)),i.push(n)):"date"===e.type&&t%e.interval==0&&i.push(e.bitwise.slice())})),i},o=function(e){if(!e.enableSchedule)return[0,[]];var t,o,s,l=3650,c=e.rotateMaxVersion,h=Array.apply(null,new Array(l)).map(Number.prototype.valueOf,0),u=function(e){var t=Array.apply(null,new Array(24)).map(Number.prototype.valueOf,0);for(Ext.each(e,(function(e){t[e]=1}));1!==t[23];)i(t,1);return t}(e.backupTimeStampPerDay),p=a(e.rotateRuleList),d=null;e.isWeeklyRepeat?(s=e.backupDays.split(",").map((function(e){return 6-parseInt(e,10)})).sort(),o=s[0],s=s.map((function(e){return e-o})),d=function(e){return 0<=s.indexOf(e%7)}):(e.isMonthlyRepeat?t=28:e.isQuarterYearlyRepeat?t=84:e.isHalfYearlyRepeat?t=182:e.isYearlyRepeat&&(t=365),d=function(e){return 0==e%t});var m,f,w,y,k,S=0,b=-1;for(w=0;w<l&&S<c&&(!d(w)&&-1===b||(n(p,w),0!==p.length));++w)if(d(w)){for(y=r(p,w),m=u.length-1;m>=0&&S<c;--m)if(1===u[m]&&(b=w),-1!==b)for(f=0;f<y.length;++f)if(1===y[f][m]){h[b]+=1,S++,b=-1;break}}else if(-1!==b)for(y=r(p,w),f=0;f<y.length&&S<c;++f)for(m=y[f].length-1;m>=0;--m)if(1===y[f][m]){h[b]+=1,S++,b=-1;break}if((c-=S)>0&&0===p.length)for(w=0;w<l&&0<c;++w)d(w)&&e.backupPerDay>h[w]&&(k=Ext.min([e.backupPerDay-h[w],c]),h[w]+=k,c-=k);return[c,h]};Ext.define("SYNO.SDS.Backup.Rotation.Previewer",{extend:"SYNO.ux.Panel",lastRotationParams:null,rotationParams:null,lastViewArray:null,viewMode:"month_view",isUserSelectedViewMode:!1,initEvents:function(){this.mon(this,"afterlayout",(function(e,t){1!==e.items.length&&this.mon(this.changeViewBtn.el,"click",(function(){"month_view"===this.viewMode?this.viewMode="year_view":this.viewMode="month_view",this.isUserSelectedViewMode=!0,this.updateView()}),this)}),this)},initComponent:function(){this.callParent(arguments),this.add(this.getChangeViewBtn()),this.doLayout()},getChangeViewBtn:function(){return"month_view"===this.viewMode?this.changeViewBtn=new Ext.Container({cls:"change-view-btn month-view"}):this.changeViewBtn=new Ext.Container({cls:"change-view-btn year-view"}),this.changeViewBtn},updatePreviewer:function(e,t){this.rotationParams=function(e,t){var i={enableSchedule:e.schedule_enable,isWeeklyRepeat:void 0!==e.week_name,isNotRepeat:0===e.repeat,isMonthlyRepeat:1===e.repeat,isYearlyRepeat:2===e.repeat,isHalfYearlyRepeat:3===e.repeat,isQuarterYearlyRepeat:5===e.repeat,backupDays:e.week_name,enableRotate:t.enable_rotate,rotateRuleList:t.rotate_action,rotateMaxVersion:t.rotate_condition[1],rotateMode:t.rotate_option,isSynoCloudType:t.isSynoCloudType,backupTimeStampPerDay:[],backupPerDay:0},a=e.hour;do{i.backupTimeStampPerDay.push(a),i.backupPerDay++,a+=e.repeat_hour}while(a<=e.last_work_hour&&0!==e.repeat_hour);return i.isSynoCloudType&&(Ext.isDefined(i.backupDays)?i.rotateMaxVersion=3+i.backupDays.split(",").length:(i.isMonthlyRepeat||i.isYearlyRepeat||i.isHalfYearlyRepeat||i.isQuarterYearlyRepeat)&&(i.rotateMaxVersion=1)),i}(e,t),this.updateView()},updateView:function(){this.removeAll(),this.unmask();var i,a=this.getWidth();if(!this.rotationParams.enableSchedule||this.rotationParams.isNotRepeat&&!this.rotationParams.isWeeklyRepeat||1>this.rotationParams.rotateMaxVersion){var n=new Ext.Container({cls:"timeline-background",width:640});for(i=0;i<62;++i)n.add(new Ext.Container({cls:"block"}));return this.add(n),this.doLayout(),1>this.rotationParams.rotateMaxVersion?this.mask(_T("backup","not_available")):!this.rotationParams.enableSchedule||this.rotationParams.isNotRepeat&&!this.rotationParams.isWeeklyRepeat?this.mask(_T("backup","rotate_retention_no_schedule")):this.mask(_T("error","error_error_system")),!1}var r=Ext.encode(this.rotationParams);r!==this.lastRotationParams&&(this.lastRotationParams=r,this.lastViewArray=o(this.rotationParams));var s,l=this.lastViewArray;this.isUserSelectedViewMode||(this.viewMode=this.getAutoViewMode(l));var c,h=(s="month_view"===this.viewMode?this.getMonthViewArray(l,this.rotationParams):this.getYearViewArray(l,this.rotationParams))[0],u=s[1],p=-1;for(i=0;i<62;++i)0<u[i]&&(p=i);var d=(a-30)/((c=p+1)+2-3);1===c&&(d=2*a);var m=d*(c+2),f=new Ext.Container({cls:"timeline-background",width:m,x:-1.5*d+15}),w=new Ext.Container({cls:"timeline-wrapper",width:m,x:-1.5*d+15}),y=new Ext.Container({cls:"timeline-weekline",width:m,x:-1.5*d+15}),k="";for(k=0===h?_T("backup","nearest_backup"):28>=h?String.format(_T("backup","time_before"),h,_T("common","time_days")):168>=h?String.format(_T("backup","time_before"),Math.floor(h/7),_T("common","time_weeks")):365>=h?String.format(_T("backup","time_before"),Math.floor(h/28),_T("common","time_months")):3650>h?String.format(_T("backup","time_before"),Math.floor(h/365),_T("common","time_years")):SYNO.SDS.Backup.String("app","time_exceed_ten_year"),f.add(new Ext.Container({cls:"block"})),w.add(new Ext.Container({cls:"block"})),y.add(new Ext.Container({cls:"block"})),i=0;i<=p;++i)f.add(new Ext.Container({cls:"block"})),y.add(e(p-i,this.viewMode)),w.add(t({index:p-i,isFirstNode:0===i,firstNodeText:k,firstNodeExceedTenYear:h>=3650,versionNumber:u[p-i],viewMode:this.viewMode}));f.add(new Ext.Container({cls:"block"})),w.add(new Ext.Container({cls:"block"})),y.add(new Ext.Container({cls:"block"})),this.add(y),this.add(f),this.add(w),this.add(new Ext.Container({html:k,cls:"oldest"})),this.add(this.getChangeViewBtn()),this.doLayout(),this.rotationParams.enableRotate||this.mask()},getYearViewArray:function(e,t){var i,a,n,r=-1,o=e[0],s=e[1],l=Array.apply(null,new Array(62)).map(Number.prototype.valueOf,0);for(a=0,n=0,i=0;i<434;++i)n+=s[i],a+=s[i],6==i%7&&(l[Math.floor(i/7)]=n,n=0);if(0<o)r=3650;else for(i=3649;i>=0;--i)if(s[i]>0){r=i;break}return 0<t.rotateMaxVersion-a&&(l[59]=-1,l[60]=0,l[61]=1),[r,l]},getMonthViewArray:function(e,t){var i,a,n=-1,r=e[0],o=e[1],s=Array.apply(null,new Array(62)).map(Number.prototype.valueOf,0);for(a=0,i=0;i<62;++i)s[i]=o[i],a+=o[i];if(0<r)n=3650;else for(i=3649;i>=0;--i)if(o[i]>0){n=i;break}return 0<t.rotateMaxVersion-a&&(s[59]=-1,s[60]=0,s[61]=1),[n,s]},getAutoViewMode:function(e){var t,i=e[1],a="year_view";for(t=1;t<62;++t)if(0!==i[t]){a="month_view";break}return a},mask:function(e){this.el.mask(e,"syno-ux-grid-mask-info")},unmask:function(){this.el.unmask()}})}(),Ext.define("SYNO.SDS.Backup.AlertWindow",{extend:"SYNO.SDS.ModalWindow",constructor:function(e){var t=Ext.apply({width:600,height:220,cls:"syno-backup-alert-window",bodyStyle:"padding-top: 8px;",resizable:!1,layout:"fit",buttons:[{text:e.noBtnText?e.noBtnText:_T("common","no"),handler:function(){var e=this.items.get(0).getForm().getValues();Ext.isFunction(this.callback)&&this.callback("no",e),this.close()},scope:this},{text:e.yesBtnText?e.yesBtnText:_T("common","yes"),btnStyle:"blue",handler:function(){var e=this.items.get(0).getForm().getValues();Ext.isFunction(this.callback)&&this.callback("yes",e),this.close()},scope:this}],items:[{xtype:"syno_formpanel",items:e.formItems}]},e);return this.callParent([t])}}),Ext.define("SYNO.SDS.Backup.Wizard",{extend:"SYNO.SDS.Wizard.ModalWindow",wizardAnchor:"",lastStepId:null,getStep:function(e){var t=this.getAllSteps().filter((function(t){return e===t.itemId}))[0];if(!t&&Ext.isFunction(this.createStep)){if(t=this.createStep(e),!Ext.isDefined(t.itemId)||!Ext.isDefined(t.nextId))throw Error("missing step itemId: "+e);t&&(t.checkState||(t.checkState=SYNO.SDS.Wizard.Step.prototype.checkState),this.appendSteps(t))}return t},goNext:function(e,t){this.lastStepId=this.getActiveStep().getItemId();var i=this.getActiveStep().isAnchor;this.callParent(arguments),this.lastStepId=null,i&&this.setWizardAnchor()},getParams:function(){var e,t={};return e=this.lastStepId?this.stepStack.concat([this.lastStepId]):this.stepStack,Ext.each(e,(function(e){var i=this.getStep(e);Ext.isFunction(i.getParams)&&Ext.apply(t,this.getStep(e).getParams())}),this),t},setWizardAnchor:function(){this.wizardAnchor=Ext.encode(this.getParams())},getWizardAnchor:function(){return this.wizardAnchor},setHeadline:function(e){},setDescription:function(e){}}),Ext.define("SYNO.SDS.Backup.SummaryStep",{extend:"SYNO.SDS.Wizard.SummaryStep",cls:"syno-backup-summary",fieldRenderer:function(e){return'<b ext:qtip="'+e+'">'+e+"</b>"}});