@@ -17,9 +17,9 @@ use time::{OffsetDateTime, UtcOffset};
17
17
use crate :: {
18
18
config:: { build_globset, load_project_config, ProjectUnit , ProjectUnitNode , CONFIG_FILENAMES } ,
19
19
jobs:: {
20
- check_update:: { queue_check_update , CheckUpdateResult } ,
21
- objdiff:: { queue_build , BuildStatus , ObjDiffResult } ,
22
- Job , JobResult , JobState , JobStatus ,
20
+ check_update:: { start_check_update , CheckUpdateResult } ,
21
+ objdiff:: { start_build , BuildStatus , ObjDiffResult } ,
22
+ Job , JobQueue , JobResult , JobStatus ,
23
23
} ,
24
24
views:: {
25
25
appearance:: { appearance_window, DEFAULT_COLOR_ROTATION } ,
@@ -107,7 +107,7 @@ pub struct SymbolReference {
107
107
#[ serde( default ) ]
108
108
pub struct ViewState {
109
109
#[ serde( skip) ]
110
- pub jobs : Vec < JobState > ,
110
+ pub jobs : JobQueue ,
111
111
#[ serde( skip) ]
112
112
pub build : Option < Box < ObjDiffResult > > ,
113
113
#[ serde( skip) ]
@@ -142,7 +142,7 @@ pub struct ViewState {
142
142
impl Default for ViewState {
143
143
fn default ( ) -> Self {
144
144
Self {
145
- jobs : vec ! [ ] ,
145
+ jobs : Default :: default ( ) ,
146
146
build : None ,
147
147
highlighted_symbol : None ,
148
148
selected_symbol : None ,
@@ -380,7 +380,7 @@ impl eframe::App for App {
380
380
if function_diff_ui ( ui, view_state) {
381
381
view_state
382
382
. jobs
383
- . push ( queue_build ( config. clone ( ) , view_state. diff_config . clone ( ) ) ) ;
383
+ . push ( start_build ( config. clone ( ) , view_state. diff_config . clone ( ) ) ) ;
384
384
}
385
385
} ) ;
386
386
} else if view_state. current_view == View :: DataDiff
@@ -390,7 +390,7 @@ impl eframe::App for App {
390
390
if data_diff_ui ( ui, view_state) {
391
391
view_state
392
392
. jobs
393
- . push ( queue_build ( config. clone ( ) , view_state. diff_config . clone ( ) ) ) ;
393
+ . push ( start_build ( config. clone ( ) , view_state. diff_config . clone ( ) ) ) ;
394
394
}
395
395
} ) ;
396
396
} else {
@@ -410,14 +410,7 @@ impl eframe::App for App {
410
410
411
411
// Windows + request_repaint_after breaks dialogs:
412
412
// https://github.com/emilk/egui/issues/2003
413
- if cfg ! ( windows)
414
- || view_state. jobs . iter ( ) . any ( |job| {
415
- if let Some ( handle) = & job. handle {
416
- return !handle. is_finished ( ) ;
417
- }
418
- false
419
- } )
420
- {
413
+ if cfg ! ( windows) || view_state. jobs . any_running ( ) {
421
414
ctx. request_repaint ( ) ;
422
415
} else {
423
416
ctx. request_repaint_after ( Duration :: from_millis ( 100 ) ) ;
@@ -433,14 +426,8 @@ impl eframe::App for App {
433
426
}
434
427
435
428
fn post_rendering ( & mut self , _window_size_px : [ u32 ; 2 ] , _frame : & eframe:: Frame ) {
436
- for job in & mut self . view_state . jobs {
437
- let Some ( handle) = & job. handle else {
438
- continue ;
439
- } ;
440
- if !handle. is_finished ( ) {
441
- continue ;
442
- }
443
- match job. handle . take ( ) . unwrap ( ) . join ( ) {
429
+ for ( job, result) in self . view_state . jobs . iter_finished ( ) {
430
+ match result {
444
431
Ok ( result) => {
445
432
log:: info!( "Job {} finished" , job. id) ;
446
433
match result {
@@ -496,26 +483,12 @@ impl eframe::App for App {
496
483
}
497
484
}
498
485
}
499
- if self . view_state . jobs . iter ( ) . any ( |v| v. should_remove ) {
500
- let mut i = 0 ;
501
- while i < self . view_state . jobs . len ( ) {
502
- let job = & self . view_state . jobs [ i] ;
503
- if job. should_remove
504
- && job. handle . is_none ( )
505
- && job. status . read ( ) . unwrap ( ) . error . is_none ( )
506
- {
507
- self . view_state . jobs . remove ( i) ;
508
- } else {
509
- i += 1 ;
510
- }
511
- }
512
- }
486
+ self . view_state . jobs . clear_finished ( ) ;
513
487
514
488
if let Ok ( mut config) = self . config . write ( ) {
515
489
let config = & mut * config;
516
490
517
- if self . config_modified . load ( Ordering :: Relaxed ) {
518
- self . config_modified . store ( false , Ordering :: Relaxed ) ;
491
+ if self . config_modified . swap ( false , Ordering :: Relaxed ) {
519
492
config. config_change = true ;
520
493
}
521
494
@@ -551,23 +524,17 @@ impl eframe::App for App {
551
524
}
552
525
}
553
526
554
- if config. obj_path . is_some ( ) && self . modified . load ( Ordering :: Relaxed ) {
555
- if !self
556
- . view_state
527
+ if config. obj_path . is_some ( )
528
+ && self . modified . swap ( false , Ordering :: Relaxed )
529
+ && !self . view_state . jobs . is_running ( Job :: ObjDiff )
530
+ {
531
+ self . view_state
557
532
. jobs
558
- . iter ( )
559
- . any ( |j| j. job_type == Job :: ObjDiff && j. handle . is_some ( ) )
560
- {
561
- self . view_state . jobs . push ( queue_build (
562
- self . config . clone ( ) ,
563
- self . view_state . diff_config . clone ( ) ,
564
- ) ) ;
565
- }
566
- self . modified . store ( false , Ordering :: Relaxed ) ;
533
+ . push ( start_build ( self . config . clone ( ) , self . view_state . diff_config . clone ( ) ) ) ;
567
534
}
568
535
569
536
if config. queue_update_check {
570
- self . view_state . jobs . push ( queue_check_update ( ) ) ;
537
+ self . view_state . jobs . push ( start_check_update ( ) ) ;
571
538
config. queue_update_check = false ;
572
539
}
573
540
}
0 commit comments