@@ -483,9 +483,10 @@ export namespace Board {
483
483
manuallyInstalled : boolean ;
484
484
} > ;
485
485
export function decorateBoards (
486
- selectedBoard : BoardIdentifier | undefined ,
486
+ selectedBoard : BoardIdentifier | BoardWithPackage | undefined ,
487
487
boards : Array < BoardWithPackage >
488
488
) : Array < Detailed > {
489
+ let foundSelected = false ;
489
490
// Board names are not unique. We show the corresponding core name as a detail.
490
491
// https://github.com/arduino/arduino-cli/pull/294#issuecomment-513764948
491
492
const distinctBoardNames = new Map < string , number > ( ) ;
@@ -496,36 +497,47 @@ export namespace Board {
496
497
const selectedBoardPackageId = selectedBoard
497
498
? createPlatformIdentifier ( selectedBoard )
498
499
: undefined ;
499
- // Due to the non-unique board names, IDE2 has to check the package name.
500
- const selected = ( board : BoardWithPackage ) => {
501
- if ( ! ! selectedBoard ) {
502
- if (
503
- boardIdentifierEquals (
504
- { name : board . name , fqbn : board . fqbn } ,
505
- selectedBoard
506
- )
507
- ) {
500
+ const selectedBoardFqbn = selectedBoard ?. fqbn ;
501
+ // Due to the non-unique board names, IDE2 has to check the package name when boards are not installed and the FQBN is absent.
502
+ const isSelected = ( board : BoardWithPackage ) => {
503
+ if ( ! selectedBoard ) {
504
+ return false ;
505
+ }
506
+ if ( foundSelected ) {
507
+ return false ;
508
+ }
509
+ let selected = false ;
510
+ if ( board . fqbn && selectedBoardFqbn ) {
511
+ if ( boardIdentifierEquals ( board , selectedBoard ) ) {
512
+ selected = true ;
513
+ }
514
+ }
515
+ if ( ! selected ) {
516
+ if ( board . name === selectedBoard . name ) {
508
517
if ( selectedBoardPackageId ) {
509
- return platformIdentifierEquals (
510
- selectedBoardPackageId ,
511
- board . packageId
512
- ) ;
518
+ const boardPackageId = createPlatformIdentifier ( board ) ;
519
+ if ( boardPackageId ) {
520
+ if (
521
+ platformIdentifierEquals ( boardPackageId , selectedBoardPackageId )
522
+ ) {
523
+ selected = true ;
524
+ }
525
+ }
513
526
}
514
- if ( ! board . fqbn && board . name === selectedBoard . name ) {
515
- return true ;
516
- }
517
- return false ;
518
527
}
519
528
}
520
- return false ;
529
+ if ( selected ) {
530
+ foundSelected = true ;
531
+ }
532
+ return selected ;
521
533
} ;
522
534
return boards . map ( ( board ) => ( {
523
535
...board ,
524
536
details :
525
537
( distinctBoardNames . get ( board . name ) || 0 ) > 1
526
538
? ` - ${ board . packageName } `
527
539
: undefined ,
528
- selected : selected ( board ) ,
540
+ selected : isSelected ( board ) ,
529
541
missing : ! installed ( board ) ,
530
542
} ) ) ;
531
543
}
@@ -711,9 +723,7 @@ export function boardIdentifierEquals(
711
723
if ( left . fqbn && right . fqbn ) {
712
724
const leftFqbn = options . looseFqbn ? sanitizeFqbn ( left . fqbn ) : left . fqbn ;
713
725
const rightFqbn = options . looseFqbn ? sanitizeFqbn ( right . fqbn ) : right . fqbn ;
714
- if ( leftFqbn === rightFqbn ) {
715
- return true ;
716
- }
726
+ return leftFqbn === rightFqbn ;
717
727
}
718
728
// No more Genuino hack.
719
729
// https://github.com/arduino/arduino-ide/blob/f6a43254f5c416a2e4fa888875358336b42dd4d5/arduino-ide-extension/src/common/protocol/boards-service.ts#L572-L581
0 commit comments