|
34 | 34 | import java.util.logging.Logger;
|
35 | 35 |
|
36 | 36 | import static processing.app.I18n.tr;
|
| 37 | +import static processing.app.helpers.filefilters.OnlyDirs.ONLY_DIRS; |
37 | 38 |
|
38 | 39 | public class BaseNoGui {
|
39 | 40 |
|
@@ -674,32 +675,67 @@ static public boolean isSanitaryName(String name) {
|
674 | 675 | }
|
675 | 676 |
|
676 | 677 | static protected void loadHardware(File folder) {
|
677 |
| - if (!folder.isDirectory()) return; |
| 678 | + if (!folder.isDirectory()) { |
| 679 | + return; |
| 680 | + } |
678 | 681 |
|
679 | 682 | String list[] = folder.list(new OnlyDirs());
|
680 | 683 |
|
681 | 684 | // if a bad folder or something like that, this might come back null
|
682 |
| - if (list == null) return; |
| 685 | + if (list == null) { |
| 686 | + return; |
| 687 | + } |
683 | 688 |
|
684 | 689 | // alphabetize list, since it's not always alpha order
|
685 | 690 | // replaced hella slow bubble sort with this feller for 0093
|
686 | 691 | Arrays.sort(list, String.CASE_INSENSITIVE_ORDER);
|
687 | 692 |
|
688 | 693 | for (String target : list) {
|
689 | 694 | // Skip reserved 'tools' folder.
|
690 |
| - if (target.equals("tools")) |
| 695 | + if (target.equals("tools")) { |
691 | 696 | continue;
|
| 697 | + } |
692 | 698 | File subfolder = new File(folder, target);
|
693 |
| - |
| 699 | + |
| 700 | + TargetPackage targetPackage; |
| 701 | + if (packages.containsKey(target)) { |
| 702 | + targetPackage = packages.get(target); |
| 703 | + } else { |
| 704 | + targetPackage = new LegacyTargetPackage(target); |
| 705 | + } |
694 | 706 | try {
|
695 |
| - packages.put(target, new LegacyTargetPackage(target, subfolder)); |
| 707 | + loadTargetPackage(targetPackage, subfolder); |
696 | 708 | } catch (TargetPlatformException e) {
|
697 | 709 | System.out.println("WARNING: Error loading hardware folder " + new File(folder, target));
|
698 | 710 | System.out.println(" " + e.getMessage());
|
699 | 711 | }
|
700 | 712 | }
|
701 | 713 | }
|
702 | 714 |
|
| 715 | + private static void loadTargetPackage(TargetPackage targetPackage, File _folder) throws TargetPlatformException { |
| 716 | + File[] folders = _folder.listFiles(ONLY_DIRS); |
| 717 | + if (folders == null) { |
| 718 | + return; |
| 719 | + } |
| 720 | + |
| 721 | + for (File subFolder : folders) { |
| 722 | + if (!subFolder.exists() || !subFolder.canRead()) { |
| 723 | + continue; |
| 724 | + } |
| 725 | + String arch = subFolder.getName(); |
| 726 | + try { |
| 727 | + TargetPlatform platform = new LegacyTargetPlatform(arch, subFolder, targetPackage); |
| 728 | + targetPackage.getPlatforms().put(arch, platform); |
| 729 | + } catch (TargetPlatformException e) { |
| 730 | + System.err.println(e.getMessage()); |
| 731 | + } |
| 732 | + } |
| 733 | + |
| 734 | + if (targetPackage.getPlatforms().size() == 0) { |
| 735 | + throw new TargetPlatformException(I18n.format(tr("No valid hardware definitions found in folder {0}."), _folder.getName())); |
| 736 | + } |
| 737 | + } |
| 738 | + |
703 | 739 | /**
|
704 | 740 | * Grab the contents of a file as a string.
|
705 | 741 | */
|
|
0 commit comments