diff options
author | desperateCoder <echotodevnull@gmail.com> | 2020-05-25 22:38:18 +0300 |
---|---|---|
committer | desperateCoder <echotodevnull@gmail.com> | 2020-05-25 22:38:18 +0300 |
commit | ae537258366c91c183e3329673ed7ae797d877ee (patch) | |
tree | 06454d34f733803ef2ac0bed7893828593ca259d /app/src/main/java/it/niedermann/nextcloud/deck/persistence | |
parent | 13ab14c2d2f7f8ef1b04f3cf94664db1829d6b56 (diff) |
#495 archive all cards of a stack
Diffstat (limited to 'app/src/main/java/it/niedermann/nextcloud/deck/persistence')
-rw-r--r-- | app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java | 61 |
1 files changed, 57 insertions, 4 deletions
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 265015d57..37ffd9742 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 @@ -765,13 +765,66 @@ public class SyncManager { } public WrappedLiveData<FullCard> archiveCard(FullCard card) { - card.getCard().setArchived(true); - return updateCard(card); + WrappedLiveData<FullCard> liveData = new WrappedLiveData<>(); + doAsync(() -> { + Account account = dataBaseAdapter.getAccountByIdDirectly(card.getAccountId()); + FullStack stack = dataBaseAdapter.getFullStackByLocalIdDirectly(card.getCard().getStackId()); + Board board = dataBaseAdapter.getBoardByLocalIdDirectly(stack.getStack().getBoardId()); + card.getCard().setArchived(true); + updateCardForArchive(account, stack, board, card, getCallbackToLiveDataConverter(account, liveData)); + }); + return liveData; + } + + private void updateCardForArchive(Account account, FullStack stack, Board board, FullCard card, IResponseCallback<FullCard> callback) { + new DataPropagationHelper(serverAdapter, dataBaseAdapter).updateEntity(new CardDataProvider(null, board, stack), card, callback); } public WrappedLiveData<FullCard> dearchiveCard(FullCard card) { - card.getCard().setArchived(false); - return updateCard(card); + WrappedLiveData<FullCard> liveData = new WrappedLiveData<>(); + doAsync(() -> { + Account account = dataBaseAdapter.getAccountByIdDirectly(card.getAccountId()); + FullStack stack = dataBaseAdapter.getFullStackByLocalIdDirectly(card.getCard().getStackId()); + Board board = dataBaseAdapter.getBoardByLocalIdDirectly(stack.getStack().getBoardId()); + card.getCard().setArchived(false); + updateCardForArchive(account, stack, board, card, getCallbackToLiveDataConverter(account, liveData)); + }); + return liveData; + } + public WrappedLiveData<Void> archiveCardsInStack(long accountId, long stackLocalId) { + WrappedLiveData<Void> liveData = new WrappedLiveData<>(); + doAsync(() -> { + Account account = dataBaseAdapter.getAccountByIdDirectly(accountId); + FullStack stack = dataBaseAdapter.getFullStackByLocalIdDirectly(stackLocalId); + Board board = dataBaseAdapter.getBoardByLocalIdDirectly(stack.getStack().getBoardId()); + List<FullCard> cards = dataBaseAdapter.getFullCardsForStackDirectly(accountId, stackLocalId); + if (cards.size() > 0) { + CountDownLatch latch = new CountDownLatch(cards.size()); + for (FullCard card : cards) { + updateCardForArchive(account, stack, board, card, new IResponseCallback<FullCard>(account) { + @Override + public void onResponse(FullCard response) { + latch.countDown(); + } + + @Override + public void onError(Throwable throwable) { + latch.countDown(); + liveData.postError(throwable); + } + }); + } + try { + latch.await(); + liveData.postValue(null); + } catch (InterruptedException e) { + liveData.postError(e); + } + } else { + liveData.postValue(null); + } + }); + return liveData; } public void archiveBoard(Board board) { |