From 4f461a13a4dfd941ecb8ec8337bf1410103c85f9 Mon Sep 17 00:00:00 2001 From: desperateCoder Date: Sun, 22 Nov 2020 12:10:11 +0100 Subject: #687 better server-unavailable handling --- .../nextcloud/deck/api/IResponseCallback.java | 1 + .../deck/persistence/sync/SyncManager.java | 25 ++++++++++++++++++---- .../sync/helpers/providers/CardDataProvider.java | 11 +++++++--- 3 files changed, 30 insertions(+), 7 deletions(-) (limited to 'app/src/main/java/it') diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/api/IResponseCallback.java b/app/src/main/java/it/niedermann/nextcloud/deck/api/IResponseCallback.java index ddb16cd23..be3eaeb22 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/api/IResponseCallback.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/api/IResponseCallback.java @@ -35,6 +35,7 @@ public abstract class IResponseCallback { public void onResponse(T response) { // Do Nothing } + }; } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java index 4d1829193..c86f65340 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java @@ -1053,8 +1053,8 @@ public class SyncManager { // } @AnyThread - public LiveData createFullCard(long accountId, long localBoardId, long localStackId, @NonNull FullCard card) { - MutableLiveData liveData = new MutableLiveData<>(); + public WrappedLiveData createFullCard(long accountId, long localBoardId, long localStackId, @NonNull FullCard card) { + WrappedLiveData liveData = new WrappedLiveData<>(); doAsync(() -> { Account account = dataBaseAdapter.getAccountByIdDirectly(accountId); User owner = dataBaseAdapter.getUserByUidDirectly(accountId, account.getUserName()); @@ -1091,11 +1091,28 @@ public class SyncManager { } } - liveData.postValue(card); + if (serverAdapter.hasInternetConnection()) { new SyncHelper(serverAdapter, dataBaseAdapter, null) - .setResponseCallback(IResponseCallback.getDefaultResponseCallback(account)) + .setResponseCallback(new IResponseCallback(account) { + @Override + public void onResponse(Boolean response) { + liveData.postValue(card); + } + + @SuppressLint("MissingSuperCall") + @Override + public void onError(Throwable throwable) { + if (throwable.getClass() == DeckException.class && ((DeckException)throwable).getHint().equals(DeckException.Hint.DEPENDENCY_NOT_SYNCED_YET)) { + liveData.postValue(card); + } else { + liveData.postError(throwable); + } + } + }) .doUpSyncFor(new CardDataProvider(null, board, stack)); + } else { + liveData.postValue(card); } }); return liveData; diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/CardDataProvider.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/CardDataProvider.java index 338b689f8..0ceac2cd8 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/CardDataProvider.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/CardDataProvider.java @@ -1,5 +1,7 @@ package it.niedermann.nextcloud.deck.persistence.sync.helpers.providers; +import android.annotation.SuppressLint; + import java.time.Instant; import java.util.ArrayList; import java.util.Collections; @@ -55,6 +57,7 @@ public class CardDataProvider extends AbstractSyncDataProvider { } } + @SuppressLint("MissingSuperCall") @Override public void onError(Throwable throwable) { responder.onError(throwable); @@ -151,12 +154,13 @@ public class CardDataProvider extends AbstractSyncDataProvider { @Override public void createOnServer(ServerAdapter serverAdapter, DataBaseAdapter dataBaseAdapter, long accountId, IResponseCallback responder, FullCard entity) { if (stack.getId() == null) { - throw new DeckException(DeckException.Hint.DEPENDENCY_NOT_SYNCED_YET, "Stack for this Card is not synced yet. Perform a full sync (pull to referesh) as soon as you are online again."); + responder.onError(new DeckException(DeckException.Hint.DEPENDENCY_NOT_SYNCED_YET, "Stack \"" + + stack.getStack().getTitle() + "\" for Card \"" + entity.getCard().getTitle() + + "\" is not synced yet. Perform a full sync (pull to refresh) as soon as you are online again.")); + return; } entity.getCard().setStackId(stack.getId()); -// if (board != null && stack != null && board.getId() != null && stack.getId() != null) { serverAdapter.createCard(board.getId(), stack.getId(), entity.getCard(), responder); -// } else DeckLog.error("Skipped card creation due to missing remote ID"); } @Override @@ -327,6 +331,7 @@ public class CardDataProvider extends AbstractSyncDataProvider { // do not delete, it's still there and was just moved! } + @SuppressLint("MissingSuperCall") @Override public void onError(Throwable throwable) { if (!(throwable instanceof OfflineException)) { -- cgit v1.2.3