diff options
author | desperateCoder <echotodevnull@gmail.com> | 2020-04-28 10:28:14 +0300 |
---|---|---|
committer | desperateCoder <echotodevnull@gmail.com> | 2020-04-28 10:28:24 +0300 |
commit | 531624bb2d1e1007c626594776b6bb152bc2436c (patch) | |
tree | 4781b2d3edd4d8e688f84d4a43b8e01a563051d6 /app/src/main/java/it/niedermann/nextcloud/deck/exceptions | |
parent | fd750835e3d63ae91e0c4a6ad7c87b1dcd099517 (diff) |
#429: fixed duplicate file uploads
Diffstat (limited to 'app/src/main/java/it/niedermann/nextcloud/deck/exceptions')
-rw-r--r-- | app/src/main/java/it/niedermann/nextcloud/deck/exceptions/HandledServerErrors.java | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/exceptions/HandledServerErrors.java b/app/src/main/java/it/niedermann/nextcloud/deck/exceptions/HandledServerErrors.java new file mode 100644 index 000000000..38a63d2c1 --- /dev/null +++ b/app/src/main/java/it/niedermann/nextcloud/deck/exceptions/HandledServerErrors.java @@ -0,0 +1,67 @@ +package it.niedermann.nextcloud.deck.exceptions; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.google.gson.JsonSyntaxException; +import com.nextcloud.android.sso.exceptions.NextcloudHttpRequestFailedException; + +public enum HandledServerErrors { + UNKNOWN(1337, "hopefully won't occurr"), + ATTACHMENTS_FILE_ALREADY_EXISTS(409, "File already exists."), + ; + + private int status; + private String message; + + HandledServerErrors(int status, String message) { + this.status = status; + this.message = message; + } + + public static HandledServerErrors fromThrowable(Throwable throwable) { + if (throwable instanceof NextcloudHttpRequestFailedException) { + NextcloudHttpRequestFailedException requestFailedException = (NextcloudHttpRequestFailedException) throwable; + if (requestFailedException.getCause() != null) { + String errorString = requestFailedException.getCause().getMessage(); + try { + JsonElement jsonElement = JsonParser.parseString(errorString); + if (jsonElement.isJsonObject()){ + ServerError error = new ServerError(); + error.status = requestFailedException.getStatusCode(); + JsonObject errorObj = jsonElement.getAsJsonObject(); + if (errorObj.has("message")){ + error.message = errorObj.get("message").getAsString(); + } + return findByServerError(error); + } + } catch (JsonSyntaxException e){ + return HandledServerErrors.UNKNOWN; + } + } + } + return HandledServerErrors.UNKNOWN; + } + + private static HandledServerErrors findByServerError(ServerError error) { + for (HandledServerErrors value : HandledServerErrors.values()) { + if (value.status == error.status && value.message.equals(error.message)){ + return value; + } + } + return HandledServerErrors.UNKNOWN; + } + + public String getMessage() { + return message; + } + + public int getStatus() { + return status; + } + + private static class ServerError { + private int status; + private String message; + } +} |