@@ -118,33 +118,84 @@ const initWindowsIpc = (): void => {
118118 mainWin . webContents . send ( eventName , ...args ) ;
119119 } ) ;
120120
121- // 显示进度
122- ipcMain . on ( "set-bar" , ( _event , val : number | "none" | "indeterminate" | "error" | "paused" ) => {
121+ // 进度条状态
122+ let currentProgress = - 1 ;
123+ let currentMode : "normal" | "paused" | "error" | "indeterminate" = "normal" ;
124+
125+ // 更新进度条
126+ const updateProgressBar = ( ) => {
123127 const mainWin = mainWindow . getWin ( ) ;
124128 if ( ! mainWin ) return ;
125- switch ( val ) {
126- case "none" :
127- mainWin ?. setProgressBar ( - 1 ) ;
128- break ;
129- case "indeterminate" :
130- mainWin ?. setProgressBar ( 2 , { mode : "indeterminate" } ) ;
131- break ;
132- case "error" :
133- mainWin ?. setProgressBar ( 1 , { mode : "error" } ) ;
134- break ;
135- case "paused" :
136- mainWin ?. setProgressBar ( 1 , { mode : "paused" } ) ;
137- break ;
138- default :
139- if ( typeof val === "number" ) {
140- mainWin ?. setProgressBar ( val / 100 ) ;
141- } else {
142- mainWin ?. setProgressBar ( - 1 ) ;
143- }
144- break ;
129+
130+ if ( currentProgress < 0 ) {
131+ mainWin . setProgressBar ( - 1 ) ;
132+ } else {
133+ mainWin . setProgressBar ( currentProgress , { mode : currentMode as any } ) ;
145134 }
135+ } ;
136+
137+ // 设置进度
138+ ipcMain . on ( "set-bar-progress" , ( _event , progress : number | "none" ) => {
139+ if ( progress === "none" ) {
140+ currentProgress = - 1 ;
141+ } else {
142+ currentProgress = progress / 100 ;
143+ }
144+ updateProgressBar ( ) ;
145+ } ) ;
146+
147+ // 设置模式
148+ ipcMain . on ( "set-bar-mode" , ( _event , mode : "normal" | "paused" | "error" | "indeterminate" ) => {
149+ currentMode = mode ;
150+ updateProgressBar ( ) ;
146151 } ) ;
147152
153+ // 显示进度 (兼容旧版,建议使用 set-bar-progress 和 set-bar-mode)
154+ ipcMain . on (
155+ "set-bar" ,
156+ (
157+ _event ,
158+ val :
159+ | number
160+ | "none"
161+ | "indeterminate"
162+ | "error"
163+ | "paused"
164+ | { progress : number ; mode : "normal" | "paused" | "error" | "indeterminate" } ,
165+ ) => {
166+ if ( typeof val === "object" && val !== null ) {
167+ currentProgress = val . progress / 100 ;
168+ currentMode = val . mode === "normal" ? "normal" : val . mode ;
169+ updateProgressBar ( ) ;
170+ return ;
171+ }
172+
173+ switch ( val ) {
174+ case "none" :
175+ currentProgress = - 1 ;
176+ break ;
177+ case "indeterminate" :
178+ currentProgress = 2 ; // Electron treat > 1 as indeterminate usually, but let's stick to mode
179+ currentMode = "indeterminate" ;
180+ break ;
181+ case "error" :
182+ currentMode = "error" ;
183+ break ;
184+ case "paused" :
185+ currentMode = "paused" ;
186+ break ;
187+ default :
188+ if ( typeof val === "number" ) {
189+ currentProgress = val / 100 ;
190+ } else {
191+ currentProgress = - 1 ;
192+ }
193+ break ;
194+ }
195+ updateProgressBar ( ) ;
196+ } ,
197+ ) ;
198+
148199 // 开启控制台
149200 ipcMain . on ( "open-dev-tools" , ( ) => {
150201 const mainWin = mainWindow . getWin ( ) ;
0 commit comments