X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Ffcp%2Fquelaton%2FClientPutDiskDirCommandImpl.java;h=2cf10c723d861d25f78fd5e6a8b7268250756969;hb=c2522a887d02f692017b4b9c8e1d31472e41001f;hp=3a2192210111a7b8bcd3f3477084eac5e52c4ac2;hpb=f3d387a780cd3da40847ba199f492f7752bef50a;p=jFCPlib.git diff --git a/src/main/java/net/pterodactylus/fcp/quelaton/ClientPutDiskDirCommandImpl.java b/src/main/java/net/pterodactylus/fcp/quelaton/ClientPutDiskDirCommandImpl.java index 3a21922..2cf10c7 100644 --- a/src/main/java/net/pterodactylus/fcp/quelaton/ClientPutDiskDirCommandImpl.java +++ b/src/main/java/net/pterodactylus/fcp/quelaton/ClientPutDiskDirCommandImpl.java @@ -2,17 +2,23 @@ package net.pterodactylus.fcp.quelaton; import java.io.File; import java.io.IOException; +import java.util.List; import java.util.Objects; import java.util.Optional; +import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.atomic.AtomicReference; +import java.util.function.Consumer; import java.util.function.Supplier; import net.pterodactylus.fcp.ClientPutDiskDir; import net.pterodactylus.fcp.Key; import net.pterodactylus.fcp.ProtocolError; import net.pterodactylus.fcp.PutSuccessful; +import net.pterodactylus.fcp.RequestProgress; +import net.pterodactylus.fcp.SimpleProgress; +import net.pterodactylus.fcp.Verbosity; import com.google.common.util.concurrent.ListeningExecutorService; import com.google.common.util.concurrent.MoreExecutors; @@ -29,6 +35,7 @@ public class ClientPutDiskDirCommandImpl implements ClientPutDiskDirCommand { private final Supplier identifierGenerator; private final AtomicReference directory = new AtomicReference<>(); private final AtomicReference uri = new AtomicReference<>(); + private final List> requestProgressConsumers = new CopyOnWriteArrayList<>(); public ClientPutDiskDirCommandImpl(ExecutorService threadPool, ConnectionSupplier connectionSupplier, Supplier identifierGenerator) { this.threadPool = MoreExecutors.listeningDecorator(threadPool); @@ -37,6 +44,12 @@ public class ClientPutDiskDirCommandImpl implements ClientPutDiskDirCommand { } @Override + public ClientPutDiskDirCommand onProgress(Consumer requestProgressConsumer) { + requestProgressConsumers.add(Objects.requireNonNull(requestProgressConsumer)); + return this; + } + + @Override public WithUri fromDirectory(File directory) { this.directory.set(Objects.requireNonNull(directory).getPath()); return this::uri; @@ -49,6 +62,9 @@ public class ClientPutDiskDirCommandImpl implements ClientPutDiskDirCommand { private Optional execute() throws IOException, ExecutionException, InterruptedException { ClientPutDiskDir clientPutDiskDir = new ClientPutDiskDir(uri.get(), identifierGenerator.get(), directory.get()); + if (!requestProgressConsumers.isEmpty()) { + clientPutDiskDir.setVerbosity(Verbosity.PROGRESS); + } try (ClientPutDiskDirDialog clientPutDiskDirDialog = new ClientPutDiskDirDialog()) { return clientPutDiskDirDialog.send(clientPutDiskDir).get(); } @@ -66,6 +82,21 @@ public class ClientPutDiskDirCommandImpl implements ClientPutDiskDirCommand { } @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 consumeProtocolError(ProtocolError protocolError) { finish(); }