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

Implemented "Update List" button of Boards Installer.

This commit is contained in:
Cristian Maglie
2014-05-16 01:08:05 +02:00
committed by Federico Fissore
parent 5d1e4e3f70
commit fe2d087ebd
5 changed files with 100 additions and 13 deletions

View File

@ -234,4 +234,39 @@ public class ContributionInstaller {
}
}
}
public void updateIndex() throws Exception {
final String statusText = _("Downloading platforms index...");
updateProgress(0, statusText);
URL url = new URL("http://arduino.cc/package_index.json");
File tmpFile = File.createTempFile("package_index", ".json");
FileDownloader downloader = new FileDownloader(url, tmpFile);
downloader.addObserver(new Observer() {
@Override
public void update(Observable o, Object arg) {
FileDownloader me = (FileDownloader) o;
String msg = "";
if (me.getDownloadSize() != null) {
long downloaded = me.getInitialSize() + me.getDownloaded() / 1000;
long total = me.getInitialSize() + me.getDownloadSize() / 1000;
msg = format(_("Downloaded {0}kb of {1}kb."), downloaded, total);
}
updateProgress((int) progress + progressStepsDelta * me.getProgress() /
100.0, statusText + " " + msg);
}
});
downloader.download();
if (!downloader.isCompleted())
throw new Exception("Error dowloading " + url, downloader.getError());
// TODO: Check downloaded index
// Replace old index with the updated one
File outputFile = indexer.getIndexFile();
if (outputFile.exists())
outputFile.delete();
if (!tmpFile.renameTo(outputFile))
throw new Exception("An error occurred while updating platforms index!");
}
}

View File

@ -5,6 +5,7 @@ import static processing.app.I18n._;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URISyntaxException;
@ -19,6 +20,7 @@ import cc.arduino.packages.DiscoveryManager;
import cc.arduino.packages.Uploader;
import processing.app.debug.Compiler;
import cc.arduino.packages.contributions.ContributionsIndexer;
import cc.arduino.utils.ArchiveExtractor;
import processing.app.debug.TargetBoard;
import processing.app.debug.LegacyTargetPackage;
import processing.app.debug.TargetPackage;
@ -585,14 +587,34 @@ public class BaseNoGui {
}
static public void initPackages() throws Exception {
reloadAllHardware();
}
static public void reloadAllHardware() throws Exception {
indexer = new ContributionsIndexer(BaseNoGui.getSettingsFolder());
if (!indexer.getIndexFile().isFile())
// TODO: run first setup
;
File indexFile = indexer.getIndexFile();
if (!indexFile.isFile()) {
try {
File distFile = getContentFile("dist/default_package.tar.bz2");
if (distFile.isFile()) {
// If present, unpack distribution file into preferences folder
ArchiveExtractor.extract(distFile, BaseNoGui.getSettingsFolder(), 1);
// TODO: The first distribution file may be removed after extraction?
} else {
// Otherwise create an empty packages index
FileOutputStream out = new FileOutputStream(indexFile);
out.write("{ \"packages\" : [ ] }".getBytes());
out.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
indexer.parseIndex();
indexer.syncWithFilesystem();
System.out.println(indexer);
packages = new HashMap<String, TargetPackage>();
loadHardware(getHardwareFolder());
loadHardware(getSketchbookHardwareFolder());