forked from Qortal/qortal
Show progress status when downloading a bootstrap
This commit is contained in:
parent
289dae0780
commit
65dca36ae1
@ -15,8 +15,11 @@ import org.qortal.settings.Settings;
|
|||||||
import org.qortal.utils.NTP;
|
import org.qortal.utils.NTP;
|
||||||
import org.qortal.utils.SevenZ;
|
import org.qortal.utils.SevenZ;
|
||||||
|
|
||||||
|
import java.io.BufferedInputStream;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.net.HttpURLConnection;
|
||||||
|
import java.net.MalformedURLException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.nio.file.*;
|
import java.nio.file.*;
|
||||||
import java.security.SecureRandom;
|
import java.security.SecureRandom;
|
||||||
@ -370,12 +373,47 @@ public class Bootstrap {
|
|||||||
int index = new SecureRandom().nextInt(hosts.length);
|
int index = new SecureRandom().nextInt(hosts.length);
|
||||||
String bootstrapHost = hosts[index];
|
String bootstrapHost = hosts[index];
|
||||||
String bootstrapFilename = this.getFilename();
|
String bootstrapFilename = this.getFilename();
|
||||||
|
|
||||||
try {
|
|
||||||
this.updateStatus("Downloading bootstrap...");
|
|
||||||
String bootstrapUrl = String.format("%s/%s", bootstrapHost, bootstrapFilename);
|
String bootstrapUrl = String.format("%s/%s", bootstrapHost, bootstrapFilename);
|
||||||
InputStream in = new URL(bootstrapUrl).openStream();
|
|
||||||
Files.copy(in, path, REPLACE_EXISTING);
|
// Delete an existing file if it exists
|
||||||
|
try {
|
||||||
|
Files.delete(path);
|
||||||
|
} catch (IOException e) {
|
||||||
|
// No need to do anything
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the total file size
|
||||||
|
URL url;
|
||||||
|
long fileSize;
|
||||||
|
try {
|
||||||
|
url = new URL(bootstrapUrl);
|
||||||
|
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
||||||
|
connection.setRequestMethod("HEAD");
|
||||||
|
connection.connect();
|
||||||
|
fileSize = connection.getContentLengthLong();
|
||||||
|
connection.disconnect();
|
||||||
|
|
||||||
|
} catch (MalformedURLException e) {
|
||||||
|
throw new DataException(String.format("Malformed URL when downloading bootstrap: %s", e.getMessage()));
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new DataException(String.format("Unable to download bootstrap: %s", e.getMessage()));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Download the file and update the status with progress
|
||||||
|
try (BufferedInputStream in = new BufferedInputStream(url.openStream());
|
||||||
|
FileOutputStream fileOutputStream = new FileOutputStream(path.toFile())) {
|
||||||
|
byte[] buffer = new byte[1024 * 1024];
|
||||||
|
long downloaded = 0;
|
||||||
|
int bytesRead;
|
||||||
|
while ((bytesRead = in.read(buffer, 0, 1024)) != -1) {
|
||||||
|
fileOutputStream.write(buffer, 0, bytesRead);
|
||||||
|
downloaded += bytesRead;
|
||||||
|
|
||||||
|
if (fileSize > 0) {
|
||||||
|
int progress = (int)((double)downloaded / (double)fileSize * 100);
|
||||||
|
SplashFrame.getInstance().updateStatus(String.format("Downloading bootstrap... (%d%%)", progress));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new DataException(String.format("Unable to download bootstrap: %s", e.getMessage()));
|
throw new DataException(String.format("Unable to download bootstrap: %s", e.getMessage()));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user