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) {} }; } }