summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonathan Bauer2014-10-27 14:25:56 +0100
committerJonathan Bauer2014-10-27 14:25:56 +0100
commitd2861ece69415c3e8a4962ab673c1460d6136d6c (patch)
tree49f78640d62ed326e74c366fd25bc9a40e2849ad
parentMerge branch 'master' of ssh://git.openslx.org/openslx-ng/tutor-module (diff)
downloadtutor-module-d2861ece69415c3e8a4962ab673c1460d6136d6c.tar.gz
tutor-module-d2861ece69415c3e8a4962ab673c1460d6136d6c.tar.xz
tutor-module-d2861ece69415c3e8a4962ab673c1460d6136d6c.zip
[client] rework upload code, should fix upload rate problems
-rw-r--r--dozentenmodul/src/main/java/ftp/FTPUtility.java1
-rw-r--r--dozentenmodul/src/main/java/ftp/UploadTask.java58
-rw-r--r--dozentenmodul/src/main/java/gui/image/FTPCreateUploader_GUI.java3
3 files changed, 36 insertions, 26 deletions
diff --git a/dozentenmodul/src/main/java/ftp/FTPUtility.java b/dozentenmodul/src/main/java/ftp/FTPUtility.java
index fffc5503..4ad91c90 100644
--- a/dozentenmodul/src/main/java/ftp/FTPUtility.java
+++ b/dozentenmodul/src/main/java/ftp/FTPUtility.java
@@ -42,6 +42,7 @@ public class FTPUtility {
this.port = port;
this.username = user;
this.password = pass;
+ this.ftpClient.setBufferSize(0);
}
/**
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);
}
}
}
diff --git a/dozentenmodul/src/main/java/gui/image/FTPCreateUploader_GUI.java b/dozentenmodul/src/main/java/gui/image/FTPCreateUploader_GUI.java
index 43df4d12..ad420aec 100644
--- a/dozentenmodul/src/main/java/gui/image/FTPCreateUploader_GUI.java
+++ b/dozentenmodul/src/main/java/gui/image/FTPCreateUploader_GUI.java
@@ -621,8 +621,7 @@ public class FTPCreateUploader_GUI extends JFrame implements
speed = (double) arg0.getNewValue();
// if(speed<=1){
- lblUpSpeed.setText(String.valueOf(speed).substring(0,
- String.valueOf(speed).lastIndexOf(".") + 3)
+ lblUpSpeed.setText(String.format("%.2f", speed)
+ " MB/s");
}