@@ -490,9 +490,9 @@ func UpdateLibrariesIndex(ctx context.Context, req *rpc.UpdateLibrariesIndexRequ
490490}
491491
492492// UpdateIndex FIXMEDOC
493- func UpdateIndex (ctx context.Context , req * rpc.UpdateIndexRequest , downloadCB rpc.DownloadProgressCB ) ( * rpc.UpdateIndexResponse , error ) {
493+ func UpdateIndex (ctx context.Context , req * rpc.UpdateIndexRequest , downloadCB rpc.DownloadProgressCB , downloadResultCB rpc.DownloadResultCB ) error {
494494 if instances .GetInstance (req .GetInstance ().GetId ()) == nil {
495- return nil , & arduino.InvalidInstanceError {}
495+ return & arduino.InvalidInstanceError {}
496496 }
497497
498498 indexpath := configuration .DataDir (configuration .Settings )
@@ -501,11 +501,18 @@ func UpdateIndex(ctx context.Context, req *rpc.UpdateIndexRequest, downloadCB rp
501501 if ! req .GetIgnoreCustomPackageIndexes () {
502502 urls = append (urls , configuration .Settings .GetStringSlice ("board_manager.additional_urls" )... )
503503 }
504+
505+ failed := false
504506 for _ , u := range urls {
505507 logrus .Info ("URL: " , u )
506508 URL , err := utils .URLParse (u )
507509 if err != nil {
508510 logrus .Warnf ("unable to parse additional URL: %s" , u )
511+ downloadResultCB (& rpc.DownloadResult {
512+ Url : u ,
513+ Error : fmt .Sprintf ("%s: %v" , tr ("Unable to parse URL" ), err ),
514+ })
515+ failed = true
509516 continue
510517 }
511518
@@ -514,7 +521,12 @@ func UpdateIndex(ctx context.Context, req *rpc.UpdateIndexRequest, downloadCB rp
514521 if URL .Scheme == "file" {
515522 path := paths .New (URL .Path )
516523 if _ , err := packageindex .LoadIndexNoSign (path ); err != nil {
517- return nil , & arduino.InvalidArgumentError {Message : tr ("Invalid package index in %s" , path ), Cause : err }
524+ downloadResultCB (& rpc.DownloadResult {
525+ Url : u ,
526+ Error : fmt .Sprintf ("%s: %v" , tr ("Invalid package index in %s" , path ), err ),
527+ })
528+ failed = true
529+ continue
518530 }
519531
520532 fi , _ := os .Stat (path .String ())
@@ -523,6 +535,10 @@ func UpdateIndex(ctx context.Context, req *rpc.UpdateIndexRequest, downloadCB rp
523535 TotalSize : fi .Size (),
524536 })
525537 downloadCB (& rpc.DownloadProgress {Completed : true })
538+ downloadResultCB (& rpc.DownloadResult {
539+ Url : u ,
540+ Successful : true ,
541+ })
526542 continue
527543 }
528544
@@ -534,18 +550,30 @@ func UpdateIndex(ctx context.Context, req *rpc.UpdateIndexRequest, downloadCB rp
534550 indexResource .SignatureURL .Path += ".sig"
535551 }
536552 if err := indexResource .Download (indexpath , downloadCB ); err != nil {
537- return nil , err
553+ downloadResultCB (& rpc.DownloadResult {
554+ Url : u ,
555+ Error : err .Error (),
556+ })
557+ failed = true
538558 }
559+
560+ downloadResultCB (& rpc.DownloadResult {
561+ Url : u ,
562+ Successful : true ,
563+ })
539564 }
540565
541- return & rpc.UpdateIndexResponse {}, nil
566+ if failed {
567+ return & arduino.FailedDownloadError {Message : tr ("Some indexes could not be updated." )}
568+ }
569+ return nil
542570}
543571
544572// UpdateCoreLibrariesIndex updates both Cores and Libraries indexes
545- func UpdateCoreLibrariesIndex (ctx context.Context , req * rpc.UpdateCoreLibrariesIndexRequest , downloadCB rpc.DownloadProgressCB ) error {
546- _ , err := UpdateIndex (ctx , & rpc.UpdateIndexRequest {
573+ func UpdateCoreLibrariesIndex (ctx context.Context , req * rpc.UpdateCoreLibrariesIndexRequest , downloadCB rpc.DownloadProgressCB , downloadResultCB rpc. DownloadResultCB ) error {
574+ err := UpdateIndex (ctx , & rpc.UpdateIndexRequest {
547575 Instance : req .Instance ,
548- }, downloadCB )
576+ }, downloadCB , downloadResultCB )
549577 if err != nil {
550578 return err
551579 }
0 commit comments