From c99ff2f1909bfbe6789d6727e7a1fe0e2c260bb5 Mon Sep 17 00:00:00 2001 From: Manuel Jenny Date: Fri, 23 Apr 2021 09:31:05 +0200 Subject: [PATCH] fix(S3): ProgressListener --- .../org/cryptomator/data/cloud/s3/S3Impl.java | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/data/src/main/java/org/cryptomator/data/cloud/s3/S3Impl.java b/data/src/main/java/org/cryptomator/data/cloud/s3/S3Impl.java index c1a8a6c6..175425e9 100644 --- a/data/src/main/java/org/cryptomator/data/cloud/s3/S3Impl.java +++ b/data/src/main/java/org/cryptomator/data/cloud/s3/S3Impl.java @@ -40,6 +40,7 @@ import java.io.InputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.atomic.AtomicLong; import timber.log.Timber; @@ -204,11 +205,15 @@ class S3Impl { private PutObjectResult uploadFile(final S3File file, DataSource data, final ProgressAware progressAware, final long size) // throws IOException { - ProgressListener listener = progressEvent -> progressAware.onProgress( // - progress(UploadState.upload(file)) // - .between(0) // - .and(size) // - .withValue(progressEvent.getBytesTransferred())); + AtomicLong bytesTransferred = new AtomicLong(0); + ProgressListener listener = progressEvent -> { + bytesTransferred.set(bytesTransferred.get() + progressEvent.getBytesTransferred()); + progressAware.onProgress( // + progress(UploadState.upload(file)) // + .between(0) // + .and(size) // + .withValue(bytesTransferred.get())); + }; ObjectMetadata metadata = new ObjectMetadata(); metadata.setContentLength(data.size(context).get()); @@ -258,12 +263,16 @@ class S3Impl { final Optional encryptedTmpFile, // final Optional cacheKey, // final ProgressAware progressAware) throws IOException, BackendException { + AtomicLong bytesTransferred = new AtomicLong(0); + ProgressListener listener = progressEvent -> { + bytesTransferred.set(bytesTransferred.get() + progressEvent.getBytesTransferred()); - ProgressListener listener = progressEvent -> progressAware.onProgress( // + progressAware.onProgress( // progress(DownloadState.download(file)) // .between(0) // .and(file.getSize().orElse(Long.MAX_VALUE)) // - .withValue(progressEvent.getBytesTransferred())); + .withValue(bytesTransferred.get())); + }; GetObjectRequest request = new GetObjectRequest(cloud.s3Bucket(), file.getPath()); request.setGeneralProgressListener(listener);