@@ -173,14 +173,41 @@ func Create(req *rpc.CreateRequest, extraUserAgent ...string) (*rpc.CreateRespon
173
173
// Failures don't stop the loading process, in case of loading failure the Platform or library
174
174
// is simply skipped and an error gRPC status is sent to responseCallback.
175
175
func Init (req * rpc.InitRequest , responseCallback func (r * rpc.InitResponse )) error {
176
- if responseCallback == nil {
177
- responseCallback = func (r * rpc.InitResponse ) {}
178
- }
179
176
instance := instances [req .Instance .Id ]
180
177
if instance == nil {
181
178
return & arduino.InvalidInstanceError {}
182
179
}
183
180
181
+ // Setup callback functions
182
+ if responseCallback == nil {
183
+ responseCallback = func (r * rpc.InitResponse ) {}
184
+ }
185
+ responseError := func (st * status.Status ) {
186
+ responseCallback (& rpc.InitResponse {
187
+ Message : & rpc.InitResponse_Error {
188
+ Error : st .Proto (),
189
+ },
190
+ })
191
+ }
192
+ taskCallback := func (msg * rpc.TaskProgress ) {
193
+ responseCallback (& rpc.InitResponse {
194
+ Message : & rpc.InitResponse_InitProgress {
195
+ InitProgress : & rpc.InitResponse_Progress {
196
+ TaskProgress : msg ,
197
+ },
198
+ },
199
+ })
200
+ }
201
+ downloadCallback := func (msg * rpc.DownloadProgress ) {
202
+ responseCallback (& rpc.InitResponse {
203
+ Message : & rpc.InitResponse_InitProgress {
204
+ InitProgress : & rpc.InitResponse_Progress {
205
+ DownloadProgress : msg ,
206
+ },
207
+ },
208
+ })
209
+ }
210
+
184
211
// We need to clear the PackageManager currently in use by this instance
185
212
// in case this is not the first Init on this instances, that might happen
186
213
// after reinitializing an instance after installing or uninstalling a core.
@@ -195,11 +222,7 @@ func Init(req *rpc.InitRequest, responseCallback func(r *rpc.InitResponse)) erro
195
222
URL , err := utils .URLParse (u )
196
223
if err != nil {
197
224
s := status .Newf (codes .InvalidArgument , tr ("Invalid additional URL: %v" ), err )
198
- responseCallback (& rpc.InitResponse {
199
- Message : & rpc.InitResponse_Error {
200
- Error : s .Proto (),
201
- },
202
- })
225
+ responseError (s )
203
226
continue
204
227
}
205
228
@@ -209,22 +232,14 @@ func Init(req *rpc.InitRequest, responseCallback func(r *rpc.InitResponse)) erro
209
232
_ , err := instance .PackageManager .LoadPackageIndexFromFile (indexFile )
210
233
if err != nil {
211
234
s := status .Newf (codes .FailedPrecondition , tr ("Loading index file: %v" ), err )
212
- responseCallback (& rpc.InitResponse {
213
- Message : & rpc.InitResponse_Error {
214
- Error : s .Proto (),
215
- },
216
- })
235
+ responseError (s )
217
236
}
218
237
continue
219
238
}
220
239
221
240
if err := instance .PackageManager .LoadPackageIndex (URL ); err != nil {
222
241
s := status .Newf (codes .FailedPrecondition , tr ("Loading index file: %v" ), err )
223
- responseCallback (& rpc.InitResponse {
224
- Message : & rpc.InitResponse_Error {
225
- Error : s .Proto (),
226
- },
227
- })
242
+ responseError (s )
228
243
}
229
244
}
230
245
@@ -233,31 +248,7 @@ func Init(req *rpc.InitRequest, responseCallback func(r *rpc.InitResponse)) erro
233
248
// and they would never get reloaded.
234
249
for _ , err := range instance .PackageManager .LoadHardware () {
235
250
s := & arduino.PlatformLoadingError {Cause : err }
236
- responseCallback (& rpc.InitResponse {
237
- Message : & rpc.InitResponse_Error {
238
- Error : s .ToRPCStatus ().Proto (),
239
- },
240
- })
241
- }
242
-
243
- taskCallback := func (msg * rpc.TaskProgress ) {
244
- responseCallback (& rpc.InitResponse {
245
- Message : & rpc.InitResponse_InitProgress {
246
- InitProgress : & rpc.InitResponse_Progress {
247
- TaskProgress : msg ,
248
- },
249
- },
250
- })
251
- }
252
-
253
- downloadCallback := func (msg * rpc.DownloadProgress ) {
254
- responseCallback (& rpc.InitResponse {
255
- Message : & rpc.InitResponse_InitProgress {
256
- InitProgress : & rpc.InitResponse_Progress {
257
- DownloadProgress : msg ,
258
- },
259
- },
260
- })
251
+ responseError (s .ToRPCStatus ())
261
252
}
262
253
263
254
// Get builtin tools
@@ -266,11 +257,7 @@ func Init(req *rpc.InitRequest, responseCallback func(r *rpc.InitResponse)) erro
266
257
latestRelease := tool .LatestRelease ()
267
258
if latestRelease == nil {
268
259
s := status .Newf (codes .Internal , tr ("can't find latest release of tool %s" , name ))
269
- responseCallback (& rpc.InitResponse {
270
- Message : & rpc.InitResponse_Error {
271
- Error : s .Proto (),
272
- },
273
- })
260
+ responseError (s )
274
261
continue
275
262
}
276
263
builtinToolReleases = append (builtinToolReleases , latestRelease )
@@ -282,11 +269,7 @@ func Init(req *rpc.InitRequest, responseCallback func(r *rpc.InitResponse)) erro
282
269
installed , err := instance .installToolIfMissing (toolRelease , downloadCallback , taskCallback )
283
270
if err != nil {
284
271
s := status .Newf (codes .Internal , err .Error ())
285
- responseCallback (& rpc.InitResponse {
286
- Message : & rpc.InitResponse_Error {
287
- Error : s .Proto (),
288
- },
289
- })
272
+ responseError (s )
290
273
continue
291
274
}
292
275
toolsHaveBeenInstalled = toolsHaveBeenInstalled || installed
@@ -297,21 +280,13 @@ func Init(req *rpc.InitRequest, responseCallback func(r *rpc.InitResponse)) erro
297
280
// so we must reload again otherwise we would never found them.
298
281
for _ , err := range instance .PackageManager .LoadHardware () {
299
282
s := & arduino.PlatformLoadingError {Cause : err }
300
- responseCallback (& rpc.InitResponse {
301
- Message : & rpc.InitResponse_Error {
302
- Error : s .ToRPCStatus ().Proto (),
303
- },
304
- })
283
+ responseError (s .ToRPCStatus ())
305
284
}
306
285
}
307
286
308
287
for _ , err := range instance .PackageManager .LoadDiscoveries () {
309
288
s := & arduino.PlatformLoadingError {Cause : err }
310
- responseCallback (& rpc.InitResponse {
311
- Message : & rpc.InitResponse_Error {
312
- Error : s .ToRPCStatus ().Proto (),
313
- },
314
- })
289
+ responseError (s .ToRPCStatus ())
315
290
}
316
291
317
292
// Load libraries
@@ -325,20 +300,12 @@ func Init(req *rpc.InitRequest, responseCallback func(r *rpc.InitResponse)) erro
325
300
326
301
if err := instance .lm .LoadIndex (); err != nil {
327
302
s := status .Newf (codes .FailedPrecondition , tr ("Loading index file: %v" ), err )
328
- responseCallback (& rpc.InitResponse {
329
- Message : & rpc.InitResponse_Error {
330
- Error : s .Proto (),
331
- },
332
- })
303
+ responseError (s )
333
304
}
334
305
335
306
for _ , err := range instance .lm .RescanLibraries () {
336
307
s := status .Newf (codes .FailedPrecondition , tr ("Loading libraries: %v" ), err )
337
- responseCallback (& rpc.InitResponse {
338
- Message : & rpc.InitResponse_Error {
339
- Error : s .Proto (),
340
- },
341
- })
308
+ responseError (s )
342
309
}
343
310
344
311
// Refreshes the locale used, this will change the
0 commit comments