1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-06-25 06:22:11 +03:00

Bundled core is again inside the hardware folder.

Fixed a handful of glitches when dealing with multiple installed cores
This commit is contained in:
Federico Fissore
2015-03-31 17:00:01 +02:00
parent 98f364ea38
commit 29cb42eb50
27 changed files with 359 additions and 285 deletions

View File

@ -1,17 +0,0 @@
package cc.arduino.contributions.filters;
import cc.arduino.contributions.packages.DownloadableContribution;
import com.google.common.base.Predicate;
public class InstalledPredicate implements Predicate<DownloadableContribution> {
@Override
public boolean apply(DownloadableContribution input) {
return input.isInstalled();
}
@Override
public boolean equals(Object obj) {
return obj instanceof DownloadableContribution;
}
}

View File

@ -1,17 +0,0 @@
package cc.arduino.contributions.libraries.filters;
import cc.arduino.contributions.libraries.ContributedLibrary;
import com.google.common.base.Predicate;
public class BuiltInPredicate implements Predicate<ContributedLibrary> {
@Override
public boolean apply(ContributedLibrary input) {
return input.isReadOnly();
}
@Override
public boolean equals(Object obj) {
return obj instanceof BuiltInPredicate;
}
}

View File

@ -29,15 +29,16 @@
package cc.arduino.contributions.libraries.ui;
import cc.arduino.contributions.VersionComparator;
import cc.arduino.contributions.VersionHelper;
import cc.arduino.contributions.filters.InstalledPredicate;
import cc.arduino.contributions.libraries.ContributedLibrary;
import cc.arduino.contributions.libraries.ContributedLibraryComparator;
import cc.arduino.contributions.libraries.filters.BuiltInPredicate;
import cc.arduino.contributions.libraries.filters.InstalledLibraryPredicate;
import cc.arduino.contributions.filters.BuiltInPredicate;
import cc.arduino.contributions.libraries.filters.OnlyUpstreamReleasePredicate;
import cc.arduino.contributions.ui.InstallerTableCell;
import cc.arduino.contributions.ui.listeners.DelegatingKeyListener;
import cc.arduino.utils.ReverseComparator;
import com.github.zafarkhaja.semver.Version;
import com.google.common.base.Function;
import com.google.common.base.Predicates;
import com.google.common.collect.Collections2;
@ -66,7 +67,6 @@ import static processing.app.I18n.format;
@SuppressWarnings("serial")
public class ContributedLibraryTableCell extends InstallerTableCell {
private final LibraryManagerUI indexer;
private JPanel panel;
private JButton installButton;
private Component installButtonPlaceholder;
@ -77,9 +77,7 @@ public class ContributedLibraryTableCell extends InstallerTableCell {
private JPanel inactiveButtonsPanel;
private JLabel statusLabel;
public ContributedLibraryTableCell(LibraryManagerUI indexer) {
this.indexer = indexer;
public ContributedLibraryTableCell() {
{
installButton = new JButton(_("Install"));
installButton.addActionListener(new ActionListener() {
@ -359,7 +357,7 @@ public class ContributedLibraryTableCell extends InstallerTableCell {
// ...version.
if (installed != null) {
String installedVer = installed.getVersion();
Version installedVer = VersionHelper.valueOf(installed.getVersion());
if (installedVer == null) {
desc += " " + _("Version unknown");
} else {

View File

@ -1,20 +1,20 @@
package cc.arduino.contributions.libraries.ui;
import cc.arduino.contributions.libraries.ContributedLibrary;
import cc.arduino.contributions.libraries.filters.BuiltInPredicate;
import cc.arduino.contributions.filters.BuiltInPredicate;
import cc.arduino.contributions.packages.DownloadableContribution;
import cc.arduino.contributions.ui.DropdownItem;
import com.google.common.base.Predicate;
import static processing.app.I18n._;
public class DropdownBuiltInLibrariesItem implements DropdownItem<ContributedLibrary> {
public class DropdownBuiltInLibrariesItem implements DropdownItem<DownloadableContribution> {
public String toString() {
return _("Built-in");
}
@Override
public Predicate<ContributedLibrary> getFilterPredicate() {
public Predicate<DownloadableContribution> getFilterPredicate() {
return new BuiltInPredicate();
}
}

View File

@ -28,16 +28,22 @@
*/
package cc.arduino.contributions.libraries.ui;
import cc.arduino.contributions.VersionComparator;
import cc.arduino.contributions.DownloadableContributionBuiltInAtTheBottomComparator;
import cc.arduino.contributions.VersionHelper;
import cc.arduino.contributions.filters.InstalledPredicate;
import cc.arduino.contributions.libraries.ContributedLibrary;
import cc.arduino.contributions.libraries.LibrariesIndexer;
import cc.arduino.contributions.packages.ContributedPlatform;
import cc.arduino.contributions.ui.FilteredAbstractTableModel;
import com.github.zafarkhaja.semver.Version;
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import com.google.common.collect.Collections2;
import java.util.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
@SuppressWarnings("serial")
public class LibrariesIndexTableModel extends FilteredAbstractTableModel<ContributedLibrary> {
@ -45,13 +51,18 @@ public class LibrariesIndexTableModel extends FilteredAbstractTableModel<Contrib
public final static int DESCRIPTION_COL = 0;
public static class ContributedLibraryReleases implements Comparable<ContributedLibraryReleases> {
public final String name;
public final List<ContributedLibrary> releases = new ArrayList<ContributedLibrary>();
public final List<String> versions = new ArrayList<String>();
public ContributedLibrary selected = null;
public final List<ContributedLibrary> releases;
public final List<Version> versions;
public ContributedLibrary selected;
public ContributedLibraryReleases(ContributedLibrary library) {
name = library.getName();
this.name = library.getName();
this.versions = new LinkedList<Version>();
this.releases = new LinkedList<ContributedLibrary>();
this.selected = null;
add(library);
}
@ -61,40 +72,28 @@ public class LibrariesIndexTableModel extends FilteredAbstractTableModel<Contrib
public void add(ContributedLibrary library) {
releases.add(library);
versions.add(library.getVersion());
Version version = VersionHelper.valueOf(library.getVersion());
if (version != null) {
versions.add(version);
}
selected = getLatest();
}
public ContributedLibrary getInstalled() {
List<ContributedLibrary> installedReleases = new LinkedList<ContributedLibrary>(Collections2.filter(releases, new Predicate<ContributedLibrary>() {
@Override
public boolean apply(ContributedLibrary contributedLibrary) {
return contributedLibrary.isInstalled();
}
}));
List<ContributedLibrary> installedReleases = new LinkedList<ContributedLibrary>(Collections2.filter(releases, new InstalledPredicate()));
Collections.sort(installedReleases, new DownloadableContributionBuiltInAtTheBottomComparator());
return getLatestOf(installedReleases);
if (installedReleases.isEmpty()) {
return null;
}
return installedReleases.get(0);
}
public ContributedLibrary getLatest() {
return getLatestOf(releases);
}
private ContributedLibrary getLatestOf(List<ContributedLibrary> libs) {
Collections.sort(new LinkedList<ContributedLibrary>(libs), new Comparator<ContributedLibrary>() {
@Override
public int compare(ContributedLibrary lib1, ContributedLibrary lib2) {
return VersionComparator.VERSION_COMPARATOR.compare(lib1.getVersion(), lib2.getVersion());
}
});
if (libs.isEmpty()) {
return null;
}
return libs.get(libs.size() - 1);
}
public ContributedLibrary getSelected() {
return selected;
}
@ -223,7 +222,7 @@ public class LibrariesIndexTableModel extends FilteredAbstractTableModel<Contrib
return col == DESCRIPTION_COL;
}
public List<String> getReleasesVersions(int row) {
public List<Version> getReleasesVersions(int row) {
return contributions.get(row).versions;
}

View File

@ -61,12 +61,12 @@ public class LibraryManagerUI extends InstallerJDialog<ContributedLibrary> {
@Override
protected InstallerTableCell createCellRenderer() {
return new ContributedLibraryTableCell(this);
return new ContributedLibraryTableCell();
}
@Override
protected InstallerTableCell createCellEditor() {
return new ContributedLibraryTableCell(this) {
return new ContributedLibraryTableCell() {
@Override
protected void onInstall(ContributedLibrary selectedLibrary, ContributedLibrary installedLibrary) {
if (selectedLibrary.isReadOnly()) {

View File

@ -29,7 +29,9 @@
package cc.arduino.contributions.packages.ui;
import cc.arduino.contributions.VersionComparator;
import cc.arduino.contributions.VersionHelper;
import cc.arduino.contributions.filters.InstalledPredicate;
import cc.arduino.contributions.filters.BuiltInPredicate;
import cc.arduino.contributions.packages.ContributedBoard;
import cc.arduino.contributions.packages.ContributedPlatform;
import cc.arduino.contributions.packages.ContributedPlatformComparator;
@ -263,7 +265,7 @@ public class ContributedPlatformTableCell extends InstallerTableCell {
java.util.List<ContributedPlatform> releases = new LinkedList<ContributedPlatform>(editorValue.releases);
java.util.List<ContributedPlatform> uninstalledReleases = new LinkedList<ContributedPlatform>(Collections2.filter(releases, Predicates.not(new InstalledPredicate())));
java.util.List<ContributedPlatform> installedBuiltIn = new LinkedList<ContributedPlatform>();
java.util.List<ContributedPlatform> installedBuiltIn = new LinkedList<ContributedPlatform>(Collections2.filter(releases, Predicates.and(new InstalledPredicate(), new BuiltInPredicate())));
if (installed != null && !installedBuiltIn.contains(installed)) {
uninstalledReleases.addAll(installedBuiltIn);
@ -330,8 +332,7 @@ public class ContributedPlatformTableCell extends InstallerTableCell {
upgradable = false;
} else {
installable = false;
//removable = !installed.isReadOnly() && !hasBuiltInRelease;
removable = !hasBuiltInRelease;
removable = !installed.isReadOnly() && !hasBuiltInRelease;
upgradable = new ContributedPlatformComparator().compare(selected, installed) > 0;
}
if (installable) {
@ -352,17 +353,18 @@ public class ContributedPlatformTableCell extends InstallerTableCell {
if (author != null && !author.isEmpty()) {
desc += " " + format("by <b>{0}</b>", author);
}
if (removable) {
desc += " " + format(_("version <b>{0}</b>"), installed.getVersion()) + " <strong><font color=\"#00979D\">INSTALLED</font></strong>";
if (installed != null) {
desc += " " + format(_("version <b>{0}</b>"), VersionHelper.valueOf(installed.getVersion())) + " <strong><font color=\"#00979D\">INSTALLED</font></strong>";
}
desc += "<br />";
desc += _("Boards included in this package:") + "<br />";
for (ContributedBoard board : selected.getBoards())
desc += format("{0}, ", board.getName());
for (ContributedBoard board : selected.getBoards()) {
desc += board.getName() + ", ";
}
desc = desc.substring(0, desc.lastIndexOf(',')) + ".<br />";
if (author != null && !author.isEmpty()) {
if (url != null && !url.isEmpty()) {
desc += " " + format("<a href=\"{0}\">More info</a>", url);
}

View File

@ -28,34 +28,40 @@
*/
package cc.arduino.contributions.packages.ui;
import cc.arduino.contributions.DownloadableContributionBuiltInAtTheBottomComparator;
import cc.arduino.contributions.VersionHelper;
import cc.arduino.contributions.filters.InstalledPredicate;
import cc.arduino.contributions.packages.ContributedPackage;
import cc.arduino.contributions.packages.ContributedPlatform;
import cc.arduino.contributions.packages.ContributionsIndex;
import cc.arduino.contributions.ui.FilteredAbstractTableModel;
import com.github.zafarkhaja.semver.Version;
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import com.google.common.collect.Collections2;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import static processing.app.I18n._;
@SuppressWarnings("serial")
public class ContributionIndexTableModel extends FilteredAbstractTableModel<ContributedPlatform> {
public final static int DESCRIPTION_COL = 0;
public static class ContributedPlatformReleases {
public ContributedPackage packager;
public String arch;
public List<ContributedPlatform> releases = new ArrayList<ContributedPlatform>();
public List<String> versions = new ArrayList<String>();
public final ContributedPackage packager;
public final String arch;
public final List<ContributedPlatform> releases;
public final List<Version> versions;
public ContributedPlatform selected = null;
public ContributedPlatformReleases(ContributedPlatform platform) {
packager = platform.getParentPackage();
arch = platform.getArchitecture();
this.packager = platform.getParentPackage();
this.arch = platform.getArchitecture();
this.releases = new LinkedList<ContributedPlatform>();
this.versions = new LinkedList<Version>();
add(platform);
}
@ -67,39 +73,26 @@ public class ContributionIndexTableModel extends FilteredAbstractTableModel<Cont
public void add(ContributedPlatform platform) {
releases.add(platform);
versions.add(platform.getVersion());
Version version = VersionHelper.valueOf(platform.getVersion());
if (version != null) {
versions.add(version);
}
selected = getLatest();
}
public ContributedPlatform getInstalled() {
List<ContributedPlatform> installedPlatforms = new LinkedList<ContributedPlatform>();
for (ContributedPlatform platform : releases) {
if (platform.isInstalled()) {
installedPlatforms.add(platform);
}
List<ContributedPlatform> installedReleases = new LinkedList<ContributedPlatform>(Collections2.filter(releases, new InstalledPredicate()));
Collections.sort(installedReleases, new DownloadableContributionBuiltInAtTheBottomComparator());
if (installedReleases.isEmpty()) {
return null;
}
if (installedPlatforms.size() > 1) {
throw new IllegalStateException(_("More than one platform is currently installed! Only one can be installed at any given time"));
}
if (!installedPlatforms.isEmpty()) {
return installedPlatforms.get(0);
}
return null;
return installedReleases.get(0);
}
public ContributedPlatform getLatest() {
ContributedPlatform latest = null;
for (ContributedPlatform plat : releases) {
if (latest == null)
latest = plat;
// TODO a better version compare
if (plat.getVersion().compareTo(latest.getVersion()) > 0)
latest = plat;
}
return latest;
return getLatestOf(releases);
}
public ContributedPlatform getSelected() {
@ -224,7 +217,7 @@ public class ContributionIndexTableModel extends FilteredAbstractTableModel<Cont
return col == DESCRIPTION_COL;
}
public List<String> getReleasesVersions(int row) {
public List<Version> getReleasesVersions(int row) {
return contributions.get(row).versions;
}

View File

@ -66,13 +66,17 @@ public class ContributionManagerUI extends InstallerJDialog {
protected InstallerTableCell createCellEditor() {
return new ContributedPlatformTableCell() {
@Override
protected void onInstall(ContributedPlatform selectedPlatform, ContributedPlatform installed) {
onInstallPressed(selectedPlatform, installed);
protected void onInstall(ContributedPlatform selected, ContributedPlatform installed) {
if (selected.isReadOnly()) {
onRemovePressed(installed, false);
} else {
onInstallPressed(selected, installed);
}
}
@Override
protected void onRemove(ContributedPlatform installedPlatform) {
onRemovePressed(installedPlatform);
onRemovePressed(installedPlatform, true);
}
};
}
@ -157,7 +161,7 @@ public class ContributionManagerUI extends InstallerJDialog {
try {
setProgressVisible(true, _("Installing..."));
installer.install(platformToInstall);
if (platformToRemove != null) {
if (platformToRemove != null && !platformToRemove.isReadOnly()) {
installer.remove(platformToRemove);
}
onIndexesUpdated();
@ -172,12 +176,14 @@ public class ContributionManagerUI extends InstallerJDialog {
installerThread.start();
}
public void onRemovePressed(final ContributedPlatform platform) {
public void onRemovePressed(final ContributedPlatform platform, boolean showWarning) {
clearErrorMessage();
int chosenOption = JOptionPane.showConfirmDialog(getParent(), I18n.format(_("Do you want to remove {0}?\nIf you do so you won't be able to use {0} any more."), platform.getName()), _("Please confirm boards deletion"), JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
if (chosenOption != JOptionPane.YES_OPTION) {
return;
if (showWarning) {
int chosenOption = JOptionPane.showConfirmDialog(getParent(), I18n.format(_("Do you want to remove {0}?\nIf you do so you won't be able to use {0} any more."), platform.getName()), _("Please confirm boards deletion"), JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
if (chosenOption != JOptionPane.YES_OPTION) {
return;
}
}
installerThread = new Thread(new Runnable() {

View File

@ -28,12 +28,34 @@
*/
package cc.arduino.contributions.ui;
import cc.arduino.contributions.VersionComparator;
import cc.arduino.contributions.packages.DownloadableContribution;
import com.google.common.base.Predicate;
import javax.swing.table.AbstractTableModel;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;
public abstract class FilteredAbstractTableModel<T> extends AbstractTableModel {
abstract public void updateIndexFilter(String[] filters, Predicate<T>... additionalFilters);
protected static <T extends DownloadableContribution> T getLatestOf(List<T> contribs) {
contribs = new LinkedList<T>(contribs);
Collections.sort(contribs, new Comparator<T>() {
@Override
public int compare(T contrib1, T contrib2) {
return VersionComparator.VERSION_COMPARATOR.compare(contrib1.getVersion(), contrib2.getVersion());
}
});
if (contribs.isEmpty()) {
return null;
}
return contribs.get(contribs.size() - 1);
}
}

View File

@ -30,4 +30,9 @@ public class TargetPackageStub implements TargetPackage {
public TargetPlatform get(String platform) {
return null;
}
@Override
public boolean hasPlatform(TargetPlatform platform) {
return false;
}
}