projects
/
jFCPlib.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Follow redirects in ClientGet
[jFCPlib.git]
/
src
/
main
/
java
/
net
/
pterodactylus
/
fcp
/
quelaton
/
ClientGetCommandImpl.java
diff --git
a/src/main/java/net/pterodactylus/fcp/quelaton/ClientGetCommandImpl.java
b/src/main/java/net/pterodactylus/fcp/quelaton/ClientGetCommandImpl.java
index
7908f5c
..
e60fed7
100644
(file)
--- a/
src/main/java/net/pterodactylus/fcp/quelaton/ClientGetCommandImpl.java
+++ b/
src/main/java/net/pterodactylus/fcp/quelaton/ClientGetCommandImpl.java
@@
-2,9
+2,12
@@
package net.pterodactylus.fcp.quelaton;
import java.io.IOException;
import java.io.InputStream;
import java.io.IOException;
import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Optional;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.Optional;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
+import java.util.function.Consumer;
import java.util.function.Supplier;
import net.pterodactylus.fcp.AllData;
import java.util.function.Supplier;
import net.pterodactylus.fcp.AllData;
@@
-27,6
+30,7
@@
class ClientGetCommandImpl implements ClientGetCommand {
private final ListeningExecutorService threadPool;
private final ConnectionSupplier connectionSupplier;
private final Supplier<String> identifierGenerator;
private final ListeningExecutorService threadPool;
private final ConnectionSupplier connectionSupplier;
private final Supplier<String> identifierGenerator;
+ private final List<Consumer<String>> onRedirects = new ArrayList<>();
private boolean ignoreDataStore;
private boolean dataStoreOnly;
private boolean ignoreDataStore;
private boolean dataStoreOnly;
@@
-42,6
+46,12
@@
class ClientGetCommandImpl implements ClientGetCommand {
}
@Override
}
@Override
+ public ClientGetCommand onRedirect(Consumer<String> onRedirect) {
+ onRedirects.add(onRedirect);
+ return this;
+ }
+
+ @Override
public ClientGetCommand ignoreDataStore() {
ignoreDataStore = true;
return this;
public ClientGetCommand ignoreDataStore() {
ignoreDataStore = true;
return this;
@@
-83,14
+93,13
@@
class ClientGetCommandImpl implements ClientGetCommand {
}
private Optional<Data> execute(String uri) throws InterruptedException, ExecutionException, IOException {
}
private Optional<Data> execute(String uri) throws InterruptedException, ExecutionException, IOException {
- ClientGet clientGet = createClientGetCommand(uri);
+ ClientGet clientGet = createClientGetCommand(
identifierGenerator.get(),
uri);
try (ClientGetDialog clientGetDialog = new ClientGetDialog()) {
return clientGetDialog.send(clientGet).get();
}
}
try (ClientGetDialog clientGetDialog = new ClientGetDialog()) {
return clientGetDialog.send(clientGet).get();
}
}
- private ClientGet createClientGetCommand(String uri) {
- String identifier = identifierGenerator.get();
+ private ClientGet createClientGetCommand(String identifier, String uri) {
ClientGet clientGet = new ClientGet(uri, identifier, ReturnType.direct);
if (ignoreDataStore) {
clientGet.setIgnoreDataStore(true);
ClientGet clientGet = new ClientGet(uri, identifier, ReturnType.direct);
if (ignoreDataStore) {
clientGet.setIgnoreDataStore(true);
@@
-116,7
+125,8
@@
class ClientGetCommandImpl implements ClientGetCommand {
private class ClientGetDialog extends FcpDialog<Optional<Data>> {
public ClientGetDialog() throws IOException {
private class ClientGetDialog extends FcpDialog<Optional<Data>> {
public ClientGetDialog() throws IOException {
- super(ClientGetCommandImpl.this.threadPool, ClientGetCommandImpl.this.connectionSupplier.get(), Optional.<Data>empty());
+ super(ClientGetCommandImpl.this.threadPool, ClientGetCommandImpl.this.connectionSupplier.get(),
+ Optional.<Data>empty());
}
@Override
}
@Override
@@
-155,7
+165,12
@@
class ClientGetCommandImpl implements ClientGetCommand {
@Override
protected void consumeGetFailed(GetFailed getFailed) {
@Override
protected void consumeGetFailed(GetFailed getFailed) {
- finish();
+ if (getFailed.getCode() == 27) {
+ onRedirects.forEach(onRedirect -> onRedirect.accept(getFailed.getRedirectURI()));
+ sendMessage(createClientGetCommand(getIdentifier(), getFailed.getRedirectURI()));
+ } else {
+ finish();
+ }
}
}
}
}