diff options
author | desperateCoder <echotodevnull@gmail.com> | 2023-03-23 13:46:57 +0300 |
---|---|---|
committer | desperateCoder <echotodevnull@gmail.com> | 2024-01-03 16:12:46 +0300 |
commit | dbba1654ad6c61288251d63a08392ccd54fca789 (patch) | |
tree | 23cb3f2f976bcbe7244e4a6d5c72d0194af4b392 /app/src/main/java/it/niedermann/nextcloud/deck/remote | |
parent | f460b92cfbc273c0fede4ef5f8aee29c87878c52 (diff) |
move from observables to calls (get rid of RxJava) -> WIP
Diffstat (limited to 'app/src/main/java/it/niedermann/nextcloud/deck/remote')
6 files changed, 92 insertions, 88 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/remote/adapters/ServerAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/remote/adapters/ServerAdapter.java index 33c781a5d..c33aaf5fa 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/remote/adapters/ServerAdapter.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/remote/adapters/ServerAdapter.java @@ -10,7 +10,6 @@ import android.webkit.MimeTypeMap; import androidx.annotation.NonNull; import androidx.preference.PreferenceManager; -import com.nextcloud.android.sso.api.ParsedResponse; import com.nextcloud.android.sso.model.SingleSignOnAccount; import java.io.File; @@ -94,7 +93,7 @@ public class ServerAdapter { // return lastSyncHeader; } - public void getBoards(@NonNull ResponseCallback<ParsedResponse<List<FullBoard>>> responseCallback) { + public void getBoards(@NonNull ResponseCallback<List<FullBoard>> responseCallback) { RequestHelper.request(provider, () -> isEtagsEnabled() ? provider.getDeckAPI().getBoards(true, getLastSyncDateFormatted(responseCallback.getAccount().getId()), responseCallback.getAccount().getBoardsEtag()) : provider.getDeckAPI().getBoards(true, getLastSyncDateFormatted(responseCallback.getAccount().getId())), responseCallback); @@ -104,7 +103,7 @@ public class ServerAdapter { return sharedPreferences.getBoolean(prefKeyEtags, true); } - public void getCapabilities(String eTag, @NonNull ResponseCallback<ParsedResponse<Capabilities>> responseCallback) { + public void getCapabilities(String eTag, @NonNull ResponseCallback<Capabilities> responseCallback) { ensureInternetConnection(); RequestHelper.request(provider, () -> provider.getNextcloudAPI().getCapabilities(eTag), responseCallback); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/remote/api/DeckAPI.java b/app/src/main/java/it/niedermann/nextcloud/deck/remote/api/DeckAPI.java index 576ccc33b..b6a35c926 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/remote/api/DeckAPI.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/remote/api/DeckAPI.java @@ -1,11 +1,8 @@ package it.niedermann.nextcloud.deck.remote.api; -import com.nextcloud.android.sso.api.ParsedResponse; - import java.util.List; -import io.reactivex.Observable; import it.niedermann.nextcloud.deck.model.AccessControl; import it.niedermann.nextcloud.deck.model.Attachment; import it.niedermann.nextcloud.deck.model.Board; @@ -20,6 +17,7 @@ import it.niedermann.nextcloud.deck.model.propagation.CardUpdate; import it.niedermann.nextcloud.deck.model.propagation.Reorder; import okhttp3.MultipartBody; import okhttp3.ResponseBody; +import retrofit2.Call; import retrofit2.http.Body; import retrofit2.http.DELETE; import retrofit2.http.Field; @@ -45,136 +43,136 @@ public interface DeckAPI { // Boards @POST("v1.0/boards") - Observable<FullBoard> createBoard(@Body Board board); + Call<FullBoard> createBoard(@Body Board board); @GET("v1.0/boards/{id}") - Observable<FullBoard> getBoard(@Path("id") long id, @Header(MODIFIED_SINCE_HEADER) String lastSync); + Call<FullBoard> getBoard(@Path("id") long id, @Header(MODIFIED_SINCE_HEADER) String lastSync); @PUT("v1.0/boards/{id}") - Observable<FullBoard> updateBoard(@Path("id") long id, @Body Board board); + Call<FullBoard> updateBoard(@Path("id") long id, @Body Board board); @DELETE("v1.0/boards/{id}") - Observable<Void> deleteBoard(@Path("id") long id); + Call<Void> deleteBoard(@Path("id") long id); @DELETE("v1.0/boards/{id}/undo_delete") - Observable<FullBoard> restoreBoard(@Path("id") long id); + Call<FullBoard> restoreBoard(@Path("id") long id); @GET("v1.0/boards") - Observable<ParsedResponse<List<FullBoard>>> getBoards(@Query("details") boolean verbose, @Header(MODIFIED_SINCE_HEADER) String lastSync, @Header(IF_NONE_MATCH) String eTag); + Call<List<FullBoard>> getBoards(@Query("details") boolean verbose, @Header(MODIFIED_SINCE_HEADER) String lastSync, @Header(IF_NONE_MATCH) String eTag); @GET("v1.0/boards") - Observable<ParsedResponse<List<FullBoard>>> getBoards(@Query("details") boolean verbose, @Header(MODIFIED_SINCE_HEADER) String lastSync); + Call<List<FullBoard>> getBoards(@Query("details") boolean verbose, @Header(MODIFIED_SINCE_HEADER) String lastSync); // Stacks @POST("v1.0/boards/{boardId}/stacks") - Observable<FullStack> createStack(@Path("boardId") long boardId, @Body Stack stack); + Call<FullStack> createStack(@Path("boardId") long boardId, @Body Stack stack); @PUT("v1.0/boards/{boardId}/stacks/{stackId}") - Observable<FullStack> updateStack(@Path("boardId") long boardId, @Path("stackId") long id, @Body Stack stack); + Call<FullStack> updateStack(@Path("boardId") long boardId, @Path("stackId") long id, @Body Stack stack); @DELETE("v1.0/boards/{boardId}/stacks/{stackId}") - Observable<Void> deleteStack(@Path("boardId") long boardId, @Path("stackId") long id); + Call<Void> deleteStack(@Path("boardId") long boardId, @Path("stackId") long id); @GET("v1.0/boards/{boardId}/stacks/{stackId}") - Observable<FullStack> getStack(@Path("boardId") long boardId, @Path("stackId") long id, @Header(MODIFIED_SINCE_HEADER) String lastSync); + Call<FullStack> getStack(@Path("boardId") long boardId, @Path("stackId") long id, @Header(MODIFIED_SINCE_HEADER) String lastSync); @GET("v1.0/boards/{boardId}/stacks") - Observable<List<FullStack>> getStacks(@Path("boardId") long boardId, @Header(MODIFIED_SINCE_HEADER) String lastSync); + Call<List<FullStack>> getStacks(@Path("boardId") long boardId, @Header(MODIFIED_SINCE_HEADER) String lastSync); @GET("v1.0/boards/{boardId}/stacks/archived") - Observable<List<Stack>> getArchivedStacks(@Path("boardId") long boardId, @Header(MODIFIED_SINCE_HEADER) String lastSync); + Call<List<Stack>> getArchivedStacks(@Path("boardId") long boardId, @Header(MODIFIED_SINCE_HEADER) String lastSync); // Cards @POST("v1.0/boards/{boardId}/stacks/{stackId}/cards") - Observable<FullCard> createCard(@Path("boardId") long boardId, @Path("stackId") long stackId, @Body Card card); + Call<FullCard> createCard(@Path("boardId") long boardId, @Path("stackId") long stackId, @Body Card card); @PUT("v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}") - Observable<FullCard> updateCard(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Body CardUpdate card); + Call<FullCard> updateCard(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Body CardUpdate card); @FormUrlEncoded @PUT("v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}/assignLabel") - Observable<Void> assignLabelToCard(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Field("labelId") long labelId); + Call<Void> assignLabelToCard(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Field("labelId") long labelId); @FormUrlEncoded @PUT("v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}/removeLabel") - Observable<Void> unassignLabelFromCard(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Field("labelId") long labelId); + Call<Void> unassignLabelFromCard(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Field("labelId") long labelId); @FormUrlEncoded @PUT("v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}/assignUser") - Observable<Void> assignUserToCard(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Field("userId") String userUID); + Call<Void> assignUserToCard(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Field("userId") String userUID); @FormUrlEncoded @PUT("v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}/unassignUser") - Observable<Void> unassignUserFromCard(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Field("userId") String userUID); + Call<Void> unassignUserFromCard(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Field("userId") String userUID); @PUT("v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}/reorder") - Observable<List<FullCard>> moveCard(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Body Reorder reorder); + Call<List<FullCard>> moveCard(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Body Reorder reorder); @DELETE("v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}") - Observable<Void> deleteCard(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId); + Call<Void> deleteCard(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId); /** * @see <a href="https://github.com/nextcloud/deck/issues/2874">This endpoint does only return {@link Attachment}s of type {@link EAttachmentType.DECK_FILE}</a> */ @SuppressWarnings("JavadocReference") @GET("v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}") - Observable<FullCard> getCard_1_0(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Header(MODIFIED_SINCE_HEADER) String lastSync); + Call<FullCard> getCard_1_0(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Header(MODIFIED_SINCE_HEADER) String lastSync); @GET("v1.1/boards/{boardId}/stacks/{stackId}/cards/{cardId}") - Observable<FullCard> getCard_1_1(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Header(MODIFIED_SINCE_HEADER) String lastSync); + Call<FullCard> getCard_1_1(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Header(MODIFIED_SINCE_HEADER) String lastSync); // Labels @GET("v1.0/boards/{boardId}/labels/{labelId}") - Observable<Label> getLabel(@Path("boardId") long boardId, @Path("labelId") long labelId, @Header(MODIFIED_SINCE_HEADER) String lastSync); + Call<Label> getLabel(@Path("boardId") long boardId, @Path("labelId") long labelId, @Header(MODIFIED_SINCE_HEADER) String lastSync); @PUT("v1.0/boards/{boardId}/labels/{labelId}") - Observable<Label> updateLabel(@Path("boardId") long boardId, @Path("labelId") long labelId, @Body Label label); + Call<Label> updateLabel(@Path("boardId") long boardId, @Path("labelId") long labelId, @Body Label label); @POST("v1.0/boards/{boardId}/labels") - Observable<Label> createLabel(@Path("boardId") long boardId, @Body Label label); + Call<Label> createLabel(@Path("boardId") long boardId, @Body Label label); @DELETE("v1.0/boards/{boardId}/labels/{labelId}") - Observable<Void> deleteLabel(@Path("boardId") long boardId, @Path("labelId") long labelId); + Call<Void> deleteLabel(@Path("boardId") long boardId, @Path("labelId") long labelId); // Attachments @GET("v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}/attachments/{attachmentId}") - Observable<ResponseBody> downloadAttachment(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Path("attachmentId") long attachmentId); + Call<ResponseBody> downloadAttachment(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Path("attachmentId") long attachmentId); @GET("v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}/attachments") - Observable<List<Attachment>> getAttachments(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId); + Call<List<Attachment>> getAttachments(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId); @Multipart @POST("v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}/attachments") - Observable<Attachment> uploadAttachment(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Part MultipartBody.Part type, @Part MultipartBody.Part attachment); + Call<Attachment> uploadAttachment(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Part MultipartBody.Part type, @Part MultipartBody.Part attachment); @Multipart @PUT("v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}/attachments") - Observable<Attachment> updateAttachment(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Path("attachmentId") long attachmentId, @Part MultipartBody.Part type, @Part MultipartBody.Part attachment); + Call<Attachment> updateAttachment(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Path("attachmentId") long attachmentId, @Part MultipartBody.Part type, @Part MultipartBody.Part attachment); @DELETE("v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}/attachments/{attachmentId}") - Observable<Void> deleteAttachment(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Path("attachmentId") long attachmentId); + Call<Void> deleteAttachment(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Path("attachmentId") long attachmentId); @PUT("v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}/attachments/{attachmentId}/restore") - Observable<Attachment> restoreAttachment(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Path("attachmentId") long attachmentId); + Call<Attachment> restoreAttachment(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Path("attachmentId") long attachmentId); // Access control lists @POST("v1.0/boards/{boardId}/acl") - Observable<AccessControl> createAccessControl(@Path("boardId") long boardId, @Body AccessControl acl); + Call<AccessControl> createAccessControl(@Path("boardId") long boardId, @Body AccessControl acl); @PUT("v1.0/boards/{boardId}/acl/{aclId}") - Observable<AccessControl> updateAccessControl(@Path("boardId") long boardId, @Path("aclId") long aclId, @Body AccessControl acl); + Call<AccessControl> updateAccessControl(@Path("boardId") long boardId, @Path("aclId") long aclId, @Body AccessControl acl); @DELETE("v1.0/boards/{boardId}/acl/{aclId}") - Observable<Void> deleteAccessControl(@Path("boardId") long boardId, @Path("aclId") long aclId, @Body AccessControl acl); + Call<Void> deleteAccessControl(@Path("boardId") long boardId, @Path("aclId") long aclId, @Body AccessControl acl); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/remote/api/IResponseCallback.java b/app/src/main/java/it/niedermann/nextcloud/deck/remote/api/IResponseCallback.java index 51afb2155..cf39f77f1 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/remote/api/IResponseCallback.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/remote/api/IResponseCallback.java @@ -3,6 +3,7 @@ package it.niedermann.nextcloud.deck.remote.api; import androidx.annotation.CallSuper; import it.niedermann.nextcloud.deck.DeckLog; +import okhttp3.Headers; public interface IResponseCallback<T> { @@ -13,6 +14,9 @@ public interface IResponseCallback<T> { DeckLog.logError(throwable); } + default void onResponseWithHeaders(T response, Headers headers) { + onResponse(response); + } /** * @return a default {@link IResponseCallback} which does nothing {@link #onResponse(Object)} and the default action fo {@link #onError(Throwable)} */ diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/remote/api/NextcloudServerAPI.java b/app/src/main/java/it/niedermann/nextcloud/deck/remote/api/NextcloudServerAPI.java index 6f260f31a..d3856ddc6 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/remote/api/NextcloudServerAPI.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/remote/api/NextcloudServerAPI.java @@ -1,11 +1,8 @@ package it.niedermann.nextcloud.deck.remote.api; -import com.nextcloud.android.sso.api.ParsedResponse; - import java.util.List; -import io.reactivex.Observable; import it.niedermann.nextcloud.deck.model.ocs.Activity; import it.niedermann.nextcloud.deck.model.ocs.Capabilities; import it.niedermann.nextcloud.deck.model.ocs.comment.DeckComment; @@ -14,6 +11,7 @@ import it.niedermann.nextcloud.deck.model.ocs.projects.OcsProjectList; import it.niedermann.nextcloud.deck.model.ocs.user.GroupMemberUIDs; import it.niedermann.nextcloud.deck.model.ocs.user.OcsUser; import it.niedermann.nextcloud.deck.model.ocs.user.OcsUserList; +import retrofit2.Call; import retrofit2.http.Body; import retrofit2.http.DELETE; import retrofit2.http.GET; @@ -34,31 +32,31 @@ public interface NextcloudServerAPI { // Capabilities @GET("cloud/capabilities?format=json") - Observable<ParsedResponse<Capabilities>> getCapabilities(@Header("If-None-Match") String eTag); + Call<Capabilities> getCapabilities(@Header("If-None-Match") String eTag); // Projects @GET("collaboration/resources/deck-card/{cardId}?format=json") - Observable<OcsProjectList> getProjectsForCard(@Path("cardId") long cardId); + Call<OcsProjectList> getProjectsForCard(@Path("cardId") long cardId); // Users @GET("apps/files_sharing/api/v1/sharees?format=json&lookup=false&perPage=20&itemType=0%2C1%2C7") - Observable<OcsUserList> searchUser(@Query("search") String searchTerm); + Call<OcsUserList> searchUser(@Query("search") String searchTerm); @GET("cloud/groups/{search}?format=json") - Observable<GroupMemberUIDs> searchGroupMembers(@Path("search") String groupUid); + Call<GroupMemberUIDs> searchGroupMembers(@Path("search") String groupUid); @GET("cloud/users/{search}?format=json") - Observable<OcsUser> getSingleUserData(@Path("search") String userUid); + Call<OcsUser> getSingleUserData(@Path("search") String userUid); // Activities @GET("apps/activity/api/v2/activity/filter?format=json&object_type=deck_card&limit=50&since=-1&sort=asc") - Observable<List<Activity>> getActivitiesForCard(@Query("object_id") long cardId); + Call<List<Activity>> getActivitiesForCard(@Query("object_id") long cardId); // Comments @@ -68,26 +66,26 @@ public interface NextcloudServerAPI { "Content-Type: application/json;charset=utf-8" }) @GET("apps/deck/api/v1.0/cards/{cardId}/comments") - Observable<OcsComment> getCommentsForCard(@Path("cardId") long cardId); + Call<OcsComment> getCommentsForCard(@Path("cardId") long cardId); @Headers({ "Accept: application/json", "Content-Type: application/json;charset=utf-8" }) @POST("apps/deck/api/v1.0/cards/{cardId}/comments") - Observable<OcsComment> createCommentForCard(@Path("cardId") long cardId, @Body DeckComment comment); + Call<OcsComment> createCommentForCard(@Path("cardId") long cardId, @Body DeckComment comment); @Headers({ "Accept: application/json", "Content-Type: application/json;charset=utf-8" }) @PUT("apps/deck/api/v1.0/cards/{cardId}/comments/{commentId}") - Observable<OcsComment> updateCommentForCard(@Path("cardId") long cardId, @Path("commentId") long commentId, @Body DeckComment comment); + Call<OcsComment> updateCommentForCard(@Path("cardId") long cardId, @Path("commentId") long commentId, @Body DeckComment comment); @Headers({ "Accept: application/json", "Content-Type: application/json;charset=utf-8" }) @DELETE("apps/deck/api/v1.0/cards/{cardId}/comments/{commentId}") - Observable<Void> deleteCommentForCard(@Path("cardId") long cardId, @Path("commentId") long commentId); + Call<Void> deleteCommentForCard(@Path("cardId") long cardId, @Path("commentId") long commentId); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/remote/api/RequestHelper.java b/app/src/main/java/it/niedermann/nextcloud/deck/remote/api/RequestHelper.java index e7533b66c..6ed3cfb28 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/remote/api/RequestHelper.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/remote/api/RequestHelper.java @@ -2,59 +2,62 @@ package it.niedermann.nextcloud.deck.remote.api; import androidx.annotation.NonNull; -import io.reactivex.Observable; -import io.reactivex.disposables.Disposable; -import io.reactivex.functions.Consumer; -import io.reactivex.plugins.RxJavaPlugins; -import io.reactivex.schedulers.Schedulers; +import com.nextcloud.android.sso.exceptions.NextcloudHttpRequestFailedException; + import it.niedermann.nextcloud.deck.DeckLog; import it.niedermann.nextcloud.deck.util.ExecutorServiceProvider; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; public class RequestHelper { - static { - RxJavaPlugins.setErrorHandler(DeckLog::logError); - } +// static { +// RxJavaPlugins.setErrorHandler(DeckLog::logError); +// } - public static <T> Disposable request(@NonNull final ApiProvider provider, @NonNull final ObservableProvider<T> call, @NonNull final ResponseCallback<T> callback) { + public static <T> void request(@NonNull final ApiProvider provider, @NonNull final ObservableProvider<T> call, @NonNull final ResponseCallback<T> callback) { if (provider.getDeckAPI() == null) { provider.initSsoApi(callback::onError); } final ResponseConsumer<T> cb = new ResponseConsumer<>(callback); - return call.getObservableFromCall() - .subscribeOn(Schedulers.from(ExecutorServiceProvider.getLinkedBlockingQueueExecutor())) - .subscribe(cb, cb.getExceptionConsumer()); + ExecutorServiceProvider.getLinkedBlockingQueueExecutor().submit(() -> call.getObservableFromCall().enqueue(cb)); +// .subscribeOn(Schedulers.from(ExecutorServiceProvider.getExecutorService())) +// .subscribe(cb, cb.getExceptionConsumer()); } public interface ObservableProvider<T> { - Observable<T> getObservableFromCall(); + Call<T> getObservableFromCall(); } - public static class ResponseConsumer<T> implements Consumer<T> { + private static class ResponseConsumer<T> implements Callback<T> { @NonNull private final ResponseCallback<T> callback; - @NonNull - private final Consumer<Throwable> exceptionConsumer = new Consumer<>() { - @Override - public void accept(final Throwable throwable) { - callback.onError(ServerCommunicationErrorHandler.translateError(throwable)); - } - }; private ResponseConsumer(@NonNull ResponseCallback<T> callback) { this.callback = callback; } @Override - public void accept(final T t) { - callback.fillAccountIDs(t); - callback.onResponse(t); + public void onResponse(Call<T> call, Response<T> response) { + ExecutorServiceProvider.getLinkedBlockingQueueExecutor().submit( () -> { + if(response.isSuccessful()) { + T responseObject = response.body(); + callback.fillAccountIDs(responseObject); + callback.onResponseWithHeaders(responseObject, response.headers()); + } else { + onFailure(call, new NextcloudHttpRequestFailedException(response.code(), new RuntimeException("HTTP StatusCode wasn't 2xx"))); + } + }); } - @NonNull - private Consumer<Throwable> getExceptionConsumer() { - return exceptionConsumer; + @Override + public void onFailure(Call<T> call, Throwable t) { + ExecutorServiceProvider.getLinkedBlockingQueueExecutor().submit( () -> { + DeckLog.logError(t); + callback.onError(ServerCommunicationErrorHandler.translateError(t)); + }); } } } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/BoardDataProvider.java b/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/BoardDataProvider.java index cd8350535..c391fed4c 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/BoardDataProvider.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/BoardDataProvider.java @@ -5,8 +5,6 @@ import android.util.Pair; import androidx.lifecycle.MutableLiveData; -import com.nextcloud.android.sso.api.ParsedResponse; - import java.time.Instant; import java.util.ArrayList; import java.util.Collections; @@ -26,6 +24,7 @@ import it.niedermann.nextcloud.deck.remote.adapters.ServerAdapter; import it.niedermann.nextcloud.deck.remote.api.ResponseCallback; import it.niedermann.nextcloud.deck.remote.helpers.SyncHelper; import it.niedermann.nextcloud.deck.remote.helpers.util.AsyncUtil; +import okhttp3.Headers; public class BoardDataProvider extends AbstractSyncDataProvider<FullBoard> { @@ -46,15 +45,18 @@ public class BoardDataProvider extends AbstractSyncDataProvider<FullBoard> { public void getAllFromServer(ServerAdapter serverAdapter, DataBaseAdapter dataBaseAdapter, long accountId, ResponseCallback<List<FullBoard>> responder, Instant lastSync) { serverAdapter.getBoards(new ResponseCallback<>(responder.getAccount()) { @Override - public void onResponse(ParsedResponse<List<FullBoard>> response) { - progressTotal = response.getResponse().size(); + public void onResponse(List<FullBoard> response) {} + + @Override + public void onResponseWithHeaders(List<FullBoard> response, Headers headers) { + progressTotal = response.size(); updateProgress(); - String etag = response.getHeaders().get("ETag"); + String etag = headers.get("ETag"); if (etag != null && !etag.equals(account.getBoardsEtag())) { account.setBoardsEtag(etag); dataBaseAdapter.updateAccount(account); } - responder.onResponse(response.getResponse()); + responder.onResponse(response); } @SuppressLint("MissingSuperCall") |