Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/stefan-niedermann/nextcloud-deck.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Niedermann <info@niedermann.it>2022-01-17 14:31:59 +0300
committerStefan Niedermann <info@niedermann.it>2022-01-17 14:31:59 +0300
commit1efc1886f74f223e80f7fa5ec0007fd643bff262 (patch)
tree52286750a1142a267b931b80d6210c03632946ce /app/src/main/java/it
parent83e5789646de7717f2f3128b73574c9c4bd3bbc0 (diff)
Make ServerCommunicationErrorHandler more generic
Signed-off-by: Stefan Niedermann <info@niedermann.it>
Diffstat (limited to 'app/src/main/java/it')
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/api/ServerCommunicationErrorHandler.java47
1 files changed, 30 insertions, 17 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/api/ServerCommunicationErrorHandler.java b/app/src/main/java/it/niedermann/nextcloud/deck/api/ServerCommunicationErrorHandler.java
index 1dfa0e706..7da0cf6c7 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/api/ServerCommunicationErrorHandler.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/api/ServerCommunicationErrorHandler.java
@@ -4,38 +4,51 @@ import androidx.annotation.NonNull;
import com.nextcloud.android.sso.exceptions.UnknownErrorException;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
import java.util.Objects;
import it.niedermann.nextcloud.deck.exceptions.OfflineException;
public class ServerCommunicationErrorHandler {
+
+ private static final Handler[] handlers = new Handler[]{
+ new Handler(UnknownErrorException.class, Arrays.asList("econnrefused", "connection refused"), OfflineException.Reason.CONNECTION_REFUSED),
+ new Handler(ClassNotFoundException.class, Collections.singletonList("connecttimeoutexception"), OfflineException.Reason.CONNECTION_TIMEOUT)
+ };
+
public static Throwable translateError(Throwable error) {
try {
- if (error.getClass() == UnknownErrorException.class) {
- return handleSsoExceptions((UnknownErrorException) error);
- } else if (error.getClass() == ClassNotFoundException.class) {
- return handleClassNotFoundError((ClassNotFoundException) error);
- } else {
- return error;
+ for (final var handler : handlers) {
+ if (error.getClass() == handler.originalExceptionType) {
+ return handler.handle(error);
+ }
}
+ return error;
} catch (NullPointerException e) {
return error;
}
}
- private static Throwable handleSsoExceptions(@NonNull UnknownErrorException error) {
- final String message = Objects.requireNonNull(error.getMessage(), "SSO handler got no ExceptionMessage").toLowerCase();
- if (message.contains("econnrefused") || message.contains("connection refused")) {
- return new OfflineException(OfflineException.Reason.CONNECTION_REFUSED);
+ private static class Handler {
+ private final Class<?> originalExceptionType;
+ private final Collection<String> indicators;
+ private final OfflineException.Reason reason;
+
+ Handler(@NonNull Class<?> originalExceptionType, @NonNull Collection<String> indicators, @NonNull OfflineException.Reason reason) {
+ this.originalExceptionType = originalExceptionType;
+ this.indicators = indicators;
+ this.reason = reason;
}
- return error;
- }
- private static Throwable handleClassNotFoundError(@NonNull ClassNotFoundException error) {
- final String message = Objects.requireNonNull(error.getMessage(), "ClassNotFound handler got no ExceptionMessage").toLowerCase();
- if (message.contains("connecttimeoutexception")) {
- return new OfflineException(OfflineException.Reason.CONNECTION_TIMEOUT);
+ @NonNull
+ Throwable handle(@NonNull Throwable error) throws NullPointerException {
+ final String message = Objects.requireNonNull(error.getMessage(), "ExceptionMessage is null").toLowerCase();
+ if (indicators.stream().anyMatch(message::contains)) {
+ return new OfflineException(reason);
+ }
+ return error;
}
- return error;
}
}