summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Rettberg2015-07-21 17:08:35 +0200
committerSimon Rettberg2015-07-21 17:08:35 +0200
commit183729494952f55bbd5a7e28fd59289d8eb3cc35 (patch)
tree7508a7abc9779396398090b7f588a87d1815182e
parent[client] Continue refactoring Upload and Download Task (diff)
downloadtutor-module-183729494952f55bbd5a7e28fd59289d8eb3cc35.tar.gz
tutor-module-183729494952f55bbd5a7e28fd59289d8eb3cc35.tar.xz
tutor-module-183729494952f55bbd5a7e28fd59289d8eb3cc35.zip
[client] Fixes and improvements related to file transfer; rename bytesToGigabytes to just bytes
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/TransferEvent.java2
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/TransferTask.java56
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/TableHelper.java4
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadPage.java31
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/util/FormatHelper.java6
5 files changed, 67 insertions, 32 deletions
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/TransferEvent.java b/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/TransferEvent.java
index 890b4193..4206da81 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/TransferEvent.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/TransferEvent.java
@@ -39,7 +39,7 @@ public class TransferEvent {
this.state = state;
this.progress = progress;
this.speedRaw = speedRaw;
- this.speed = FormatHelper.byteToGigabyte(speedRaw, false) + "/s";
+ this.speed = FormatHelper.bytes(speedRaw, false) + "/s";
this.remainingRaw = remainingRaw;
if (remainingRaw == 0) {
this.remaining = null;
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/TransferTask.java b/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/TransferTask.java
index 3bb8fa94..355d7393 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/TransferTask.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/TransferTask.java
@@ -10,7 +10,7 @@ import org.openslx.filetransfer.Transfer;
import org.openslx.util.Util;
public abstract class TransferTask implements Runnable {
-
+
protected static final double BYTES_PER_MIB = 1024 * 1024;
protected static final long CHUNK_SIZE = 16 * 1024 * 1024;
@@ -33,10 +33,10 @@ public abstract class TransferTask implements Runnable {
private boolean endgame = false;
private int minConnectionCount = 1;
private int failCount = 0;
-
+
protected final File localFile;
protected final long fileSize;
-
+
protected TransferTask(File localFile, long fileSize) {
this.localFile = localFile;
this.fileSize = fileSize;
@@ -54,19 +54,21 @@ public abstract class TransferTask implements Runnable {
ensureActivity();
Util.sleep(UPDATE_INTERVAL_MS);
}
- for (TransferThread t : transfers) {
- t.getTransfer().cancel();
- t.interrupt();
- Util.joinThread(t);
+ isRunning = false;
+ List<TransferThread> joinList = new ArrayList<>();
+ synchronized (transfers) {
+ isCancelled = true;
+ joinList.addAll(transfers);
+ joinList.addAll(connectingTransfers);
}
- for (TransferThread t : connectingTransfers) {
- if (t.getTransfer() != null) {
- t.getTransfer().cancel();
+ for (TransferThread t : joinList) {
+ Transfer transfer = t.getTransfer();
+ if (transfer != null) {
+ transfer.cancel();
}
t.interrupt();
Util.joinThread(t);
}
- isRunning = false;
cleanup();
}
@@ -77,6 +79,10 @@ public abstract class TransferTask implements Runnable {
public boolean isRunning() {
return isRunning;
}
+
+ public boolean isCanceled() {
+ return isCancelled;
+ }
private void fireEvent(TransferEvent event) {
synchronized (listeners) {
@@ -113,21 +119,26 @@ public abstract class TransferTask implements Runnable {
}
public void cancel() {
+ final List<TransferThread> joiners;
synchronized (transfers) {
- for (TransferThread t : transfers) {
+ if (isCancelled)
+ return;
+ isCancelled = true;
+ joiners = new ArrayList<>();
+ joiners.addAll(transfers);
+ joiners.addAll(connectingTransfers);
+ }
+ for (TransferThread t : joiners) {
+ if (t.getTransfer() != null) {
t.getTransfer().cancel();
}
- for (TransferThread t : connectingTransfers) {
- if (t.getTransfer() != null) {
- t.getTransfer().cancel();
- }
- }
- isCancelled = true;
}
}
private final void ensureActivity() {
synchronized (transfers) {
+ if (isCancelled)
+ return;
if (endgame && (!transfers.isEmpty() || !connectingTransfers.isEmpty()))
return;
Iterator<TransferThread> it = transfers.iterator();
@@ -162,9 +173,14 @@ public abstract class TransferTask implements Runnable {
protected final void connectSucceeded(TransferThread thread) {
synchronized (transfers) {
connectingTransfers.remove(thread);
- transfers.add(thread);
- failCount = 0;
+ if (!isCancelled) {
+ transfers.add(thread);
+ failCount = 0;
+ return;
+ }
}
+ thread.getTransfer().cancel();
+ thread.interrupt();
}
protected final void transferEnded(TransferThread thread, boolean success) {
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/TableHelper.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/TableHelper.java
index bb6a848b..f868c574 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/TableHelper.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/TableHelper.java
@@ -119,7 +119,9 @@ public final class TableHelper {
@Override
public String getText(Object element) {
ImageSummaryRead image = (ImageSummaryRead) element;
- return FormatHelper.byteToGigabyte(image.getFileSize(), false);
+ if (image.getCurrentVersionId() == null)
+ return "-";
+ return FormatHelper.bytes(image.getFileSize(), false);
}
});
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadPage.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadPage.java
index 5374e370..4f9ed944 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadPage.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadPage.java
@@ -328,6 +328,8 @@ public class ImageUploadPage extends ImageUploadPageLayout {
// TODO: Maybe only display percentage in the wizard pages once we have the status bar in mainwindow
blockProgressBar.setStatus(event.progress);
}
+ if (event.state == null)
+ return;
// TODO: Move user interaction to central listener when we have it
switch (event.state) {
case FINISHED:
@@ -335,6 +337,8 @@ public class ImageUploadPage extends ImageUploadPageLayout {
MainWindow.showMessageBox("Upload abgeschlossen.", MessageType.INFO, LOGGER, null);
break;
case ERROR:
+ if (uploadWizardState.uploadTask != null && uploadWizardState.uploadTask.isCanceled())
+ return;
if (MainWindow.showMessageBox("Fehler beim Upload: " + event.errorMessage
+ "\nNochmal versuchen?", MessageType.ERROR_RETRY, LOGGER, null)) {
// user wants to try again, just reset transferInformation ...
@@ -355,14 +359,27 @@ public class ImageUploadPage extends ImageUploadPageLayout {
private void cancelUpload() {
LOGGER.debug("Cancelling upload ...");
// first tell the server about this
- try {
- ThriftManager.getSatClient().cancelUpload(uploadWizardState.transferInformation.getToken());
- } catch (Exception e) {
- LOGGER.debug("Remote error while canceling upload for " + uploadWizardState.uuid, e);
- }
- // Then cancel the task
- uploadWizardState.uploadTask.cancel();
+ QuickTimer.scheduleOnce(new Task() {
+ @Override
+ public void fire() {
+ try {
+ ThriftManager.getSatClient().cancelUpload(
+ uploadWizardState.transferInformation.getToken());
+ } catch (Exception e) {
+ LOGGER.debug("Remote error while canceling upload for " + uploadWizardState.uuid, e);
+ }
+ // Then cancel the task
+ uploadWizardState.uploadTask.cancel();
+ Gui.asyncExec(new Runnable() {
+ @Override
+ public void run() {
+ cancelUpload.setVisible(false);
+ }
+ });
+ }
+ });
cancelUpload.setEnabled(false);
+ setPageComplete(false);
blockProgressBar.setVisible(false);
}
}
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/util/FormatHelper.java b/dozentenmodul/src/main/java/org/openslx/dozmod/util/FormatHelper.java
index 68b90661..c3251276 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/util/FormatHelper.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/util/FormatHelper.java
@@ -55,10 +55,10 @@ public class FormatHelper {
* (1024B = 1KiB)
* @return Formatted string, i.e. <code>54.6 GiB</code>
*/
- public static String byteToGigabyte(long bytes, boolean si) {
- int unit = si ? 1000 : 1024;
+ public static String bytes(long bytes, boolean si) {
+ final int unit = si ? 1000 : 1024;
if (bytes < unit)
- return bytes + THIN_SP + "B";
+ return String.valueOf(bytes) + THIN_SP + "B";
int exp = (int) (Math.log(bytes) / Math.log(unit));
String pre = (si ? "kMGTPEZY" : "KMGTPEZY").charAt(exp - 1) + (si ? "" : "i");
return String.format("%.1f" + THIN_SP + "%sB", bytes / Math.pow(unit, exp), pre);