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