File: /volume1/@appstore/HyperBackup/ui/fuse.js
/* Copyright (c) 2026 Synology Inc. All rights reserved. */
Ext.define("SYNO.SDS.Backup.Client.Fuse.MountWindow",{version:1,extend:"SYNO.SDS.ModalWindow",constructor:function(t){var e=this.fillConfig(t);this.callParent([e]),this.panel=this.getComponent("formpanel"),this.defineBehaviors()},fillConfig:function(t){var e=[{xtype:"container",cls:"syno-sds-backup-fuse-mount-to",layout:"column",itemId:"mount_point_path_field",items:[{xtype:"syno_displayfield",cls:"syno-sds-backup-fuse-mount-to-label",width:195,height:28,value:SYNO.SDS.Backup.Client.Fuse.Utils.GetString("fuse","mp_label")+":"},{xtype:"syno_textfield",cls:"syno-sds-backup-fuse-mount-to-textfield selectabletext",name:"mount_point",width:350,height:30,readOnly:!0},{xtype:"syno_button",cls:"syno-sds-backup-fuse-mount-to-btn",width:107,text:SYNO.SDS.Backup.Client.Fuse.Utils.GetString("fuse","browse"),scope:this,handler:this.openFolderSelector}]},{xtype:"syno_textfield",name:"mount_point_real_path",hidden:!0},{xtype:"syno_textfield",name:"abs_path",hidden:!0},{xtype:"syno_textfield",name:"target_id",hidden:!0},{xtype:"container",cls:"syno-sds-backup-fuse-password",layout:"column",itemId:"manual_passwd",hidden:!0,hideLabel:!0,items:[{xtype:"syno_radio",cls:"syno-sds-backup-fuse-password-label",name:"decrypt_method",width:195,height:28,inputValue:"manual",boxLabel:SYNO.SDS.Backup.Client.Fuse.Utils.GetString("app","task_password_input"),checked:!0},{xtype:"syno_textfield",cls:"syno-sds-backup-fuse-password-textfield",textType:"password",name:"password",width:350,height:30,minLength:8,maxLength:64,allowBlank:!1}]},{xtype:"container",cls:"syno-sds-backup-fuse-keyfile",layout:"column",itemId:"keyfile_passwd",hidden:!0,hideLabel:!0,items:[{xtype:"syno_radio",cls:"syno-sds-backup-fuse-keyfile-label",name:"decrypt_method",width:195,height:28,inputValue:"keyfile",boxLabel:SYNO.SDS.Backup.Client.Fuse.Utils.GetString("app","task_private_input")},{xtype:"syno_filebutton",cls:"syno-sds-backup-fuse-keyfile-file-btn",height:30,allowBlank:!1,name:"private_key",buttonConfig:{width:107},textConfig:{width:334}}]},{xtype:"syno_displayfield",cls:"syno-sds-backup-fuse-notice-message",name:"notice_message",htmlEncode:!1,value:'<span class="red-status">'+SYNO.SDS.Backup.Client.Fuse.Utils.GetString("fuse","ro_warning")+"</span>"}],i=new SYNO.SDS.Utils.FormPanel({itemId:"formpanel",fileUpload:!0,webapi:{api:"SYNO.SDS.Backup.Client.Fuse.Target",method:"mount_by_private",version:1,scope:this},items:e,onApiSuccess:this.onActionComplete,onApiFailure:this.onFormFailed}),s={width:710,height:280,resizable:!1,title:SYNO.SDS.Backup.Client.Fuse.Utils.GetString("fuse","mount_window_title"),cls:SYNO.SDS.Backup.Client.Fuse.Utils.GetFuseCls()+" syno-sds-backup-fuse",layout:"fit",items:i,keys:[{key:Ext.EventObject.ENTER,scope:this,handler:this.onSubmit}],buttons:[{itemId:"cancel",text:_T("common","cancel"),scope:this,handler:this.close},{itemId:"apply",btnStyle:"blue",text:_T("common","ok"),scope:this,handler:this.onSubmit}]};return Ext.apply(s,t),s},defineBehaviors:function(){this.mon(this,"afterlayout",(function(t,e){var i=this.panel.getForm();new SYNO.ux.Utils.EnableRadioGroup(i,"decrypt_method",{manual:["password"],keyfile:["private_key"]})}),this,{single:!0})},getErrString:function(t){return t.errors&&t.errors.sec&&t.errors.key?SYNO.SDS.Backup.Client.Fuse.Utils.GetString(t.errors.sec,t.errors.key):SYNO.SDS.Backup.Client.Fuse.Utils.GetErrorString(t.code)},responseError:function(t){t.code!==SYNO.SDS.Backup.ERR_TARGET_EXIST?this.setStatusError({text:this.getErrString(t)}):this.getMsgBox().confirm(_T("leaf","backup"),SYNO.SDS.Backup.Client.Fuse.Utils.GetString("fuse","redirect_confirm"),(function(e){"yes"===e?(SYNO.SDS.AppLaunch("SYNO.SDS.App.FileStation3.Instance",{opendir:t.errors.mount_point},!0),this.close()):this.close()}),this)},onOpen:function(){this.setStatusBusy(),this.sendWebAPI({api:"SYNO.SDS.Backup.Client.Fuse.Target",version:1,method:"get_avail_mountpoint",params:{target_id:this.target_id,abs_path:this.repo_path},callback:function(t,e,i){if(!t)return this.clearStatusBusy(),void this.getMsgBox().alert(_T("leaf","backup"),this.getErrString(e),(function(){this.close()}),this);this.panel.getForm().setValues(e),this.data_enc=this.data_enc||e.is_enc,this.data_enc&&(this.panel.getComponent("manual_passwd").show(),this.panel.getComponent("keyfile_passwd").show(),this.panel.getForm().findField("password").focus(!1,100)),this.clearStatusBusy()},scope:this}),this.callParent(arguments)},onSubmit:function(){var t,e,i=this.panel.getForm();if(i.findField("abs_path").setValue(this.repo_path),i.findField("target_id").setValue(this.target_id),this.data_enc){if(!i.isValid())return;if("keyfile"===(t=i.findField("decrypt_method").getGroupValue())){if(!i.findField("private_key").getValue())return;return this.setStatusBusy({text:_T("common","msg_waiting")}),void this.get("formpanel").upload()}if(!(e=i.findField("password").getValue()))return}else i.findField("decrypt_method").disable();this.doSubmitEncryption(t,e)},doSubmitEncryption:function(t,e){var i={};Ext.copyTo(i,this.panel.getForm().getValues(),["mount_point_real_path","abs_path","target_id","password"]),this.setStatusBusy({text:_T("common","msg_waiting")}),this.sendWebAPI({api:"SYNO.SDS.Backup.Client.Fuse.Target",version:"1",method:"mount_by_password",encryption:this.data_enc?["password"]:void 0,params:i,scope:this,callback:function(t,e,i,s){if(!t)return this.clearStatusBusy(),void this.responseError(e);var n=this.callback;this.clearStatusBusy(),this.close(),Ext.isFunction(n)&&n(e)}})},onActionComplete:function(t,e,i){Ext.isFunction(this.ownerCt.callback)&&this.ownerCt.callback(e),this.ownerCt.clearStatusBusy(),this.ownerCt.close()},onFormFailed:function(t,e,i){return this.ownerCt.clearStatusBusy(),this.ownerCt.responseError(e),!1},openFolderSelector:function(){new SYNO.SDS.Utils.FileChooser.Chooser({title:_T("common","choose"),owner:this,folderToolbar:!0,enumColdStorage:!0,usage:{type:"chooseDir"},listeners:{scope:this,choose:this.onFolderSelected}}).show()},onFolderSelected:function(t,e){var i=e.fullpath;this.setStatusBusy(),this.sendWebAPI({api:"SYNO.SDS.Backup.Client.Fuse.Target",version:1,method:"get_avail_mountpoint",params:{target_id:this.target_id,abs_path:this.repo_path,mount_point_parent:i},callback:function(t,e,i){if(!t)return this.clearStatusBusy(),void this.responseError(e);this.panel.getForm().setValues(e),this.clearStatusBusy()},scope:this}),t.close()}}),Ext.ns("SYNO.SDS.Backup.Client.Fuse.Utils"),Ext.apply(SYNO.SDS.Backup.Client.Fuse.Utils,{isTarget:function(t,e){var i=t.split(".");if(1===i.length)return!1;var s=i[i.length-1].toLowerCase();if(e){if("hbk"!==s)return!1}else if("bkpi"!==s)return!1;return!0},isThisPkgNewer:function(){if(!SYNO.SDS.StatusNotifier.isAppEnabled("SYNO.SDS.Backup.Application"))return!1;if(!SYNO.SDS.StatusNotifier.isAppEnabled("SYNO.SDS.BackupService.Instance"))return!0;var t=0,e=SYNO.SDS.Backup.Client.Fuse.MountWindow.prototype.version;return SYNO.SDS.Backup.Server&&SYNO.SDS.Backup.Server.Fuse&&SYNO.SDS.Backup.Server.Fuse.MountWindow&&(t=SYNO.SDS.Backup.Server.Fuse.MountWindow.prototype.version),!(e<=t)},bundleCheckFn:function(t,e){return!!_S("is_admin")&&(!!SYNO.SDS.Backup.Client.Fuse.Utils.isThisPkgNewer()&&!!SYNO.SDS.Backup.Client.Fuse.Utils.isTarget(e[0].get("filename"),e[0].get("isdir")))},bundleLaunchFn:function(t){var e=t[0].get("real_path").split("/"),i="",s="";t[0].get("isdir")?(i=e.slice(0,-1).join("/"),s=e[e.length-1]):(i=e.slice(0,-2).join("/"),s=e[e.length-2]),new SYNO.SDS.Backup.Client.Fuse.MountWindow({owner:this.owner,repo_path:i,target_id:s,callback:Ext.createDelegate((function(t){t&&t.mount_point?this.onChangeDir(t.mount_point):SYNO.Debug("unexpected data",t)}),this)}).open()},vtCheckFn:function(t,e){return!!_S("is_admin")&&(!!SYNO.SDS.Backup.Client.Fuse.Utils.isThisPkgNewer()&&!!SYNO.SDS.Backup.Client.Fuse.Utils.isVT(e[0].get("mountType")))},vtLaunchFn:function(t){var e=t[0].get("real_path"),i="/"+t[0].get("path").split("/")[1],s=function(t,e,s){if(!t)return this.owner.clearStatusBusy(),void this.owner.getMsgBox().alert(_T("leaf","backup"),SYNO.SDS.Backup.GetErrorString(e.code));this.refreshTreeNode([i],!0),this.refreshGrid(),this.owner.clearStatusBusy()};this.owner.getMsgBox().confirm(_T("tree","leaf_backup"),SYNO.SDS.Backup.String("fuse","umount_confirm"),(function(t){"yes"===t&&(this.owner.setStatusBusy(),this.sendWebAPI({api:"SYNO.SDS.Backup.Client.Fuse.Target",version:1,method:"umount",params:{mount_point_real_path:e},callback:s,scope:this}))}),this)},isVT:function(t){return"bkpfuse"===t},vtGetIconFn:function(t,e,i){return!!SYNO.SDS.Backup.Client.Fuse.Utils.isVT(e.get("mountType"))&&(SYNO.SDS.UIFeatures.test("isRetina")?"webman/3rdparty/HyperBackup/images/2x/mount_point_icon.png":"webman/3rdparty/HyperBackup/images/1x/mount_point_icon.png")},vtCheckThumbnailFn:function(t){return!!SYNO.SDS.Backup.Client.Fuse.Utils.isVT(t.mountType)},vtGetThumbnailFn:function(){return SYNO.SDS.UIFeatures.test("isRetina")?"webman/3rdparty/HyperBackup/images/2x/mount_point_thumb.png":"webman/3rdparty/HyperBackup/images/1x/mount_point_thumb.png"},GetErrorString:function(t,e){return SYNO.SDS.Backup.GetErrorString?SYNO.SDS.Backup.GetErrorString(t,e):""},GetString:function(t,e){return SYNO.SDS.Backup.String?SYNO.SDS.Backup.String(t,e):""},GetFuseCls:function(){return"syno-sds-backup-client-fuse"}});