diff --git a/app/src/main/java/com/github/gotify/api/Api.java b/app/src/main/java/com/github/gotify/api/Api.java new file mode 100644 index 0000000..474ada2 --- /dev/null +++ b/app/src/main/java/com/github/gotify/api/Api.java @@ -0,0 +1,77 @@ +package com.github.gotify.api; + +import android.app.Activity; + +import com.github.gotify.client.ApiCallback; +import com.github.gotify.client.ApiException; +import com.github.gotify.log.Log; + +import java.util.List; +import java.util.Map; + +public class Api { + public static CallExecutor withLogging(ApiCall call) { + return new CallExecutor(call); + } + + private static Callback loggingCallback() { + return Callback.call( + (data) -> {}, + (exception) -> + Log.e("Error while api call: " + exception.getResponseBody(), exception)); + } + + public interface ApiCall { + void call(ApiCallback callback) throws ApiException; + } + + public static class CallExecutor { + private ApiCall call; + + private CallExecutor(ApiCall call) { + this.call = call; + } + + public void handle(Callback callback) { + Callback merged = Callback.merge(callback, loggingCallback()); + try { + call.call(fromCallback(merged)); + } catch (ApiException e) { + merged.onError(e); + } + } + + public void handleInUIThread( + Activity activity, + Callback.SuccessCallback onSuccess, + Callback.ErrorCallback onError) { + handle(Callback.runInUIThread(activity, Callback.call(onSuccess, onError))); + } + + public void handle(Callback.SuccessCallback onSuccess, Callback.ErrorCallback onError) { + handle(Callback.call(onSuccess, onError)); + } + } + + private static ApiCallback fromCallback(Callback callback) { + return new ApiCallback() { + @Override + public void onFailure( + ApiException e, int statusCode, Map> responseHeaders) { + callback.onError(e); + } + + @Override + public void onSuccess( + T result, int statusCode, Map> responseHeaders) { + callback.onSuccess(result); + } + + @Override + public void onUploadProgress(long bytesWritten, long contentLength, boolean done) {} + + @Override + public void onDownloadProgress(long bytesRead, long contentLength, boolean done) {} + }; + } +} diff --git a/app/src/main/java/com/github/gotify/api/Callback.java b/app/src/main/java/com/github/gotify/api/Callback.java new file mode 100644 index 0000000..65e9a7c --- /dev/null +++ b/app/src/main/java/com/github/gotify/api/Callback.java @@ -0,0 +1,57 @@ +package com.github.gotify.api; + +import android.app.Activity; + +import com.github.gotify.client.ApiException; + +public class Callback { + private final SuccessCallback onSuccess; + private final ErrorCallback onError; + + private Callback(SuccessCallback onSuccess, ErrorCallback onError) { + this.onSuccess = onSuccess; + this.onError = onError; + } + + void onSuccess(T data) { + this.onSuccess.onSuccess(data); + } + + void onError(ApiException exception) { + this.onError.onError(exception); + } + + public static Callback call(SuccessCallback onSuccess, ErrorCallback onError) { + return new Callback<>(onSuccess, onError); + } + + public static Callback merge(Callback left, Callback right) { + return new Callback<>( + (data) -> { + left.onSuccess(data); + right.onSuccess(data); + }, + (error) -> { + left.onError(error); + right.onError(error); + }); + } + + public static Callback runInUIThread(Activity context, Callback callback) { + return call( + (data) -> { + context.runOnUiThread(() -> callback.onSuccess(data)); + }, + (e) -> { + context.runOnUiThread(() -> callback.onError(e)); + }); + } + + public interface SuccessCallback { + void onSuccess(T data); + } + + public interface ErrorCallback { + void onError(ApiException e); + } +} diff --git a/app/src/main/java/com/github/gotify/api/ClientFactory.java b/app/src/main/java/com/github/gotify/api/ClientFactory.java new file mode 100644 index 0000000..e0e65eb --- /dev/null +++ b/app/src/main/java/com/github/gotify/api/ClientFactory.java @@ -0,0 +1,40 @@ +package com.github.gotify.api; + +import com.github.gotify.Settings; +import com.github.gotify.client.ApiClient; +import com.github.gotify.client.api.UserApi; +import com.github.gotify.client.api.VersionApi; +import com.github.gotify.client.auth.ApiKeyAuth; +import com.github.gotify.client.auth.HttpBasicAuth; + +public class ClientFactory { + public static ApiClient unauthorized(String baseUrl) { + ApiClient client = new ApiClient(); + client.setBasePath(baseUrl); + return client; + } + + public static ApiClient basicAuth(String baseUrl, String username, String password) { + ApiClient client = unauthorized(baseUrl); + HttpBasicAuth auth = (HttpBasicAuth) client.getAuthentication("basicAuth"); + auth.setUsername(username); + auth.setPassword(password); + + return client; + } + + public static ApiClient clientToken(String baseUrl, String token) { + ApiClient client = unauthorized(baseUrl); + ApiKeyAuth tokenAuth = (ApiKeyAuth) client.getAuthentication("clientTokenHeader"); + tokenAuth.setApiKey(token); + return client; + } + + public static VersionApi versionApi(String baseUrl) { + return new VersionApi(unauthorized(baseUrl)); + } + + public static UserApi userApiWithToken(Settings settings) { + return new UserApi(clientToken(settings.url(), settings.token())); + } +}