From c7baac004f02456c4544b127921b8d187b2d6363 Mon Sep 17 00:00:00 2001 From: desperateCoder Date: Sat, 14 Dec 2019 18:00:24 +0100 Subject: #167: should fix NPE on label creation --- .../deck/persistence/sync/helpers/SyncHelper.java | 22 +++++++++++++++++++--- .../sync/helpers/providers/BoardDataProvider.java | 10 +++++++++- 2 files changed, 28 insertions(+), 4 deletions(-) (limited to 'app/src') diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/SyncHelper.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/SyncHelper.java index 6ceafea12..c86eaf27a 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/SyncHelper.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/SyncHelper.java @@ -2,6 +2,7 @@ package it.niedermann.nextcloud.deck.persistence.sync.helpers; import java.util.Date; import java.util.List; +import java.util.concurrent.CountDownLatch; import it.niedermann.nextcloud.deck.DeckLog; import it.niedermann.nextcloud.deck.api.IResponseCallback; @@ -76,21 +77,30 @@ public class SyncHelper { // Sync App -> Server public void doUpSyncFor(AbstractSyncDataProvider provider){ + doUpSyncFor(provider, null); + } + public void doUpSyncFor(AbstractSyncDataProvider provider, CountDownLatch countDownLatch){ List allFromDB = provider.getAllChangedFromDB(dataBaseAdapter, accountId, lastSync); if (allFromDB != null && !allFromDB.isEmpty()) { for (T entity : allFromDB) { if (entity.getId()!=null) { if (entity.getStatusEnum() == DBStatus.LOCAL_DELETED) { provider.deleteOnServer(serverAdapter, accountId, getDeleteCallback(provider, entity), entity, dataBaseAdapter); + if (countDownLatch != null){ + countDownLatch.countDown(); + } } else { - provider.updateOnServer(serverAdapter, dataBaseAdapter, accountId, getUpdateCallback(provider, entity), entity); + provider.updateOnServer(serverAdapter, dataBaseAdapter, accountId, getUpdateCallback(provider, entity, countDownLatch), entity); } } else { - provider.createOnServer(serverAdapter, dataBaseAdapter, accountId, getUpdateCallback(provider, entity), entity); + provider.createOnServer(serverAdapter, dataBaseAdapter, accountId, getUpdateCallback(provider, entity, countDownLatch), entity); } } } else { provider.goDeeperForUpSync(this, serverAdapter, dataBaseAdapter, responseCallback); + if (countDownLatch != null){ + countDownLatch.countDown(); + } } } @@ -110,7 +120,7 @@ public class SyncHelper { }; } - private IResponseCallback getUpdateCallback(AbstractSyncDataProvider provider, T entity) { + private IResponseCallback getUpdateCallback(AbstractSyncDataProvider provider, T entity, CountDownLatch countDownLatch) { return new IResponseCallback(account) { @Override public void onResponse(T response) { @@ -119,12 +129,18 @@ public class SyncHelper { update.setStatus(DBStatus.UP_TO_DATE.getId()); provider.updateInDB(dataBaseAdapter, accountId, update, false); provider.goDeeperForUpSync(SyncHelper.this, serverAdapter, dataBaseAdapter, responseCallback); + if (countDownLatch != null){ + countDownLatch.countDown(); + } } @Override public void onError(Throwable throwable) { super.onError(throwable); responseCallback.onError(throwable); + if (countDownLatch != null){ + countDownLatch.countDown(); + } } }; } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/BoardDataProvider.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/BoardDataProvider.java index 5e5b071f1..bd13645d7 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/BoardDataProvider.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/BoardDataProvider.java @@ -6,7 +6,9 @@ import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.concurrent.CountDownLatch; +import it.niedermann.nextcloud.deck.DeckLog; import it.niedermann.nextcloud.deck.api.IResponseCallback; import it.niedermann.nextcloud.deck.model.AccessControl; import it.niedermann.nextcloud.deck.model.Board; @@ -100,10 +102,16 @@ public class BoardDataProvider extends AbstractSyncDataProvider { public void goDeeperForUpSync(SyncHelper syncHelper, ServerAdapter serverAdapter, DataBaseAdapter dataBaseAdapter, IResponseCallback callback) { Long accountId = callback.getAccount().getId(); List