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:
authordesperateCoder <echotodevnull@gmail.com>2023-03-23 13:46:57 +0300
committerdesperateCoder <echotodevnull@gmail.com>2024-01-03 16:12:46 +0300
commitdbba1654ad6c61288251d63a08392ccd54fca789 (patch)
tree23cb3f2f976bcbe7244e4a6d5c72d0194af4b392 /app/src/main/java/it/niedermann/nextcloud/deck/remote
parentf460b92cfbc273c0fede4ef5f8aee29c87878c52 (diff)
move from observables to calls (get rid of RxJava) -> WIP
Diffstat (limited to 'app/src/main/java/it/niedermann/nextcloud/deck/remote')
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/remote/adapters/ServerAdapter.java5
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/remote/api/DeckAPI.java76
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/remote/api/IResponseCallback.java4
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/remote/api/NextcloudServerAPI.java24
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/remote/api/RequestHelper.java57
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/BoardDataProvider.java14
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")