fix(S3): ProgressListener

This commit is contained in:
Manuel Jenny 2021-04-23 09:31:05 +02:00
parent 43fb9fb694
commit c99ff2f190
No known key found for this signature in database
GPG Key ID: 1C80FE62B2BEAA18

View File

@ -40,6 +40,7 @@ import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.concurrent.atomic.AtomicLong;
import timber.log.Timber; import timber.log.Timber;
@ -204,11 +205,15 @@ class S3Impl {
private PutObjectResult uploadFile(final S3File file, DataSource data, final ProgressAware<UploadState> progressAware, final long size) // private PutObjectResult uploadFile(final S3File file, DataSource data, final ProgressAware<UploadState> progressAware, final long size) //
throws IOException { throws IOException {
ProgressListener listener = progressEvent -> progressAware.onProgress( // AtomicLong bytesTransferred = new AtomicLong(0);
progress(UploadState.upload(file)) // ProgressListener listener = progressEvent -> {
.between(0) // bytesTransferred.set(bytesTransferred.get() + progressEvent.getBytesTransferred());
.and(size) // progressAware.onProgress( //
.withValue(progressEvent.getBytesTransferred())); progress(UploadState.upload(file)) //
.between(0) //
.and(size) //
.withValue(bytesTransferred.get()));
};
ObjectMetadata metadata = new ObjectMetadata(); ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentLength(data.size(context).get()); metadata.setContentLength(data.size(context).get());
@ -258,12 +263,16 @@ class S3Impl {
final Optional<File> encryptedTmpFile, // final Optional<File> encryptedTmpFile, //
final Optional<String> cacheKey, // final Optional<String> cacheKey, //
final ProgressAware<DownloadState> progressAware) throws IOException, BackendException { final ProgressAware<DownloadState> 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)) // progress(DownloadState.download(file)) //
.between(0) // .between(0) //
.and(file.getSize().orElse(Long.MAX_VALUE)) // .and(file.getSize().orElse(Long.MAX_VALUE)) //
.withValue(progressEvent.getBytesTransferred())); .withValue(bytesTransferred.get()));
};
GetObjectRequest request = new GetObjectRequest(cloud.s3Bucket(), file.getPath()); GetObjectRequest request = new GetObjectRequest(cloud.s3Bucket(), file.getPath());
request.setGeneralProgressListener(listener); request.setGeneralProgressListener(listener);