@@ -128,21 +128,27 @@ downloadVectorDatabases[ ] :=
128
128
downloadVectorDatabases [ $localVectorDBDirectory , $vectorDBDownloadURLs ];
129
129
130
130
downloadVectorDatabases [ dir0_ , urls_ Association ] := Enclose [
131
- Module [ { names , sizes , dir , tasks },
131
+ Module [ { dir , lock , names , sizes , tasks },
132
132
133
- dir = ConfirmBy [ GeneralUtilities ` EnsureDirectory @ dir0 , DirectoryQ , "Directory" ];
133
+ dir = ConfirmBy [ GeneralUtilities ` EnsureDirectory @ dir0 , DirectoryQ , "Directory" ];
134
+ lock = FileNameJoin @ { dir , "download.lock" };
134
135
names = ConfirmMatch [ Keys @ urls , { __ String }, "Names" ];
135
136
sizes = ConfirmMatch [ getDownloadSize /@ Values @ urls , { __ ? Positive }, "Sizes" ];
136
137
137
138
$downloadProgress = AssociationMap [ 0 & , names ];
138
139
$progressText = "Downloading semantic search indices\[ Ellipsis]" ;
139
140
140
141
evaluateWithProgress [
141
-
142
- tasks = ConfirmMatch [ KeyValueMap [ downloadVectorDatabase @ dir , urls ], { __ TaskObject }, "Download" ];
143
- ConfirmMatch [ taskWait @ tasks , { __ TaskObject }, "TaskWait" ];
144
- $progressText = "Unpacking files\[ Ellipsis]" ;
145
- ConfirmBy [ unpackVectorDatabases @ dir , DirectoryQ , "Unpacked" ],
142
+ WithLock [
143
+ File @ lock
144
+ ,
145
+ tasks = ConfirmMatch [ KeyValueMap [ downloadVectorDatabase @ dir , urls ], { __ TaskObject }, "Download" ];
146
+ ConfirmMatch [ taskWait @ tasks , { (_ TaskObject |$Failed ).. }, "TaskWait" ];
147
+ $progressText = "Unpacking files\[ Ellipsis]" ;
148
+ ConfirmBy [ unpackVectorDatabases @ dir , DirectoryQ , "Unpacked" ]
149
+ ,
150
+ PersistenceTime -> 180
151
+ ],
146
152
147
153
< |
148
154
"Text" :> $progressText ,
@@ -205,7 +211,7 @@ unpackVectorDatabase // endDefinition;
205
211
(* ::Subsubsection::Closed:: *)
206
212
(*taskWait*)
207
213
taskWait // beginDefinition ;
208
- taskWait [ tasks_ List ] := taskWait /@ tasks ;
214
+ taskWait [ tasks_ List ] := CheckAbort [ taskWait /@ tasks , Quiet [ TaskRemove /@ tasks ], PropagateAborts -> True ] ;
209
215
taskWait [ task_ TaskObject ] := taskWait [ task , task [ "TaskStatus" ] ];
210
216
taskWait [ task_ TaskObject , "Removed" ] := task ;
211
217
taskWait [ task_ TaskObject , _ ] := TaskWait @ task ;
@@ -220,17 +226,26 @@ downloadVectorDatabase[ dir_ ] :=
220
226
downloadVectorDatabase [ dir , ## ] & ;
221
227
222
228
downloadVectorDatabase [ dir_ , name_ String , url_ String ] := Enclose [
223
- Module [ { file },
229
+ Module [ { file , tmp },
230
+
224
231
file = ConfirmBy [ FileNameJoin @ { dir , name <> ".zip" }, StringQ , "File" ];
225
- ConfirmMatch [
226
- URLDownloadSubmit [
227
- url ,
228
- file ,
229
- HandlerFunctions -> < | "TaskProgress" -> setDownloadProgress @ name |> ,
230
- HandlerFunctionsKeys -> { "ByteCountDownloaded" }
231
- ],
232
- _ TaskObject ,
233
- "Task"
232
+ tmp = file <> ".tmp" ;
233
+ Quiet [ DeleteFile /@ { file , tmp } ];
234
+
235
+ With [ { tmp = tmp , file = file },
236
+ ConfirmMatch [
237
+ URLDownloadSubmit [
238
+ url ,
239
+ tmp ,
240
+ HandlerFunctions -> < |
241
+ "TaskProgress" -> setDownloadProgress @ name ,
242
+ "TaskFinished" -> (RenameFile [ tmp , file ] & )
243
+ |> ,
244
+ HandlerFunctionsKeys -> { "ByteCountDownloaded" }
245
+ ],
246
+ _ TaskObject ,
247
+ "Task"
248
+ ]
234
249
]
235
250
] // LogChatTiming [ { "DownloadVectorDatabase" , name } ],
236
251
throwInternalFailure
0 commit comments