Send generated URIs on ClientPutDiskDir to registered consumers
[jFCPlib.git] / src / main / java / net / pterodactylus / fcp / quelaton / ClientPutDiskDirCommandImpl.java
index 2cf10c7..d223da2 100644 (file)
@@ -18,6 +18,7 @@ import net.pterodactylus.fcp.ProtocolError;
 import net.pterodactylus.fcp.PutSuccessful;
 import net.pterodactylus.fcp.RequestProgress;
 import net.pterodactylus.fcp.SimpleProgress;
+import net.pterodactylus.fcp.URIGenerated;
 import net.pterodactylus.fcp.Verbosity;
 
 import com.google.common.util.concurrent.ListeningExecutorService;
@@ -36,6 +37,7 @@ public class ClientPutDiskDirCommandImpl implements ClientPutDiskDirCommand {
        private final AtomicReference<String> directory = new AtomicReference<>();
        private final AtomicReference<String> uri = new AtomicReference<>();
        private final List<Consumer<RequestProgress>> requestProgressConsumers = new CopyOnWriteArrayList<>();
+       private final List<Consumer<String>> keyGeneratedConsumers = new CopyOnWriteArrayList<>();
 
        public ClientPutDiskDirCommandImpl(ExecutorService threadPool, ConnectionSupplier connectionSupplier, Supplier<String> identifierGenerator) {
                this.threadPool = MoreExecutors.listeningDecorator(threadPool);
@@ -50,6 +52,12 @@ public class ClientPutDiskDirCommandImpl implements ClientPutDiskDirCommand {
        }
 
        @Override
+       public ClientPutDiskDirCommand onKeyGenerated(Consumer<String> keyGenerated) {
+               keyGeneratedConsumers.add(Objects.requireNonNull(keyGenerated));
+               return this;
+       }
+
+       @Override
        public WithUri fromDirectory(File directory) {
                this.directory.set(Objects.requireNonNull(directory).getPath());
                return this::uri;
@@ -97,6 +105,11 @@ public class ClientPutDiskDirCommandImpl implements ClientPutDiskDirCommand {
                }
 
                @Override
+               protected void consumeURIGenerated(URIGenerated uriGenerated) {
+                       keyGeneratedConsumers.forEach(consumer -> consumer.accept(uriGenerated.getURI()));
+               }
+
+               @Override
                protected void consumeProtocolError(ProtocolError protocolError) {
                        finish();
                }