@@ -837,33 +837,52 @@ export class AppState {
837
837
return ;
838
838
}
839
839
840
- console . log ( `State: Removing Electron ${ version } ` ) ;
841
- if ( source === VersionSource . local ) {
842
- if ( version in this . versions ) {
843
- delete this . versions [ version ] ;
844
- saveLocalVersions ( Object . values ( this . versions ) ) ;
845
- } else {
846
- console . log ( `State: Version ${ version } already removed, doing nothing` ) ;
847
- }
848
- } else {
849
- if (
850
- state === InstallState . installed ||
851
- state == InstallState . downloaded
852
- ) {
853
- await this . installer . remove ( version ) ;
854
- if ( this . installer . state ( version ) === InstallState . missing ) {
855
- const typeDefsCleaner = async ( ) => {
856
- window . ElectronFiddle . app . electronTypes . uncache ( ver ) ;
857
- } ;
840
+ await navigator . locks . request (
841
+ this . getVersionLockName ( version ) ,
842
+ {
843
+ mode : 'exclusive' ,
844
+ ifAvailable : true ,
845
+ } ,
846
+ async ( lock ) => {
847
+ // another window is already removing this version
848
+ if ( ! lock ) {
849
+ return ;
850
+ }
858
851
859
- await typeDefsCleaner ( ) ;
852
+ console . log ( `State: Removing Electron ${ version } ` ) ;
860
853
861
- this . broadcastVersionStates ( [ ver ] ) ;
854
+ if ( source === VersionSource . local ) {
855
+ if ( version in this . versions ) {
856
+ delete this . versions [ version ] ;
857
+ saveLocalVersions ( Object . values ( this . versions ) ) ;
858
+ } else {
859
+ console . log (
860
+ `State: Version ${ version } already removed, doing nothing` ,
861
+ ) ;
862
+ }
863
+ } else {
864
+ if (
865
+ state === InstallState . installed ||
866
+ state == InstallState . downloaded
867
+ ) {
868
+ await this . installer . remove ( version ) ;
869
+ if ( this . installer . state ( version ) === InstallState . missing ) {
870
+ const typeDefsCleaner = async ( ) => {
871
+ window . ElectronFiddle . app . electronTypes . uncache ( ver ) ;
872
+ } ;
873
+
874
+ await typeDefsCleaner ( ) ;
875
+
876
+ this . broadcastVersionStates ( [ ver ] ) ;
877
+ }
878
+ } else {
879
+ console . log (
880
+ `State: Version ${ version } already removed, doing nothing` ,
881
+ ) ;
882
+ }
862
883
}
863
- } else {
864
- console . log ( `State: Version ${ version } already removed, doing nothing` ) ;
865
- }
866
- }
884
+ } ,
885
+ ) ;
867
886
}
868
887
869
888
/**
@@ -1049,8 +1068,17 @@ export class AppState {
1049
1068
}
1050
1069
}
1051
1070
1052
- // Fetch new binaries, maybe?
1053
- await this . downloadVersion ( ver ) ;
1071
+ await navigator . locks . request (
1072
+ `downloading:${ version } ` ,
1073
+ { mode : 'exclusive' } ,
1074
+ async ( lock ) => {
1075
+ console . log ( `exclusive download lock granted:` ) ;
1076
+ console . log ( lock ) ;
1077
+
1078
+ // Fetch new binaries, maybe?
1079
+ await this . downloadVersion ( ver ) ;
1080
+ } ,
1081
+ ) ;
1054
1082
}
1055
1083
1056
1084
/**
0 commit comments