X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Ffcp%2Fquelaton%2FClientPutCommandImpl.java;h=8dbaf0f75ef1f192ef37369d35f78e977ba1ae2f;hb=0e2b31d9770e0548962a863f7e96d8a55da63e7d;hp=982fd763b887cc0941700089dbcc4151cabfdd63;hpb=872b858bdb4fd4bfadf50491567d0dd5207851b4;p=jFCPlib.git diff --git a/src/main/java/net/pterodactylus/fcp/quelaton/ClientPutCommandImpl.java b/src/main/java/net/pterodactylus/fcp/quelaton/ClientPutCommandImpl.java index 982fd76..8dbaf0f 100644 --- a/src/main/java/net/pterodactylus/fcp/quelaton/ClientPutCommandImpl.java +++ b/src/main/java/net/pterodactylus/fcp/quelaton/ClientPutCommandImpl.java @@ -21,12 +21,15 @@ import net.pterodactylus.fcp.Key; import net.pterodactylus.fcp.ProtocolError; import net.pterodactylus.fcp.PutFailed; import net.pterodactylus.fcp.PutSuccessful; +import net.pterodactylus.fcp.RequestProgress; +import net.pterodactylus.fcp.SimpleProgress; import net.pterodactylus.fcp.TestDDAComplete; import net.pterodactylus.fcp.TestDDAReply; import net.pterodactylus.fcp.TestDDARequest; import net.pterodactylus.fcp.TestDDAResponse; import net.pterodactylus.fcp.URIGenerated; import net.pterodactylus.fcp.UploadFrom; +import net.pterodactylus.fcp.Verbosity; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListeningExecutorService; @@ -47,6 +50,7 @@ class ClientPutCommandImpl implements ClientPutCommand { private final AtomicReference payload = new AtomicReference<>(); private final AtomicLong length = new AtomicLong(); private final AtomicReference targetFilename = new AtomicReference<>(); + private final List> requestProgressConsumers = new CopyOnWriteArrayList<>(); private final List> keyGenerateds = new CopyOnWriteArrayList<>(); public ClientPutCommandImpl(ExecutorService threadPool, ConnectionSupplier connectionSupplier, Supplier identifierGenerator) { @@ -56,6 +60,12 @@ class ClientPutCommandImpl implements ClientPutCommand { } @Override + public ClientPutCommand onProgress(Consumer requestProgressConsumer) { + requestProgressConsumers.add(Objects.requireNonNull(requestProgressConsumer)); + return this; + } + + @Override public ClientPutCommand onKeyGenerated(Consumer keyGenerated) { keyGenerateds.add(keyGenerated); return this; @@ -113,6 +123,9 @@ class ClientPutCommandImpl implements ClientPutCommand { if (targetFilename.get() != null) { clientPut.setTargetFilename(targetFilename.get()); } + if (!requestProgressConsumers.isEmpty()) { + clientPut.setVerbosity(Verbosity.PROGRESS); + } return clientPut; } @@ -155,6 +168,21 @@ class ClientPutCommandImpl implements ClientPutCommand { } @Override + protected void consumeSimpleProgress(SimpleProgress simpleProgress) { + RequestProgress requestProgress = new RequestProgress( + simpleProgress.getTotal(), + simpleProgress.getRequired(), + simpleProgress.getFailed(), + simpleProgress.getFatallyFailed(), + simpleProgress.getLastProgress(), + simpleProgress.getSucceeded(), + simpleProgress.isFinalizedTotal(), + simpleProgress.getMinSuccessFetchBlocks() + ); + requestProgressConsumers.stream().forEach(consumer -> consumer.accept(requestProgress)); + } + + @Override protected void consumeURIGenerated(URIGenerated uriGenerated) { for (Consumer keyGenerated : keyGenerateds) { keyGenerated.accept(uriGenerated.getURI());