From f6ca1f7b16e8449b07b99b478bf2b3b2a5bb63d8 Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Fri, 29 Nov 2019 00:28:33 +0100 Subject: [PATCH] Library manager through arduino-cli (WIP, part 1) - library index is now fetched arduino-cli - ContributedLibraries and derivatives classes have been adapted to arduino-cli structure - install/update/remove are temporary disabled - library index updated is now done trough arduino-cli - added progress wrapper Next steps: - detect installed libraries using arduino-cli - implement install/update/remove using arduino-cli --- .../filters/UpdatableLibraryPredicate.java | 13 +- ...tedLibraryComparatorWithTypePriority.java} | 8 +- .../ui/ContributedLibraryTableCellEditor.java | 26 +-- .../ui/ContributedLibraryTableCellJPanel.java | 2 +- .../ui/DropdownLibraryOfCategoryItem.java | 2 +- .../ui/DropdownLibraryOfTypeItem.java | 2 +- .../ui/LibrariesIndexTableModel.java | 52 +----- .../libraries/ui/LibraryManagerUI.java | 4 +- app/src/processing/app/Base.java | 24 +-- .../contributions/UpdatableLibraryTest.java | 82 --------- .../cc/arduino/cli/ArduinoCoreInstance.java | 5 + .../libraries/ContributedLibrary.java | 66 ++++---- .../libraries/ContributedLibraryRelease.java | 154 ++++++++++++----- .../libraries/LibrariesIndex.java | 151 ++++------------- .../libraries/LibrariesIndexer.java | 159 +++++++++--------- .../libraries/LibraryInstaller.java | 42 +++-- .../UnavailableContributedLibrary.java | 102 +---------- .../src/processing/app/BaseNoGui.java | 9 +- 18 files changed, 339 insertions(+), 564 deletions(-) rename app/src/cc/arduino/contributions/libraries/ui/{ContributedLibraryReleasesComparator.java => ContributedLibraryComparatorWithTypePriority.java} (89%) delete mode 100644 app/test/cc/arduino/contributions/UpdatableLibraryTest.java diff --git a/app/src/cc/arduino/contributions/libraries/filters/UpdatableLibraryPredicate.java b/app/src/cc/arduino/contributions/libraries/filters/UpdatableLibraryPredicate.java index de254f734..c568c9482 100644 --- a/app/src/cc/arduino/contributions/libraries/filters/UpdatableLibraryPredicate.java +++ b/app/src/cc/arduino/contributions/libraries/filters/UpdatableLibraryPredicate.java @@ -29,15 +29,14 @@ package cc.arduino.contributions.libraries.filters; -import java.util.List; import java.util.function.Predicate; -import cc.arduino.contributions.VersionComparator; +import cc.arduino.contributions.libraries.ContributedLibrary; import cc.arduino.contributions.libraries.ContributedLibraryRelease; import cc.arduino.contributions.libraries.LibrariesIndexer; import processing.app.BaseNoGui; -public class UpdatableLibraryPredicate implements Predicate { +public class UpdatableLibraryPredicate implements Predicate { LibrariesIndexer librariesIndexer; @@ -50,13 +49,11 @@ public class UpdatableLibraryPredicate implements Predicate libraries = librariesIndexer.getIndex().find(libraryName); - ContributedLibraryRelease latest = libraries.stream().reduce(VersionComparator::max).get(); + ContributedLibraryRelease latest = lib.getLatest().get(); // it must be present return !latest.isLibraryInstalled(); } } diff --git a/app/src/cc/arduino/contributions/libraries/ui/ContributedLibraryReleasesComparator.java b/app/src/cc/arduino/contributions/libraries/ui/ContributedLibraryComparatorWithTypePriority.java similarity index 89% rename from app/src/cc/arduino/contributions/libraries/ui/ContributedLibraryReleasesComparator.java rename to app/src/cc/arduino/contributions/libraries/ui/ContributedLibraryComparatorWithTypePriority.java index 380892f13..fa42401d2 100644 --- a/app/src/cc/arduino/contributions/libraries/ui/ContributedLibraryReleasesComparator.java +++ b/app/src/cc/arduino/contributions/libraries/ui/ContributedLibraryComparatorWithTypePriority.java @@ -36,18 +36,18 @@ import java.util.Arrays; import java.util.Comparator; import java.util.List; -public class ContributedLibraryReleasesComparator implements Comparator { +public class ContributedLibraryComparatorWithTypePriority implements Comparator { private final String firstType; - public ContributedLibraryReleasesComparator(String firstType) { + public ContributedLibraryComparatorWithTypePriority(String firstType) { this.firstType = firstType; } @Override public int compare(ContributedLibrary o1, ContributedLibrary o2) { - ContributedLibraryRelease lib1 = o1.getLatest(); - ContributedLibraryRelease lib2 = o2.getLatest(); + ContributedLibraryRelease lib1 = o1.getLatest().get(); + ContributedLibraryRelease lib2 = o2.getLatest().get(); List types1 = lib1.getTypes(); List types2 = lib2.getTypes(); diff --git a/app/src/cc/arduino/contributions/libraries/ui/ContributedLibraryTableCellEditor.java b/app/src/cc/arduino/contributions/libraries/ui/ContributedLibraryTableCellEditor.java index f919ad867..e91ec8930 100644 --- a/app/src/cc/arduino/contributions/libraries/ui/ContributedLibraryTableCellEditor.java +++ b/app/src/cc/arduino/contributions/libraries/ui/ContributedLibraryTableCellEditor.java @@ -33,6 +33,8 @@ import static processing.app.I18n.tr; import java.awt.Color; import java.awt.Component; +import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.LinkedList; import java.util.List; @@ -43,39 +45,39 @@ import javax.swing.JTable; import cc.arduino.contributions.DownloadableContributionVersionComparator; import cc.arduino.contributions.VersionComparator; -import cc.arduino.contributions.libraries.ContributedLibraryRelease; import cc.arduino.contributions.libraries.ContributedLibrary; +import cc.arduino.contributions.libraries.ContributedLibraryRelease; import cc.arduino.contributions.ui.InstallerTableCell; import cc.arduino.utils.ReverseComparator; @SuppressWarnings("serial") public class ContributedLibraryTableCellEditor extends InstallerTableCell { - private ContributedLibrary editorValue; + private ContributedLibrary editorLibrary; private ContributedLibraryTableCellJPanel editorCell; @Override public Object getCellEditorValue() { - return editorValue; + return editorLibrary; } @Override public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { - editorValue = (ContributedLibrary) value; + editorLibrary = (ContributedLibrary) value; editorCell = new ContributedLibraryTableCellJPanel(table, value, true); editorCell.installButton - .addActionListener(e -> onInstall(editorValue.getSelected(), - editorValue.getInstalled())); + .addActionListener(e -> onInstall(editorLibrary.getSelected().get(), + editorLibrary.getInstalled())); editorCell.downgradeButton.addActionListener(e -> { JComboBox chooser = editorCell.downgradeChooser; ContributedLibraryRelease lib = (ContributedLibraryRelease) chooser.getSelectedItem(); - onInstall(lib, editorValue.getInstalled()); + onInstall(lib, editorLibrary.getInstalled()); }); editorCell.versionToInstallChooser.addActionListener(e -> { - editorValue.select((ContributedLibraryRelease) editorCell.versionToInstallChooser.getSelectedItem()); + editorLibrary.select((ContributedLibraryRelease) editorCell.versionToInstallChooser.getSelectedItem()); if (editorCell.versionToInstallChooser.getSelectedIndex() != 0) { InstallerTableCell.dropdownSelected(true); } @@ -83,12 +85,12 @@ public class ContributedLibraryTableCellEditor extends InstallerTableCell { setEnabled(true); - final Optional mayInstalled = editorValue.getInstalled(); + final Optional mayInstalled = editorLibrary.getInstalled(); - List releases = editorValue.getReleases(); - List notInstalled = new LinkedList<>(releases); + Collection releases = editorLibrary.getReleases(); + List notInstalled = new ArrayList<>(releases); if (mayInstalled.isPresent()) { - notInstalled.remove(editorValue.getInstalled().get()); + notInstalled.remove(mayInstalled.get()); } Collections.sort(notInstalled, new ReverseComparator<>( diff --git a/app/src/cc/arduino/contributions/libraries/ui/ContributedLibraryTableCellJPanel.java b/app/src/cc/arduino/contributions/libraries/ui/ContributedLibraryTableCellJPanel.java index c822a1d00..0aa447c7f 100644 --- a/app/src/cc/arduino/contributions/libraries/ui/ContributedLibraryTableCellJPanel.java +++ b/app/src/cc/arduino/contributions/libraries/ui/ContributedLibraryTableCellJPanel.java @@ -125,7 +125,7 @@ public class ContributedLibraryTableCellJPanel extends JPanel { if (releases == null) return; - ContributedLibraryRelease selected = releases.getSelected(); + ContributedLibraryRelease selected = releases.getSelected().get(); titledBorder.setTitle(selected.getName()); Optional mayInstalled = releases.getInstalled(); diff --git a/app/src/cc/arduino/contributions/libraries/ui/DropdownLibraryOfCategoryItem.java b/app/src/cc/arduino/contributions/libraries/ui/DropdownLibraryOfCategoryItem.java index b980b360f..ba607b429 100644 --- a/app/src/cc/arduino/contributions/libraries/ui/DropdownLibraryOfCategoryItem.java +++ b/app/src/cc/arduino/contributions/libraries/ui/DropdownLibraryOfCategoryItem.java @@ -54,7 +54,7 @@ public class DropdownLibraryOfCategoryItem implements DropdownItem() { @Override public boolean test(ContributedLibrary rel) { - ContributedLibraryRelease lib = rel.getLatest(); + ContributedLibraryRelease lib = rel.getLatest().get(); return category.equals(lib.getCategory()); } }; diff --git a/app/src/cc/arduino/contributions/libraries/ui/DropdownLibraryOfTypeItem.java b/app/src/cc/arduino/contributions/libraries/ui/DropdownLibraryOfTypeItem.java index 2b9b0644f..d99ef71a9 100644 --- a/app/src/cc/arduino/contributions/libraries/ui/DropdownLibraryOfTypeItem.java +++ b/app/src/cc/arduino/contributions/libraries/ui/DropdownLibraryOfTypeItem.java @@ -54,7 +54,7 @@ public class DropdownLibraryOfTypeItem implements DropdownItem() { @Override public boolean test(ContributedLibrary lib) { - List types = lib.getLatest().getTypes(); + List types = lib.getLatest().get().getTypes(); return types != null && types.contains(type); } }; diff --git a/app/src/cc/arduino/contributions/libraries/ui/LibrariesIndexTableModel.java b/app/src/cc/arduino/contributions/libraries/ui/LibrariesIndexTableModel.java index 60020a054..096ce6c30 100644 --- a/app/src/cc/arduino/contributions/libraries/ui/LibrariesIndexTableModel.java +++ b/app/src/cc/arduino/contributions/libraries/ui/LibrariesIndexTableModel.java @@ -36,6 +36,7 @@ import cc.arduino.contributions.ui.FilteredAbstractTableModel; import processing.app.BaseNoGui; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.function.Predicate; @@ -131,7 +132,7 @@ public class LibrariesIndexTableModel } public ContributedLibraryRelease getSelectedRelease(int row) { - return contributions.get(row).getSelected(); + return contributions.get(row).getSelected().get(); } public void update() { @@ -144,7 +145,7 @@ public class LibrariesIndexTableModel return false; } - ContributedLibraryRelease latest = lib.getLatest(); + ContributedLibraryRelease latest = lib.getLatest().get(); String compoundTargetSearchText = latest.getName() + " " + latest.getParagraph() + " " + latest.getSentence(); @@ -158,55 +159,12 @@ public class LibrariesIndexTableModel return true; } - public void updateLibrary(ContributedLibraryRelease lib) { - // Find the row interested in the change - int row = -1; - for (ContributedLibrary releases : contributions) { - if (releases.shouldContain(lib)) - row = contributions.indexOf(releases); - } - - updateContributions(); - - // If the library is found in the list send update event - // or insert event on the specific row... - for (ContributedLibrary releases : contributions) { - if (releases.shouldContain(lib)) { - if (row == -1) { - row = contributions.indexOf(releases); - fireTableRowsInserted(row, row); - } else { - fireTableRowsUpdated(row, row); - } - return; - } - } - // ...otherwise send a row deleted event - fireTableRowsDeleted(row, row); - } - - private List rebuildContributionsFromIndex() { - List res = new ArrayList<>(); - BaseNoGui.librariesIndexer.getIndex().getLibraries(). // - forEach(lib -> { - for (ContributedLibrary contribution : res) { - if (!contribution.shouldContain(lib)) - continue; - contribution.add(lib); - return; - } - - res.add(new ContributedLibrary(lib)); - }); - return res; - } - private void updateContributions() { - List all = rebuildContributionsFromIndex(); + Collection all = BaseNoGui.librariesIndexer.getIndex().getLibraries(); contributions.clear(); all.stream().filter(this::filterCondition).forEach(contributions::add); Collections.sort(contributions, - new ContributedLibraryReleasesComparator("Arduino")); + new ContributedLibraryComparatorWithTypePriority("Arduino")); } } diff --git a/app/src/cc/arduino/contributions/libraries/ui/LibraryManagerUI.java b/app/src/cc/arduino/contributions/libraries/ui/LibraryManagerUI.java index 2ddbe1ada..ac5cb27e0 100644 --- a/app/src/cc/arduino/contributions/libraries/ui/LibraryManagerUI.java +++ b/app/src/cc/arduino/contributions/libraries/ui/LibraryManagerUI.java @@ -200,7 +200,7 @@ public class LibraryManagerUI extends InstallerJDialog { installerThread = new Thread(() -> { try { setProgressVisible(true, ""); - installer.updateIndex(this::setProgress); + BaseNoGui.getArduinoCoreService().updateLibrariesIndex(this::setProgress); onIndexesUpdated(); if (contribTable.getCellEditor() != null) { contribTable.getCellEditor().stopCellEditing(); @@ -218,7 +218,7 @@ public class LibraryManagerUI extends InstallerJDialog { } public void onInstallPressed(final ContributedLibraryRelease lib) { - List deps = BaseNoGui.librariesIndexer.getIndex().resolveDependeciesOf(lib); + List deps = BaseNoGui.getArduinoCoreService().libraryResolveDependecies(lib); boolean depsInstalled = deps.stream().allMatch(l -> l.getInstalledLibrary().isPresent() || l.getName().equals(lib.getName())); Result installDeps; if (!depsInstalled) { diff --git a/app/src/processing/app/Base.java b/app/src/processing/app/Base.java index a6f73bec8..ebb47edb5 100644 --- a/app/src/processing/app/Base.java +++ b/app/src/processing/app/Base.java @@ -27,6 +27,7 @@ import cc.arduino.Constants; import cc.arduino.UpdatableBoardsLibsFakeURLsHandler; import cc.arduino.UploaderUtils; import cc.arduino.contributions.*; +import cc.arduino.contributions.libraries.ContributedLibrary; import cc.arduino.contributions.libraries.ContributedLibraryRelease; import cc.arduino.contributions.libraries.LibrariesIndexer; import cc.arduino.contributions.libraries.LibraryInstaller; @@ -298,7 +299,7 @@ public class Base { final GPGDetachedSignatureVerifier gpgDetachedSignatureVerifier = new GPGDetachedSignatureVerifier(); contributionInstaller = new ContributionInstaller(BaseNoGui.getPlatform(), gpgDetachedSignatureVerifier); - libraryInstaller = new LibraryInstaller(BaseNoGui.getPlatform(), gpgDetachedSignatureVerifier); + libraryInstaller = new LibraryInstaller(BaseNoGui.getPlatform()); parser.parseArgumentsPhase2(); @@ -358,15 +359,15 @@ public class Base { BaseNoGui.onBoardOrPortChange(); ProgressListener progressListener = new ConsoleProgressListener(); - libraryInstaller.updateIndex(progressListener); + BaseNoGui.getArduinoCoreService().updateLibrariesIndex(progressListener); - LibrariesIndexer indexer = new LibrariesIndexer(BaseNoGui.getSettingsFolder()); - indexer.parseIndex(); + LibrariesIndexer indexer = new LibrariesIndexer(BaseNoGui.getArduinoCoreService()); + indexer.regenerateIndex(); indexer.setLibrariesFolders(BaseNoGui.getLibrariesFolders()); indexer.rescanLibraries(); - for (String library : parser.getLibraryToInstall().split(",")) { - String[] libraryToInstallParts = library.split(":"); + for (String libraryArg : parser.getLibraryToInstall().split(",")) { + String[] libraryToInstallParts = libraryArg.split(":"); ContributedLibraryRelease selected = null; if (libraryToInstallParts.length == 2) { @@ -375,12 +376,11 @@ public class Base { System.out.println(format(tr("Invalid version {0}"), libraryToInstallParts[1])); System.exit(1); } - selected = indexer.getIndex().find(libraryToInstallParts[0], version.get().toString()); + selected = indexer.getIndex().find(libraryToInstallParts[0], version.get().toString()).orElse(null); } else if (libraryToInstallParts.length == 1) { - List librariesByName = indexer.getIndex().find(libraryToInstallParts[0]); - Collections.sort(librariesByName, new DownloadableContributionVersionComparator()); - if (!librariesByName.isEmpty()) { - selected = librariesByName.get(librariesByName.size() - 1); + ContributedLibrary library = indexer.getIndex().find(libraryToInstallParts[0]).orElse(null); + if (library != null) { + selected = library.getLatest().orElse(null); } } if (selected == null) { @@ -392,7 +392,7 @@ public class Base { if (mayInstalled.isPresent() && selected.isIDEBuiltIn()) { System.out.println(tr(I18n .format("Library {0} is available as built-in in the IDE.\nRemoving the other version {1} installed in the sketchbook...", - library, mayInstalled.get().getParsedVersion()))); + libraryArg, mayInstalled.get().getParsedVersion()))); libraryInstaller.remove(mayInstalled.get(), progressListener); } else { libraryInstaller.install(selected, progressListener); diff --git a/app/test/cc/arduino/contributions/UpdatableLibraryTest.java b/app/test/cc/arduino/contributions/UpdatableLibraryTest.java deleted file mode 100644 index f2434bb4f..000000000 --- a/app/test/cc/arduino/contributions/UpdatableLibraryTest.java +++ /dev/null @@ -1,82 +0,0 @@ -package cc.arduino.contributions; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -import org.junit.Test; - -import cc.arduino.contributions.libraries.ContributedLibraryRelease; -import cc.arduino.contributions.libraries.LibrariesIndexer; -import processing.app.BaseNoGui; -import processing.app.packages.UserLibraryFolder; -import processing.app.packages.UserLibraryFolder.Location; - -public class UpdatableLibraryTest { - - File testdata = new File( - UpdatableLibraryTest.class.getResource("/").getFile(), - "../testdata/libraries"); - File index_SD_only = new File(testdata, "index_SD_only"); - File SD111 = new File(testdata, "SD_1.1.1"); - File SD121 = new File(testdata, "SD_1.2.1"); - File index_Bridge_only = new File(testdata, "index_Bridge_only"); - File Bridge163 = new File(testdata, "Bridge_1.6.3"); - File Bridge170 = new File(testdata, "Bridge_1.7.0"); - - @Test - public void testUpdatableLibrary() throws Exception { - List folders = new ArrayList<>(); - folders.add(new UserLibraryFolder(SD111, Location.IDE_BUILTIN)); - - LibrariesIndexer indexer = new LibrariesIndexer(index_SD_only); - BaseNoGui.librariesIndexer = indexer; - indexer.parseIndex(); - indexer.setLibrariesFoldersAndRescan(folders); - - ContributedLibraryRelease sdLib = indexer.getIndex().getInstalled("SD").get(); - assertTrue("SD lib is installed", sdLib.isLibraryInstalled()); - assertEquals("SD installed version", "1.1.1", sdLib.getParsedVersion()); - - assertTrue(ContributionsSelfCheck.checkForUpdatableLibraries()); - - folders.add(new UserLibraryFolder(SD121, Location.SKETCHBOOK)); - indexer.setLibrariesFoldersAndRescan(folders); - - sdLib = indexer.getIndex().getInstalled("SD").get(); - assertTrue("SD lib is installed", sdLib.isLibraryInstalled()); - assertEquals("SD installed version", "1.2.1", sdLib.getParsedVersion()); - - assertFalse(ContributionsSelfCheck.checkForUpdatableLibraries()); - } - - @Test - public void testUpdatableLibraryWithBundled() throws Exception { - List folders = new ArrayList<>(); - folders.add(new UserLibraryFolder(Bridge163, Location.IDE_BUILTIN)); - - LibrariesIndexer indexer = new LibrariesIndexer(index_Bridge_only); - BaseNoGui.librariesIndexer = indexer; - indexer.parseIndex(); - indexer.setLibrariesFoldersAndRescan(folders); - - ContributedLibraryRelease l = indexer.getIndex().getInstalled("Bridge").get(); - assertTrue("Bridge lib is installed", l.isLibraryInstalled()); - assertEquals("Bridge installed version", "1.6.3", l.getParsedVersion()); - - assertTrue(ContributionsSelfCheck.checkForUpdatableLibraries()); - - folders.add(new UserLibraryFolder(Bridge170, Location.SKETCHBOOK)); - indexer.setLibrariesFoldersAndRescan(folders); - - l = indexer.getIndex().getInstalled("Bridge").get(); - assertTrue("Bridge lib is installed", l.isLibraryInstalled()); - assertEquals("Bridge installed version", "1.7.0", l.getParsedVersion()); - - assertFalse(ContributionsSelfCheck.checkForUpdatableLibraries()); - } -} diff --git a/arduino-core/src/cc/arduino/cli/ArduinoCoreInstance.java b/arduino-core/src/cc/arduino/cli/ArduinoCoreInstance.java index 3f5722477..c45d3c61b 100644 --- a/arduino-core/src/cc/arduino/cli/ArduinoCoreInstance.java +++ b/arduino-core/src/cc/arduino/cli/ArduinoCoreInstance.java @@ -151,4 +151,9 @@ public class ArduinoCoreInstance { throw e.getStatus().asException(); } } + + public List libraryResolveDependecies(ContributedLibraryRelease lib) { + return new ArrayList<>(); + } + } diff --git a/arduino-core/src/cc/arduino/contributions/libraries/ContributedLibrary.java b/arduino-core/src/cc/arduino/contributions/libraries/ContributedLibrary.java index 3dd5f8fd9..0c1638b3c 100644 --- a/arduino-core/src/cc/arduino/contributions/libraries/ContributedLibrary.java +++ b/arduino-core/src/cc/arduino/contributions/libraries/ContributedLibrary.java @@ -29,56 +29,52 @@ package cc.arduino.contributions.libraries; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + import cc.arduino.contributions.VersionComparator; import processing.app.packages.UserLibraryFolder.Location; -import java.util.LinkedList; -import java.util.List; -import java.util.Optional; - public class ContributedLibrary { - private List releases = new LinkedList<>(); - private List versions = new LinkedList<>(); - private ContributedLibraryRelease latest = null; - private ContributedLibraryRelease selected = null; + private String name; + // version -> release map + private Map releases = new HashMap<>(); + private Optional latest = Optional.empty(); + private Optional selected = Optional.empty(); - public ContributedLibrary(ContributedLibraryRelease release) { - add(release); + public ContributedLibrary(String name) { + this.name = name; } - public ContributedLibrary(List releases) { - releases.forEach(this::add); + public String getName() { + return name; } - public List getReleases() { - return releases; + public Collection getReleases() { + return releases.values(); } - public boolean shouldContain(ContributedLibraryRelease release) { - if (latest == null) { - return true; + public Optional getVersion(String version) { + return Optional.ofNullable(releases.get(version)); + } + + public void addRelease(ContributedLibraryRelease release) { + if (!latest.isPresent()) { + latest = Optional.of(release); } - return release.getName().equals(latest.getName()); - } - - public void add(ContributedLibraryRelease release) { - if (latest == null) { - latest = release; - } - releases.add(release); String version = release.getParsedVersion(); - if (version != null) { - versions.add(version); - } - if (VersionComparator.greaterThan(version, latest.getParsedVersion())) { - latest = release; + releases.put(version, release); + if (VersionComparator.greaterThan(version, latest.get().getParsedVersion())) { + latest = Optional.of(release); } selected = latest; } public Optional getInstalled() { - return releases.stream() // + return releases.values().stream() // .filter(ContributedLibraryRelease::isLibraryInstalled) // .reduce((x, y) -> { Location lx = x.getInstalledLibrary().get().getLocation(); @@ -90,18 +86,18 @@ public class ContributedLibrary { }); } - public ContributedLibraryRelease getLatest() { + public Optional getLatest() { return latest; } - public ContributedLibraryRelease getSelected() { + public Optional getSelected() { return selected; } public void select(ContributedLibraryRelease lib) { - for (ContributedLibraryRelease r : releases) { + for (ContributedLibraryRelease r : releases.values()) { if (r == lib) { - selected = r; + selected = Optional.of(r); return; } } diff --git a/arduino-core/src/cc/arduino/contributions/libraries/ContributedLibraryRelease.java b/arduino-core/src/cc/arduino/contributions/libraries/ContributedLibraryRelease.java index 719edd1f5..aff62abd8 100644 --- a/arduino-core/src/cc/arduino/contributions/libraries/ContributedLibraryRelease.java +++ b/arduino-core/src/cc/arduino/contributions/libraries/ContributedLibraryRelease.java @@ -35,7 +35,6 @@ import processing.app.packages.UserLibrary; import static processing.app.I18n.tr; import java.util.Comparator; -import java.util.ArrayList; import java.util.List; import java.util.Optional; @@ -43,61 +42,136 @@ import cc.arduino.contributions.VersionHelper; public class ContributedLibraryRelease extends DownloadableContribution { - private String url; - private String version; - private String checksum; - private long size; - private String archiveFileName; - private String name; - private String maintainer; - private String author; - private String website; - private String category; - private String licence; - private String paragraph; - private String sentence; - private ArrayList architectures; - private ArrayList types; - private ArrayList dependencies; - private ArrayList providesIncludes; + final private ContributedLibrary library; + final private String maintainer; + final private String author; + final private String website; + final private String category; + final private String license; + final private String paragraph; + final private String sentence; + final private List architectures; + final private List types; + final private List dependencies; + final private List providesIncludes; - public String getUrl() { return url; } + public ContributedLibraryRelease(ContributedLibrary library, + String maintainer, String author, + String website, String category, + String license, String paragraph, + String sentence, List architectures, + List types, + List dependencies, + List providesIncludes, // + // + String url, String version, String checksum, + long size, String archiveFileName) { + this.library = library; + this.maintainer = maintainer; + this.author = author; + this.website = website; + this.category = category; + this.license = license; + this.paragraph = paragraph; + this.sentence = sentence; + this.architectures = architectures; + this.types = types; + this.dependencies = dependencies; + this.providesIncludes = providesIncludes; - public String getVersion() { return version; } + this.url = url; + this.version = version; + this.checksum = checksum; + this.size = size; + this.archiveFileName = archiveFileName; + } - public String getChecksum() { return checksum; } + public ContributedLibrary getLibrary() { + return library; + } - public long getSize() { return size; } + public String getName() { + return library.getName(); + } - public String getArchiveFileName() { return archiveFileName; } + public String getMaintainer() { + return maintainer; + } - public String getName() { return name; } + public String getAuthor() { + return author; + } - public String getMaintainer() { return maintainer; } + public String getWebsite() { + return website; + } - public String getAuthor() { return author; } + public String getCategory() { + return category; + } - public String getWebsite() { return website; } + public String getLicense() { + return license; + } - public String getCategory() { return category; } + public String getParagraph() { + return paragraph; + } - public void setCategory(String category) { this.category = category; } + public String getSentence() { + return sentence; + } - public String getLicense() { return licence; } + public List getArchitectures() { + return architectures; + } - public String getParagraph() { return paragraph; } + public List getTypes() { + return types; + } - public String getSentence() { return sentence; } + public List getDependencies() { + return dependencies; + } - public List getArchitectures() { return architectures; } + public List getProvidesIncludes() { + return providesIncludes; + } - public List getTypes() { return types; } + // Implementation of DownloadableResource + final private String url; + final private String version; + final private String checksum; + final private long size; + final private String archiveFileName; - public List getDependencies() { return dependencies; } + @Override + public String getUrl() { + return url; + } - public List getProvidesIncludes() { return providesIncludes; } + @Override + public String getVersion() { + return version; + } - public static final Comparator CASE_INSENSITIVE_ORDER = (o1, o2) -> o1.getName().compareToIgnoreCase(o2.getName()); + @Override + public String getChecksum() { + return checksum; + } + + @Override + public long getSize() { + return size; + } + + @Override + public String getArchiveFileName() { + return archiveFileName; + } + public static final Comparator // + CASE_INSENSITIVE_ORDER = (o1, o2) -> o1.getName() + .compareToIgnoreCase(o2.getName()); private Optional installedLib = Optional.empty(); @@ -132,14 +206,16 @@ public class ContributedLibraryRelease extends DownloadableContribution { * @return */ public boolean supportsArchitecture(String reqArch) { - return getArchitectures().contains(reqArch) || getArchitectures().contains("*"); + return getArchitectures().contains(reqArch) + || getArchitectures().contains("*"); } /** * Returns true if the library declares to support at least one of the * specified architectures. * - * @param reqArchs A List of architectures to check + * @param reqArchs + * A List of architectures to check * @return */ public boolean supportsArchitecture(List reqArchs) { diff --git a/arduino-core/src/cc/arduino/contributions/libraries/LibrariesIndex.java b/arduino-core/src/cc/arduino/contributions/libraries/LibrariesIndex.java index 39aef62bd..66358ebd1 100644 --- a/arduino-core/src/cc/arduino/contributions/libraries/LibrariesIndex.java +++ b/arduino-core/src/cc/arduino/contributions/libraries/LibrariesIndex.java @@ -32,151 +32,60 @@ package cc.arduino.contributions.libraries; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.HashMap; import java.util.HashSet; -import java.util.LinkedList; import java.util.List; +import java.util.Map; import java.util.Optional; -import java.util.stream.Collectors; - -import cc.arduino.contributions.VersionComparator; +import java.util.Set; public class LibrariesIndex { - private ArrayList list = new ArrayList<>(); + // name -> library map + private Map libraries = new HashMap<>(); + private Set categories = new HashSet<>(); + private Set types = new HashSet<>(); - public List getLibraries() { - return list; + public Collection getLibraries() { + return libraries.values(); } - public List find(final String name) { - return getLibraries().stream() // - .filter(l -> name.equals(l.getName())) // - .collect(Collectors.toList()); + public void add(ContributedLibrary library) { + libraries.put(library.getName(), library); + library.getReleases().forEach(rel -> { + categories.add(rel.getCategory()); + types.addAll(rel.getTypes()); + }); } - public ContributedLibraryRelease find(String name, String version) { - if (name == null || version == null) { - return null; - } - for (ContributedLibraryRelease lib : find(name)) { - if (version.equals(lib.getParsedVersion())) { - return lib; - } - } - return null; + public Optional find(String name) { + return Optional.ofNullable(libraries.get(name)); } - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - for (ContributedLibraryRelease library : getLibraries()) { - sb.append(library.toString()); + public Optional find(String name, String version) { + if (libraries.containsKey(name)) { + return libraries.get(name).getVersion(version); } - return sb.toString(); + return Optional.empty(); } public List getCategories() { - List categories = new LinkedList<>(); - for (ContributedLibraryRelease lib : getLibraries()) { - if (lib.getCategory() != null && !categories.contains(lib.getCategory())) { - categories.add(lib.getCategory()); - } - } - Collections.sort(categories); - - return categories; + List res = new ArrayList<>(categories); + Collections.sort(res); + return res; } public List getTypes() { - Collection typesAccumulator = new HashSet<>(); - for (ContributedLibraryRelease lib : getLibraries()) { - if (lib.getTypes() != null) { - typesAccumulator.addAll(lib.getTypes()); - } - } - - List types = new LinkedList<>(typesAccumulator); - Collections.sort(types); - - return types; + List res = new ArrayList<>(types); + Collections.sort(res); + return res; } public Optional getInstalled(String name) { - ContributedLibrary rel = new ContributedLibrary(find(name)); - return rel.getInstalled(); - } - - public List resolveDependeciesOf(ContributedLibraryRelease library) { - List solution = new ArrayList<>(); - solution.add(library); - if (resolveDependeciesOf(solution, library)) { - return solution; - } else { - return null; + if (libraries.containsKey(name)) { + return libraries.get(name).getInstalled(); } + return Optional.empty(); } - public boolean resolveDependeciesOf(List solution, - ContributedLibraryRelease library) { - List requirements = library.getDependencies(); - if (requirements == null) { - // No deps for this library, great! - return true; - } - - for (ContributedLibraryDependency dep : requirements) { - - // If the current solution already contains this dependency, skip over - boolean alreadyInSolution = solution.stream() - .anyMatch(l -> l.getName().equals(dep.getName())); - if (alreadyInSolution) - continue; - - // Generate possible matching dependencies - List possibleDeps = findMatchingDependencies(dep); - - // If there are no dependencies available add as "missing" lib - if (possibleDeps.isEmpty()) { - solution.add(new UnavailableContributedLibrary(dep)); - continue; - } - - // Pick the installed version if available - ContributedLibraryRelease selected; - Optional installed = possibleDeps.stream() - .filter(l -> l.getInstalledLibrary().isPresent()).findAny(); - if (installed.isPresent()) { - selected = installed.get(); - } else { - // otherwise pick the latest version - selected = possibleDeps.stream().reduce(VersionComparator::max).get(); - } - - // Add dependency to the solution and process recursively - solution.add(selected); - if (!resolveDependeciesOf(solution, selected)) { - return false; - } - } - return true; - } - - private List findMatchingDependencies(ContributedLibraryDependency dep) { - List available = find(dep.getName()); - if (dep.getVersion() == null || dep.getVersion().isEmpty()) - return available; - - // XXX: The following part is actually never reached. The use of version - // constraints requires a much complex backtracking algorithm, the following - // is just a draft placeholder. - -// List match = available.stream() -// // TODO: add more complex version comparators (> >= < <= ~ 1.0.* 1.*...) -// .filter(candidate -> candidate.getParsedVersion() -// .equals(dep.getVersionRequired())) -// .collect(Collectors.toList()); -// return match; - - return available; - } } diff --git a/arduino-core/src/cc/arduino/contributions/libraries/LibrariesIndexer.java b/arduino-core/src/cc/arduino/contributions/libraries/LibrariesIndexer.java index fedfc8f3e..01acd00ce 100644 --- a/arduino-core/src/cc/arduino/contributions/libraries/LibrariesIndexer.java +++ b/arduino-core/src/cc/arduino/contributions/libraries/LibrariesIndexer.java @@ -29,14 +29,19 @@ package cc.arduino.contributions.libraries; -import cc.arduino.Constants; -import cc.arduino.contributions.packages.ContributedPlatform; +import static processing.app.I18n.format; +import static processing.app.I18n.tr; -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.JsonMappingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import org.apache.commons.compress.utils.IOUtils; +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Optional; + +import cc.arduino.cli.ArduinoCoreInstance; +import cc.arduino.contributions.packages.ContributedPlatform; +import io.grpc.StatusException; import processing.app.BaseNoGui; import processing.app.I18n; import processing.app.helpers.filefilters.OnlyDirs; @@ -47,70 +52,54 @@ import processing.app.packages.UserLibraryFolder; import processing.app.packages.UserLibraryFolder.Location; import processing.app.packages.UserLibraryPriorityComparator; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Optional; - -import static processing.app.I18n.format; -import static processing.app.I18n.tr; - public class LibrariesIndexer { private LibrariesIndex index; private final LibraryList installedLibraries = new LibraryList(); private List librariesFolders; - private final File indexFile; - private final File stagingFolder; private final List badLibNotified = new ArrayList<>(); + private ArduinoCoreInstance core; - public LibrariesIndexer(File preferencesFolder) { - indexFile = new File(preferencesFolder, "library_index.json"); - stagingFolder = new File(new File(preferencesFolder, "staging"), "libraries"); + public LibrariesIndexer(ArduinoCoreInstance core) { + this.core = core; } - public void parseIndex() throws IOException { - index = new LibrariesIndex(); // Fallback - - if (!indexFile.exists()) { - return; - } - - parseIndex(indexFile); - - // TODO: resolve libraries inner references - } - - private void parseIndex(File file) throws IOException { - InputStream indexIn = null; + public void regenerateIndex() { + index = new LibrariesIndex(); try { - indexIn = new FileInputStream(file); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true); - mapper.configure(DeserializationFeature.EAGER_DESERIALIZER_FETCH, true); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - LibrariesIndex newIndex = mapper.readValue(indexIn, LibrariesIndex.class); - - newIndex.getLibraries() - .stream() - .filter(library -> library.getCategory() == null || "".equals(library.getCategory()) || !Constants.LIBRARY_CATEGORIES.contains(library.getCategory())) - .forEach(library -> library.setCategory("Uncategorized")); - - index = newIndex; - } catch (JsonParseException | JsonMappingException e) { - System.err.println( - format(tr("Error parsing libraries index: {0}\nTry to open the Library Manager to update the libraries index."), - e.getMessage())); - } catch (Exception e) { - System.err.println(format(tr("Error reading libraries index: {0}"), e.getMessage())); - } finally { - IOUtils.closeQuietly(indexIn); + core.searchLibrary("").forEach(inLib -> { + ContributedLibrary library = new ContributedLibrary(inLib.getName()); + inLib.getReleasesMap().forEach((ver, rel) -> { + ContributedLibraryRelease release = new ContributedLibraryRelease( + library, // + rel.getMaintainer(), // + rel.getAuthor(), // + rel.getWebsite(), // + rel.getCategory(), // + "", // TODO: license + rel.getParagraph(), // + rel.getSentence(), // + rel.getArchitecturesList(), // + rel.getTypesList(), // + null, // TODO: dependencies - List + null, // TODO: providesIncludes - List + // + rel.getResources().getUrl(), // + rel.getVersion(), // + rel.getResources().getChecksum(), // + rel.getResources().getSize(), // + rel.getResources().getArchivefilename()); + library.addRelease(release); + }); + index.add(library); + }); + } catch (StatusException e) { + e.printStackTrace(); } + +// format(tr("Error parsing libraries index: {0}\nTry to open the Library Manager to update the libraries index."), +// System.err.println(format(tr("Error reading libraries index: {0}"), } public void setLibrariesFolders(List folders) { @@ -126,7 +115,8 @@ public class LibrariesIndexer { return librariesFolders; } - private UserLibraryPriorityComparator priorityComparator = new UserLibraryPriorityComparator(null); + private UserLibraryPriorityComparator priorityComparator = new UserLibraryPriorityComparator( + null); public void addToInstalledLibraries(UserLibrary lib) { UserLibrary toReplace = installedLibraries.getByName(lib.getName()); @@ -154,8 +144,10 @@ public class LibrariesIndexer { return; } - for (ContributedLibraryRelease lib : index.getLibraries()) { - lib.unsetInstalledUserLibrary(); + for (ContributedLibrary lib : index.getLibraries()) { + for (ContributedLibraryRelease libRelease : lib.getReleases()) { + libRelease.unsetInstalledUserLibrary(); + } } // Rescan libraries @@ -165,10 +157,12 @@ public class LibrariesIndexer { installedLibraries.stream() // .filter(l -> l.getTypes().contains("Contributed")) // - .filter(l -> l.getLocation() == Location.CORE || l.getLocation() == Location.REFERENCED_CORE) // + .filter(l -> l.getLocation() == Location.CORE + || l.getLocation() == Location.REFERENCED_CORE) // .forEach(l -> { File libFolder = l.getInstalledFolder(); - Optional platform = BaseNoGui.indexer.getPlatformByFolder(libFolder); + Optional platform = BaseNoGui.indexer + .getPlatformByFolder(libFolder); if (platform.isPresent()) { l.setTypes(Collections.singletonList(platform.get().getCategory())); } @@ -185,15 +179,17 @@ public class LibrariesIndexer { String subfolderName = subfolder.getName(); if (!BaseNoGui.isSanitaryName(subfolderName)) { - // Detect whether the current folder name has already had a notification. + // Detect whether the current folder name has already had a + // notification. if (!badLibNotified.contains(subfolderName)) { badLibNotified.add(subfolderName); - String mess = I18n.format(tr("The library \"{0}\" cannot be used.\n" - + "Library folder names must start with a letter or number, followed by letters,\n" - + "numbers, dashes, dots and underscores. Maximum length is 63 characters."), - subfolderName); + String mess = I18n.format( + tr("The library \"{0}\" cannot be used.\n" + + "Library folder names must start with a letter or number, followed by letters,\n" + + "numbers, dashes, dots and underscores. Maximum length is 63 characters."), + subfolderName); BaseNoGui.showMessage(tr("Ignoring library with bad name"), mess); } continue; @@ -202,7 +198,8 @@ public class LibrariesIndexer { try { scanLibrary(new UserLibraryFolder(subfolder, folderDesc.location)); } catch (IOException e) { - System.out.println(I18n.format(tr("Invalid library found in {0}: {1}"), subfolder, e.getMessage())); + System.out.println(I18n.format(tr("Invalid library found in {0}: {1}"), + subfolder, e.getMessage())); } } } @@ -214,9 +211,11 @@ public class LibrariesIndexer { if (!check.exists() || !check.isFile()) { // Create a legacy library and exit LegacyUserLibrary lib = LegacyUserLibrary.create(folderDesc); - String[] headers = BaseNoGui.headerListFromIncludePath(lib.getSrcFolder()); + String[] headers = BaseNoGui + .headerListFromIncludePath(lib.getSrcFolder()); if (headers.length == 0) { - throw new IOException(format(tr("no headers files (.h) found in {0}"), lib.getSrcFolder())); + throw new IOException(format(tr("no headers files (.h) found in {0}"), + lib.getSrcFolder())); } addToInstalledLibraries(lib); return; @@ -226,7 +225,8 @@ public class LibrariesIndexer { UserLibrary lib = UserLibrary.create(folderDesc); String[] headers = BaseNoGui.headerListFromIncludePath(lib.getSrcFolder()); if (headers.length == 0) { - throw new IOException(format(tr("no headers files (.h) found in {0}"), lib.getSrcFolder())); + throw new IOException( + format(tr("no headers files (.h) found in {0}"), lib.getSrcFolder())); } addToInstalledLibraries(lib); @@ -234,11 +234,10 @@ public class LibrariesIndexer { if (loc != Location.CORE && loc != Location.REFERENCED_CORE) { // Check if we can find the same library in the index // and mark it as installed - ContributedLibraryRelease foundLib = index.find(lib.getName(), lib.getVersion()); - if (foundLib != null) { + index.find(lib.getName(), lib.getVersion()).ifPresent(foundLib -> { foundLib.setInstalledUserLibrary(lib); lib.setTypes(foundLib.getTypes()); - } + }); } if (lib.getTypes().isEmpty() && loc == Location.SKETCHBOOK) { @@ -257,12 +256,4 @@ public class LibrariesIndexer { public LibraryList getInstalledLibraries() { return new LibraryList(installedLibraries); } - - public File getStagingFolder() { - return stagingFolder; - } - - public File getIndexFile() { - return indexFile; - } } diff --git a/arduino-core/src/cc/arduino/contributions/libraries/LibraryInstaller.java b/arduino-core/src/cc/arduino/contributions/libraries/LibraryInstaller.java index 5c65268b6..6b5a6f2ad 100644 --- a/arduino-core/src/cc/arduino/contributions/libraries/LibraryInstaller.java +++ b/arduino-core/src/cc/arduino/contributions/libraries/LibraryInstaller.java @@ -60,16 +60,14 @@ public class LibraryInstaller { private static Logger log = LogManager.getLogger(LibraryInstaller.class); private final Platform platform; - private final GPGDetachedSignatureVerifier signatureVerifier; - public LibraryInstaller(Platform platform, GPGDetachedSignatureVerifier signatureVerifier) { + public LibraryInstaller(Platform platform) { this.platform = platform; - this.signatureVerifier = signatureVerifier; } public synchronized void updateIndex(ProgressListener progressListener) throws Exception { + /* final MultiStepProgress progress = new MultiStepProgress(3); - DownloadableContributionsDownloader downloader = new DownloadableContributionsDownloader(BaseNoGui.librariesIndexer.getStagingFolder()); // Step 1: Download index File outputFile = BaseNoGui.librariesIndexer.getIndexFile(); @@ -104,11 +102,11 @@ public class LibraryInstaller { } // Step 2: Parse index - BaseNoGui.librariesIndexer.parseIndex(); + BaseNoGui.librariesIndexer.regenerateIndex(); // Step 3: Rescan index rescanLibraryIndex(progress, progressListener); - + */ } public void install(ContributedLibraryRelease lib, ProgressListener progressListener) throws Exception { @@ -118,6 +116,7 @@ public class LibraryInstaller { } public synchronized void install(List libs, ProgressListener progressListener) throws Exception { +/* MultiStepProgress progress = new MultiStepProgress(3 * libs.size() + 1); for (ContributedLibraryRelease lib : libs) { @@ -127,9 +126,11 @@ public class LibraryInstaller { // Rescan index (1 step) rescanLibraryIndex(progress, progressListener); +*/ } private void performInstall(ContributedLibraryRelease lib, ProgressListener progressListener, MultiStepProgress progress) throws Exception { + /* if (lib.isLibraryInstalled()) { System.out.println(I18n.format(tr("Library is already installed: {0}:{1}"), lib.getName(), lib.getParsedVersion())); return; @@ -140,12 +141,28 @@ public class LibraryInstaller { // Check if we are replacing an already installed lib LibrariesIndex index = BaseNoGui.librariesIndexer.getIndex(); - Optional replacedLib = index.find(lib.getName()).stream() // - .filter(l -> l.getInstalledLibrary().isPresent()) // - .filter(l -> l.getInstalledLibrary().get().getInstalledFolder().equals(destFolder)) // - .findAny(); + Optional mayReplacedLib = lib.getLibrary() + .getInstalled(); + if (mayReplacedLib.isPresent()) { + if (mayReplacedLib.get().getInstalledLibrary().get().getInstalledFolder() + .equals(destFolder) && destFolder.exists()) { + System.out + .println(I18n.format(tr("Library {0} is already installed in: {1}"), + lib.getName(), destFolder)); + return; + + } + } + // TODO: Check correctness + // Optional mayReplacedLib = + // index.find(lib.getName()); + // .filter(l -> + // l.getInstalledLibrary().get().getInstalledFolder().equals(destFolder)) // + // .findAny(); if (!replacedLib.isPresent() && destFolder.exists()) { - System.out.println(I18n.format(tr("Library {0} is already installed in: {1}"), lib.getName(), destFolder)); + System.out + .println(I18n.format(tr("Library {0} is already installed in: {1}"), + lib.getName(), destFolder)); return; } DownloadableContributionsDownloader downloader = new DownloadableContributionsDownloader(BaseNoGui.librariesIndexer.getStagingFolder()); @@ -182,9 +199,11 @@ public class LibraryInstaller { } tmpFolder.renameTo(destFolder); progress.stepDone(); + */ } public synchronized void remove(ContributedLibraryRelease lib, ProgressListener progressListener) throws IOException { +/* if (lib.isIDEBuiltIn()) { return; } @@ -199,6 +218,7 @@ public class LibraryInstaller { // Step 2: Rescan index rescanLibraryIndex(progress, progressListener); +*/ } private void rescanLibraryIndex(MultiStepProgress progress, ProgressListener progressListener) { diff --git a/arduino-core/src/cc/arduino/contributions/libraries/UnavailableContributedLibrary.java b/arduino-core/src/cc/arduino/contributions/libraries/UnavailableContributedLibrary.java index d7bfa36a3..7af00bdd9 100644 --- a/arduino-core/src/cc/arduino/contributions/libraries/UnavailableContributedLibrary.java +++ b/arduino-core/src/cc/arduino/contributions/libraries/UnavailableContributedLibrary.java @@ -30,114 +30,22 @@ package cc.arduino.contributions.libraries; import java.util.ArrayList; -import java.util.List; public class UnavailableContributedLibrary extends ContributedLibraryRelease { - private String name; - private String version; - public UnavailableContributedLibrary(ContributedLibraryDependency dependency) { this(dependency.getName(), dependency.getVersion()); } - public UnavailableContributedLibrary(String _name, String _version) { - name = _name; - version = _version; - } - - @Override - public String getName() { - return name; - } - - @Override - public String getMaintainer() { - return "Unknown"; - } - - @Override - public String getAuthor() { - return "Unknown"; - } - - @Override - public String getWebsite() { - return "Unknown"; - } - - @Override - public String getCategory() { - return "Uncategorized"; - } - - @Override - public void setCategory(String category) { - // Empty - } - - @Override - public String getLicense() { - return "Unknown"; - } - - @Override - public String getParagraph() { - return ""; - } - - @Override - public String getSentence() { - return ""; - } - - @Override - public List getArchitectures() { - return new ArrayList<>(); - } - - @Override - public List getTypes() { - return new ArrayList<>(); - } - - @Override - public List getDependencies() { - return new ArrayList<>(); - } - - @Override - public String getUrl() { - return ""; - } - - @Override - public String getVersion() { - return version; - } - - @Override - public String getChecksum() { - return ""; - } - - @Override - public long getSize() { - return 0; - } - - @Override - public String getArchiveFileName() { - return ""; + public UnavailableContributedLibrary(String name, String version) { + super(new ContributedLibrary(name), "Unknown", "Unknown", "Unknown", + "Uncategorized", "Unknown", "", "", new ArrayList<>(), + new ArrayList<>(), new ArrayList<>(), new ArrayList<>(), "", version, + "", 0, ""); } @Override public String toString() { return "!" + super.toString(); } - - @Override - public List getProvidesIncludes() { - return new ArrayList<>(); - } } diff --git a/arduino-core/src/processing/app/BaseNoGui.java b/arduino-core/src/processing/app/BaseNoGui.java index 00c1b7385..8692fd3b9 100644 --- a/arduino-core/src/processing/app/BaseNoGui.java +++ b/arduino-core/src/processing/app/BaseNoGui.java @@ -520,13 +520,8 @@ public class BaseNoGui { loadHardware(getSketchbookHardwareFolder()); createToolPreferences(indexer.getInstalledTools(), true); - librariesIndexer = new LibrariesIndexer(getSettingsFolder()); - try { - librariesIndexer.parseIndex(); - } catch (JsonProcessingException e) { - File librariesIndexFile = librariesIndexer.getIndexFile(); - librariesIndexFile.delete(); - } + librariesIndexer = new LibrariesIndexer(BaseNoGui.getArduinoCoreService()); + librariesIndexer.regenerateIndex(); if (discoveryManager == null) { discoveryManager = new DiscoveryManager(packages);