Skip to content

Commit 0925525

Browse files
author
Federico Fissore
committed
Preliminary command line support to boards manager and library manager
1 parent 643d951 commit 0925525

File tree

7 files changed

+256
-47
lines changed

7 files changed

+256
-47
lines changed

app/src/cc/arduino/contributions/libraries/ui/LibraryInstaller.java

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -28,20 +28,20 @@
2828
*/
2929
package cc.arduino.contributions.libraries.ui;
3030

31-
import static processing.app.I18n._;
32-
33-
import java.io.File;
34-
import java.io.IOException;
35-
import java.net.URL;
36-
37-
import processing.app.BaseNoGui;
38-
import processing.app.helpers.FileUtils;
3931
import cc.arduino.contributions.libraries.ContributedLibrary;
4032
import cc.arduino.contributions.libraries.LibrariesIndexer;
4133
import cc.arduino.contributions.packages.DownloadableContributionsDownloader;
4234
import cc.arduino.utils.ArchiveExtractor;
4335
import cc.arduino.utils.MultiStepProgress;
4436
import cc.arduino.utils.Progress;
37+
import processing.app.BaseNoGui;
38+
import processing.app.helpers.FileUtils;
39+
40+
import java.io.File;
41+
import java.io.IOException;
42+
import java.net.URL;
43+
44+
import static processing.app.I18n._;
4545

4646
public class LibraryInstaller {
4747

@@ -93,7 +93,7 @@ public void updateIndex() throws Exception {
9393
outputFile.delete();
9494
if (!tmpFile.renameTo(outputFile))
9595
throw new Exception(
96-
_("An error occurred while updating libraries index!"));
96+
_("An error occurred while updating libraries index!"));
9797

9898
// Step 2: Rescan index
9999
rescanLibraryIndex(progress);
@@ -133,20 +133,18 @@ public void install(ContributedLibrary lib, ContributedLibrary replacedLib) thro
133133

134134
// Step 3: Remove replaced library and move installed one to the correct location
135135
// TODO: Fix progress bar...
136-
if (replacedLib != null && !replacedLib.isReadOnly()) {
137-
remove(replacedLib);
138-
}
136+
remove(replacedLib);
139137
File destFolder = new File(libsFolder, lib.getName().replaceAll(" ", "_"));
140138
tmpFolder.renameTo(destFolder);
141139
progress.stepDone();
142-
140+
143141
// Step 4: Rescan index
144142
rescanLibraryIndex(progress);
145143
}
146144

147145
public void remove(ContributedLibrary lib) throws IOException {
148-
if (lib.isReadOnly()) {
149-
throw new IllegalArgumentException("Can't delete a built-in library");
146+
if (lib == null || lib.isReadOnly()) {
147+
return;
150148
}
151149

152150
final MultiStepProgress progress = new MultiStepProgress(2);

app/src/processing/app/Base.java

Lines changed: 86 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,17 @@
2222

2323
package processing.app;
2424

25+
import cc.arduino.contributions.VersionHelper;
26+
import cc.arduino.contributions.libraries.ContributedLibrary;
27+
import cc.arduino.contributions.libraries.LibrariesIndexer;
28+
import cc.arduino.contributions.libraries.ui.LibraryInstaller;
2529
import cc.arduino.contributions.libraries.ui.LibraryManagerUI;
26-
import cc.arduino.packages.DiscoveryManager;
30+
import cc.arduino.contributions.packages.ContributedPlatform;
31+
import cc.arduino.contributions.packages.ContributionInstaller;
32+
import cc.arduino.contributions.packages.ContributionsIndexer;
2733
import cc.arduino.contributions.packages.ui.ContributionManagerUI;
34+
import cc.arduino.packages.DiscoveryManager;
35+
import cc.arduino.utils.Progress;
2836
import cc.arduino.view.SplashScreenHelper;
2937
import com.google.common.base.Predicate;
3038
import com.google.common.base.Predicates;
@@ -296,7 +304,78 @@ public Base(String[] args) throws Exception {
296304
// them.
297305
Preferences.save();
298306

299-
if (parser.isVerifyOrUploadMode()) {
307+
if (parser.isInstallBoard()) {
308+
ContributionsIndexer indexer = new ContributionsIndexer(BaseNoGui.getSettingsFolder());
309+
ContributionInstaller installer = new ContributionInstaller(indexer) {
310+
private String lastStatus = "";
311+
@Override
312+
protected void onProgress(Progress progress) {
313+
if (!lastStatus.equals(progress.getStatus())) {
314+
System.out.println(progress.getStatus());
315+
}
316+
lastStatus = progress.getStatus();
317+
}
318+
};
319+
installer.updateIndex();
320+
indexer.parseIndex();
321+
indexer.syncWithFilesystem(getHardwareFolder());
322+
323+
String[] boardToInstallParts = parser.getBoardToInstall().split(":");
324+
325+
ContributedPlatform selected = indexer.getIndex().findPlatform(boardToInstallParts[0], boardToInstallParts[1], VersionHelper.valueOf(boardToInstallParts[2]).toString());
326+
if (selected == null) {
327+
System.out.println(_("Selected board is not available"));
328+
System.exit(1);
329+
}
330+
331+
ContributedPlatform installed = indexer.getIndex().getInstalled(boardToInstallParts[0], boardToInstallParts[1]);
332+
333+
if (!selected.isReadOnly()) {
334+
installer.install(selected);
335+
}
336+
337+
if (installed != null && !installed.isReadOnly()) {
338+
installer.remove(installed);
339+
}
340+
341+
System.exit(0);
342+
343+
} else if (parser.isInstallLibrary()) {
344+
LibrariesIndexer indexer = new LibrariesIndexer(BaseNoGui.getSettingsFolder());
345+
LibraryInstaller installer = new LibraryInstaller(indexer) {
346+
private String lastStatus = "";
347+
@Override
348+
protected void onProgress(Progress progress) {
349+
if (!lastStatus.equals(progress.getStatus())) {
350+
System.out.println(progress.getStatus());
351+
}
352+
lastStatus = progress.getStatus();
353+
}
354+
};
355+
indexer.parseIndex();
356+
BaseNoGui.onBoardOrPortChange();
357+
indexer.setSketchbookLibrariesFolder(BaseNoGui.getSketchbookLibrariesFolder());
358+
indexer.setLibrariesFolders(BaseNoGui.getLibrariesPath());
359+
installer.updateIndex();
360+
361+
String[] libraryToInstallParts = parser.getLibraryToInstall().split(":");
362+
363+
ContributedLibrary selected = indexer.getIndex().find(libraryToInstallParts[0], VersionHelper.valueOf(libraryToInstallParts[1]).toString());
364+
if (selected == null) {
365+
System.out.println(_("Selected library is not available"));
366+
System.exit(1);
367+
}
368+
369+
ContributedLibrary installed = indexer.getIndex().getInstalled(libraryToInstallParts[0]);
370+
if (selected.isReadOnly()) {
371+
installer.remove(installed);
372+
} else {
373+
installer.install(selected, installed);
374+
}
375+
376+
System.exit(0);
377+
378+
} else if (parser.isVerifyOrUploadMode()) {
300379
splashScreenHelper.close();
301380
// Set verbosity for command line build
302381
Preferences.set("build.verbose", "" + parser.isDoVerboseBuild());
@@ -1525,11 +1604,11 @@ public void actionPerformed(ActionEvent e) {
15251604
String complaining = I18n
15261605
.format(
15271606
_("The sketch \"{0}\" cannot be used.\n"
1528-
+ "Sketch names must contain only basic letters and numbers\n"
1529-
+ "(ASCII-only with no spaces, "
1530-
+ "and it cannot start with a number).\n"
1531-
+ "To get rid of this message, remove the sketch from\n"
1532-
+ "{1}"), name, entry.getAbsolutePath());
1607+
+ "Sketch names must contain only basic letters and numbers\n"
1608+
+ "(ASCII-only with no spaces, "
1609+
+ "and it cannot start with a number).\n"
1610+
+ "To get rid of this message, remove the sketch from\n"
1611+
+ "{1}"), name, entry.getAbsolutePath());
15331612
showMessage(_("Ignoring sketch with bad name"), complaining);
15341613
}
15351614
return false;

arduino-core/src/cc/arduino/contributions/libraries/LibrariesIndex.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929

3030
package cc.arduino.contributions.libraries;
3131

32+
import cc.arduino.contributions.DownloadableContributionBuiltInAtTheBottomComparator;
33+
import cc.arduino.contributions.filters.InstalledPredicate;
3234
import com.google.common.base.Predicate;
3335
import com.google.common.collect.Collections2;
3436

@@ -93,4 +95,15 @@ public List<String> getTypes() {
9395

9496
return types;
9597
}
98+
99+
public ContributedLibrary getInstalled(String name) {
100+
List<ContributedLibrary> installedReleases = new LinkedList<ContributedLibrary>(Collections2.filter(find(name), new InstalledPredicate()));
101+
Collections.sort(installedReleases, new DownloadableContributionBuiltInAtTheBottomComparator());
102+
103+
if (installedReleases.isEmpty()) {
104+
return null;
105+
}
106+
107+
return installedReleases.get(0);
108+
}
96109
}

arduino-core/src/cc/arduino/contributions/packages/ContributionInstaller.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,9 @@ public boolean apply(File file) {
205205
}
206206

207207
public List<String> remove(ContributedPlatform platform) {
208+
if (platform == null || platform.isReadOnly()) {
209+
return new LinkedList<String>();
210+
}
208211
List<String> errors = new LinkedList<String>();
209212
FileUtils.recursiveDelete(platform.getInstalledFolder());
210213
platform.setInstalled(false);

arduino-core/src/cc/arduino/contributions/packages/ContributionsIndex.java

Lines changed: 72 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,15 @@
2828
*/
2929
package cc.arduino.contributions.packages;
3030

31-
import java.util.ArrayList;
32-
import java.util.List;
31+
import cc.arduino.contributions.DownloadableContributionBuiltInAtTheBottomComparator;
32+
import cc.arduino.contributions.filters.InstalledPredicate;
33+
import com.google.common.base.Function;
34+
import com.google.common.base.Predicate;
35+
import com.google.common.collect.Collections2;
36+
import com.google.common.collect.Iterables;
37+
import com.google.common.collect.Lists;
38+
39+
import java.util.*;
3340

3441
public abstract class ContributionsIndex {
3542

@@ -43,6 +50,69 @@ public ContributedPackage findPackage(String packageName) {
4350
return null;
4451
}
4552

53+
public List<ContributedPlatform> findPlatforms(String packageName, final String platformName) {
54+
if (packageName == null || platformName == null) {
55+
return null;
56+
57+
}
58+
ContributedPackage aPackage = findPackage(packageName);
59+
if (aPackage == null) {
60+
return null;
61+
}
62+
Collection<ContributedPlatform> platforms = Collections2.filter(aPackage.getPlatforms(), new Predicate<ContributedPlatform>() {
63+
@Override
64+
public boolean apply(ContributedPlatform contributedPlatform) {
65+
return platformName.equals(contributedPlatform.getName());
66+
}
67+
});
68+
return Lists.newLinkedList(platforms);
69+
}
70+
71+
public ContributedPlatform findPlatform(String packageName, final String platformName, final String platformVersion) {
72+
if (platformVersion == null) {
73+
return null;
74+
75+
}
76+
77+
Collection<ContributedPlatform> platformsByName = findPlatforms(packageName, platformName);
78+
if (platformsByName == null) {
79+
return null;
80+
}
81+
82+
Collection<ContributedPlatform> platforms = Collections2.filter(platformsByName, new Predicate<ContributedPlatform>() {
83+
@Override
84+
public boolean apply(ContributedPlatform contributedPlatform) {
85+
return platformVersion.equals(contributedPlatform.getParsedVersion());
86+
}
87+
});
88+
if (platforms.isEmpty()) {
89+
return null;
90+
}
91+
92+
return platforms.iterator().next();
93+
}
94+
95+
public ContributedPlatform getInstalled(String packageName, String platformName) {
96+
List<ContributedPlatform> installedPlatforms = new LinkedList<ContributedPlatform>(Collections2.filter(findPlatforms(packageName, platformName), new InstalledPredicate()));
97+
Collections.sort(installedPlatforms, new DownloadableContributionBuiltInAtTheBottomComparator());
98+
99+
if (installedPlatforms.isEmpty()) {
100+
return null;
101+
}
102+
103+
return installedPlatforms.get(0);
104+
}
105+
106+
public List<ContributedPlatform> getPlatforms() {
107+
return Lists.newLinkedList(Iterables.concat(Collections2.transform(getPackages(), new Function<ContributedPackage, List<ContributedPlatform>>() {
108+
@Override
109+
public List<ContributedPlatform> apply(ContributedPackage contributedPackage) {
110+
return contributedPackage.getPlatforms();
111+
}
112+
})));
113+
}
114+
115+
46116
public ContributedTool findTool(String packageName, String name,
47117
String version) {
48118
ContributedPackage pack = findPackage(packageName);

0 commit comments

Comments
 (0)