Skip to content

Commit bb3f7bf

Browse files
committed
Merge pull request #3449 from ffissore/nightly-cores
Nightly cores support
2 parents 8079a7c + d02cdfd commit bb3f7bf

File tree

1 file changed

+32
-14
lines changed

1 file changed

+32
-14
lines changed

arduino-core/src/cc/arduino/contributions/DownloadableContributionsDownloader.java

+32-14
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@
3535

3636
import java.io.File;
3737
import java.net.URL;
38+
import java.nio.file.Files;
39+
import java.nio.file.LinkOption;
40+
import java.nio.file.Path;
41+
import java.nio.file.Paths;
3842
import java.util.Observable;
3943
import java.util.Observer;
4044

@@ -49,36 +53,50 @@ public DownloadableContributionsDownloader(File _stagingFolder) {
4953
stagingFolder = _stagingFolder;
5054
}
5155

52-
public File download(DownloadableContribution contribution,
53-
final Progress progress, final String statusText)
54-
throws Exception {
56+
public File download(DownloadableContribution contribution, Progress progress, final String statusText) throws Exception {
5557
URL url = new URL(contribution.getUrl());
56-
final File outputFile = new File(stagingFolder, contribution.getArchiveFileName());
58+
Path outputFile = Paths.get(stagingFolder.getAbsolutePath(), contribution.getArchiveFileName());
5759

5860
// Ensure the existence of staging folder
59-
stagingFolder.mkdirs();
61+
Files.createDirectories(stagingFolder.toPath());
62+
63+
if (!hasChecksum(contribution) && Files.exists(outputFile)) {
64+
Files.delete(outputFile);
65+
}
6066

6167
// Need to download or resume downloading?
62-
if (!outputFile.isFile() || (outputFile.length() < contribution.getSize())) {
63-
download(url, outputFile, progress, statusText);
68+
if (!Files.isRegularFile(outputFile, LinkOption.NOFOLLOW_LINKS) || (Files.size(outputFile) < contribution.getSize())) {
69+
download(url, outputFile.toFile(), progress, statusText);
6470
}
6571

6672
// Test checksum
6773
progress.setStatus(_("Verifying archive integrity..."));
6874
onProgress(progress);
6975
String checksum = contribution.getChecksum();
70-
String algo = checksum.split(":")[0];
71-
if (!FileHash.hash(outputFile, algo).equalsIgnoreCase(checksum)) {
72-
throw new Exception(_("CRC doesn't match. File is corrupted."));
76+
if (hasChecksum(contribution)) {
77+
String algo = checksum.split(":")[0];
78+
if (!FileHash.hash(outputFile.toFile(), algo).equalsIgnoreCase(checksum)) {
79+
throw new Exception(_("CRC doesn't match. File is corrupted."));
80+
}
7381
}
7482

7583
contribution.setDownloaded(true);
76-
contribution.setDownloadedFile(outputFile);
77-
return outputFile;
84+
contribution.setDownloadedFile(outputFile.toFile());
85+
return outputFile.toFile();
86+
}
87+
88+
private boolean hasChecksum(DownloadableContribution contribution) {
89+
String checksum = contribution.getChecksum();
90+
if (checksum == null || checksum.isEmpty()) {
91+
return false;
92+
}
93+
94+
String algo = checksum.split(":")[0];
95+
96+
return algo != null && algo.isEmpty();
7897
}
7998

80-
public void download(URL url, File tmpFile, final Progress progress,
81-
final String statusText) throws Exception {
99+
public void download(URL url, File tmpFile, Progress progress, String statusText) throws Exception {
82100
FileDownloader downloader = new FileDownloader(url, tmpFile);
83101
downloader.addObserver(new Observer() {
84102
@Override

0 commit comments

Comments
 (0)