HEX
Server: Apache/2.4.63 (Unix)
System: Linux Synopilou92 4.4.302+ #72806 SMP Mon Jul 21 23:16:00 CST 2025 x86_64
User: pilou92 (1026)
PHP: 8.0.30
Disabled: NONE
Upload Files
File: /volume1/@appstore/SynologyDrive/ui/desktop_index_tray.js
/* Copyright (c) 2026 Synology Inc. All rights reserved. */

Ext.ns("SYNO.SDS.CSTN.Tray.DesktopIndex"),SYNO.SDS.CSTN.Tray.DesktopIndex.Instance=Ext.extend(SYNO.SDS.AppInstance,{initInstance:function(t){if(SYNO.SDS.StatusNotifier.isAppHasPrivilege("SYNO.SDS.Drive.Application")){var e=new SYNO.SDS.CSTN.Tray.DesktopIndex.Tray({AppInstance:this});this.addInstance(e),e.open()}},onBeforeDestroy:function(){SYNO.SDS.CSTN.Tray.DesktopIndex.Instance.superclass.onBeforeDestroy.apply(this,arguments)}}),Ext.define("SYNO.SDS.CSTN.Tray.DesktopIndex.Tray",{extend:"SYNO.SDS.Tray.ArrowTray",initPanel:function(){SYNO.SDS.Strings["SYNO.SDS.CSTN.Tray.DesktopIndex.Instance"]&&(SYNO.SDS.Strings["SYNO.SDS.CSTN.Instance"]=SYNO.SDS.Strings["SYNO.SDS.CSTN.Tray.DesktopIndex.Instance"]);var t=this;return new SYNO.SDS.CSTN.Tray.DesktopIndex.Panel({module:t})},onMouseDown:function(t){var e=this.panel.getCombobox().list;if(void 0===e||!t.within(e.dom))return this.callParent(arguments)}}),Ext.define("SYNO.SDS.CSTN.Tray.DesktopIndex.Panel",{extend:"SYNO.SDS.Tray.Panel",RUNNING:"running",PAUSED:"paused",FINISHED:"finished",indexStatus:this.FINISHED,statusDelayedTask:null,numOfEvent:0,timeToResume:0,constructor:function(t){this.module=t.module,this.pauseIconCls="syno-drive-tray-item-pause",this.startIconCls="syno-drive-tray-item-indexing",this.comboboxId=Ext.id(),this.actionBtnId=Ext.id(),this.statusInfoId=Ext.id(),this.statusIconId=Ext.id(),this.headerPanel=new SYNO.ux.Panel({tpl:this.getHeaderTpl(),data:this.getHeaderTplData()});var e=Ext.apply({module:t.module,cls:"syno-drive-indexing-tray",id:"syno-drive-indexing-tray-panel",title:_STR("tray","title"),width:360,autoHeight:!0,renderTo:document.body,listeners:{hide:this.myOnHide,scope:this},items:[this.headerPanel,this.getActionSectionConfig(),{xtype:"syno_panel",html:this.getDescHtml()}]},t);this.callParent([e]),SYNO.SDS.StatusNotifier.isAppHasPrivilege("SYNO.SDS.Drive.Application")&&this.startPollingTask()},getHeaderTpl:function(){return new Ext.XTemplate('<div class="status-wrap">','<div id="{statusIconId}" class="{statusIconCls}"></div>','<div class="status-info-wrap">','<div id="{statusInfoId}" class="status-info">{statusInfo}</div>','<div class="status-desc">{statusDesc}</div>',"</div>","</div>")},getHeaderTplData:function(){return{statusInfo:this.getStatusInfoString(),statusIconCls:this.getStatusIconClass(),statusDesc:this.getStatusDescString(),comboboxId:this.comboboxId,statusInfoId:this.statusInfoId,statusIconId:this.statusIconId}},getStatusInfoString:function(){return this.indexStatus===this.RUNNING?_STR("tray","status_indexing"):this.indexStatus===this.PAUSED?_STR("tray","status_paused"):_STR("tray","status_complete")},getStatusIconClass:function(){var t="status-icon";return this.indexStatus===this.PAUSED?t+=" paused":this.indexStatus===this.FINISHED&&(t+=" complete"),t},getStatusDescString:function(){if(this.timeToResume>0){var t,e,s,i;return t=Math.floor(this.timeToResume/3600),e=Math.floor((this.timeToResume-3600*t)/60),s=this.timeToResume-3600*t-60*e,t>0?1==t?(i=1==e?_STR("tray","resume_in_hr_min"):_STR("tray","resume_in_hr_mins"),String.format(i,e)):(i=1==e?_STR("tray","resume_in_hrs_min"):_STR("tray","resume_in_hrs_mins"),String.format(i,t,e)):e>0?1==e?(i=1==s?_STR("tray","resume_in_min_sec"):_STR("tray","resume_in_min_secs"),String.format(i,s)):(i=1==s?_STR("tray","resume_in_mins_sec"):_STR("tray","resume_in_mins_secs"),String.format(i,e,s)):(i=1==s?_STR("tray","resume_in_sec"):_STR("tray","resume_in_secs"),String.format(i,s))}return 1==this.numOfEvent?_STR("tray","file_remaining"):this.numOfEvent>1?String.format(_STR("tray","files_remaining"),this.numOfEvent):_STR("tray","index_done")},getActionSectionConfig:function(){var t=new Ext.data.ArrayStore({fields:["value","display"],data:[[1,String.format(_STR("tray","delay_option"),1)],[3,String.format(_STR("tray","delay_option_hours"),3)],[6,String.format(_STR("tray","delay_option_hours"),6)]]});return{xtype:"syno_panel",layout:"hbox",height:28,layoutConfig:{align:"stretch"},items:[{xtype:"syno_combobox",id:this.comboboxId,displayField:"display",valueField:"value",cls:"pause-duration-combobox",triggerClass:"pause-duration-combobox-trigger",value:1,store:t,width:290,height:28,margins:"0 6px 0 16px"},{xtype:"syno_button",id:this.actionBtnId,weight:30,cls:"pause-action-btn",enableToggle:!0,toggleHandler:this.onActionBtnToggle,scope:this}]}},onActionBtnToggle:function(t,e){t.disable(),e?this.sendPauseReq():this.sendResumeReq()},getDescHtml:function(){return'<div class="note-wrap normal-font"><div ><span class="note-font">'+_T("common","note")+_T("common","colon")+" </span>"+_STR("tray","note_desc")+"</div></div>"},getActionBtn:function(){return Ext.getCmp(this.actionBtnId)},getStatusInfo:function(){return Ext.fly(this.statusInfoId)},getStatusIcon:function(){return Ext.fly(this.statusIconId)},getCombobox:function(){return Ext.getCmp(this.comboboxId)},textAnimate:function(t,e){var s=this.getStatusInfo();if(s){var i=s.dom;switch(e){case 1:i.innerHTML=t+".&nbsp;&nbsp;";break;case 2:i.innerHTML=t+"..&nbsp;";break;case 3:i.innerHTML=t+"...";break;default:i.innerHTML=t+"&nbsp;&nbsp;&nbsp;"}this.indexStatus===this.RUNNING&&this.statusDelayedTask.delay(500,null,this,[t,(e+1)%4])}},toIndexing:function(){this.RUNNING!==this.indexStatus&&(this.statusDelayedTask||(this.statusDelayedTask=new Ext.util.DelayedTask(this.textAnimate,this)),this.statusDelayedTask.delay(0,null,this,[_STR("tray","status_indexing"),0]),this.getCombobox().enable(),this.getActionBtn().enable(),this.module.setIconClass(this.startIconCls),this.module.setTitle(_STR("tray","badge_indexing")),this.indexStatus=this.RUNNING,this.items.items[1].show(),this.items.items[2].show())},toPause:function(){this.FINISHED!==this.indexStatus&&(this.statusDelayedTask&&this.statusDelayedTask.cancel(),this.getCombobox().disable(),this.getActionBtn().toggle(!0,!0),this.getActionBtn().setTooltip(_STR("tray","action_resume_indexing")),this.getActionBtn().enable(),this.module.setTitle(_STR("tray","badge_pause")),this.module.setIconClass(this.pauseIconCls),this.indexStatus=this.PAUSED,this.items.items[1].show(),this.items.items[2].show())},toComplete:function(){this.module.setTitle(_STR("tray","badge_complete")),this.getActionBtn().disable(),this.getCombobox().disable(),this.items.items[1].hide(),this.items.items[2].hide()},startPollingTask:function(){this.pollingTask=this.addWebAPITask({api:"SYNO.SynologyDrive.Index",method:"get_native_client_status",version:1,scope:this,callback:function(t,e,s,i){if(!t)return void(160===e.code&&this.pollingTask.stop());this.onPollingResult(e)},interval:5e3}),this.pollingTask.start(!0),this.module.show()},onPollingResult:function(t){t&&void 0!==t.num_of_event&&(this.numOfEvent=t.num_of_event),t&&void 0!==t.time_to_resume&&(this.timeToResume=t.time_to_resume),t.time_to_resume>0?(this.module.setTaskButtonVisible(!0),this.toPause(),this.updateTemplate()):0==t.num_of_event&&t.time_to_resume<=0?(this.indexStatus=this.FINISHED,this.statusDelayedTask&&this.statusDelayedTask.cancel(),this.toComplete(),this.updateTemplate(),!1===this.isVisible()&&this.onClose()):(this.module.setTaskButtonVisible(!0),this.getActionBtn().toggle(!1,!0),this.getActionBtn().setTooltip(_STR("tray","action_pause_indexing")),this.toIndexing(),this.updateTemplate())},onClose:function(){this.FINISHED===this.indexStatus&&(this.module.setTaskButtonVisible(!1),this.module.onClose())},myOnHide:function(){this.FINISHED===this.indexStatus&&this.module.setTaskButtonVisible(!1),this.module.onClose()},updateTemplate:function(){this.headerPanel.update(this.getHeaderTplData())},sendPauseReq:function(){var t=3600*this.getCombobox().getValue();this.sendWebAPI({api:"SYNO.SynologyDrive.Index",method:"set_native_client_index_pause",version:1,params:{pause_duration:t},scope:this,callback:function(e){this.getActionBtn().enable(),e&&(this.timeToResume=t,this.toPause(),this.updateTemplate())}})},sendResumeReq:function(){this.sendWebAPI({api:"SYNO.SynologyDrive.Index",method:"set_native_client_index_pause",version:1,scope:this,params:{pause_duration:0},callback:function(t){this.getActionBtn().enable(),t&&(this.timeToResume=0,this.toIndexing(),this.updateTemplate())}})}});