diff options
Diffstat (limited to 'dozentenmodul/src/main/java/ftp/UploadTask.java')
| -rw-r--r-- | dozentenmodul/src/main/java/ftp/UploadTask.java | 58 |
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); } } } |
