summaryrefslogtreecommitdiffstats
path: root/dozentenmodul/src/main/java/ftp/UploadTask.java
diff options
context:
space:
mode:
Diffstat (limited to 'dozentenmodul/src/main/java/ftp/UploadTask.java')
-rw-r--r--dozentenmodul/src/main/java/ftp/UploadTask.java58
1 files changed, 34 insertions, 24 deletions
diff --git a/dozentenmodul/src/main/java/ftp/UploadTask.java b/dozentenmodul/src/main/java/ftp/UploadTask.java
index eff96d68..40a79f55 100644
--- a/dozentenmodul/src/main/java/ftp/UploadTask.java
+++ b/dozentenmodul/src/main/java/ftp/UploadTask.java
@@ -18,14 +18,18 @@ import models.Image;
*
*/
public class UploadTask extends SwingWorker<Void, Void> {
-
+
/**
- * Logger instance for this class.
+ * Logger instance for this class.
*/
private final static Logger LOGGER = Logger.getLogger(UploadTask.class);
-
+
// 8MB buffer
- private static final int BUFFER_SIZE = 8 * 1024 * 1024;;
+ private static final int BUFFER_SIZE = 1024 * 1024;
+
+ private static final double UPDATE_INTERVAL_SECONDS = 0.6;
+ private static final double UPDATE_INTERVAL_MS = UPDATE_INTERVAL_SECONDS * 1000;
+ private static final double BYTES_PER_MIB = 1024 * 1024;
private String host;
private int port;
@@ -64,21 +68,28 @@ public class UploadTask extends SwingWorker<Void, Void> {
percentCompleted = 0;
long fileSize = uploadFile.length();
Image.image.setFilesize(fileSize);
- long start = System.nanoTime();
- final double NANOS_PER_SECOND = 1000000000.0;
- final double BYTES_PER_MIB = 1024 * 1024;
- while ((bytesRead = inputStream.read(buffer)) != -1
- && isCancelled() == false) {
+ firePropertyChange("filesize", 0, fileSize);
+ long lastUpdate = 0;
+ long currentBytes = 0;
+ long lastBytes = 0;
+ while ((bytesRead = inputStream.read(buffer)) != -1 && !isCancelled()) {
util.writeFileBytes(buffer, 0, bytesRead);
- totalBytesRead += bytesRead;
- percentCompleted = (int) (totalBytesRead * 100 / fileSize);
- double speed = NANOS_PER_SECOND / BYTES_PER_MIB
- * totalBytesRead / (System.nanoTime() - start + 1);
- setProgress(percentCompleted);
- firePropertyChange("speed", 0, speed);
- firePropertyChange("filesize", 0, fileSize);
- firePropertyChange("bytesread", 0, totalBytesRead);
+ currentBytes += bytesRead;
+ long now = System.currentTimeMillis();
+ if (lastUpdate + UPDATE_INTERVAL_MS < now) {
+ totalBytesRead += currentBytes;
+ percentCompleted = (int) ((totalBytesRead * 100) / fileSize);
+ setProgress(percentCompleted);
+ lastBytes = (lastBytes * 2 + currentBytes) / 3;
+ final double speed = lastBytes / UPDATE_INTERVAL_SECONDS;
+ firePropertyChange("speed", 0, speed / BYTES_PER_MIB);
+ firePropertyChange("bytesread", 0, totalBytesRead);
+ lastUpdate = now;
+ currentBytes = 0;
+ }
}
+ percentCompleted = (int) ((totalBytesRead * 100) / fileSize);
+ setProgress(percentCompleted);
inputStream.close();
@@ -102,16 +113,15 @@ public class UploadTask extends SwingWorker<Void, Void> {
*/
@Override
protected void done() {
- if (!isCancelled() && percentCompleted==100) {
+ if (!isCancelled() && percentCompleted == 100) {
LOGGER.info("Datei erfolgreich hochgeladen.");
- JOptionPane.showMessageDialog(null,
- "Datei erfolgreich hochgeladen.", "Message",
- JOptionPane.INFORMATION_MESSAGE);
- } else if(!isCancelled() && percentCompleted != 100){
+ JOptionPane.showMessageDialog(null, "Datei erfolgreich hochgeladen.",
+ "Message", JOptionPane.INFORMATION_MESSAGE);
+ } else if (!isCancelled() && percentCompleted != 100) {
LOGGER.error("Datei wurde unvollständig hochgeladen.");
JOptionPane.showMessageDialog(null,
- "Datei wurde unvollständig hochgeladen. Bitte wiederholen.", "Message",
- JOptionPane.INFORMATION_MESSAGE);
+ "Datei wurde unvollständig hochgeladen. Bitte wiederholen.",
+ "Message", JOptionPane.INFORMATION_MESSAGE);
}
}
}