diff options
author | desperateCoder <echotodevnull@gmail.com> | 2023-04-13 16:51:09 +0300 |
---|---|---|
committer | desperateCoder <echotodevnull@gmail.com> | 2024-01-03 16:12:53 +0300 |
commit | d059a8b9c2ad7ec4421719195fd8b8650caa2d89 (patch) | |
tree | 1a1ff2f1f1e740fcb8fc3e6cb28aa10da0e10825 /app/src/main/java/it/niedermann/nextcloud/deck/remote | |
parent | 57b3f7568ac1afc687eb1e7b07b9012551d748c0 (diff) |
import boards sequentially
Diffstat (limited to 'app/src/main/java/it/niedermann/nextcloud/deck/remote')
-rw-r--r-- | app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/SyncHelper.java | 33 | ||||
-rw-r--r-- | app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/BoardDataProvider.java | 26 |
2 files changed, 58 insertions, 1 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/SyncHelper.java b/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/SyncHelper.java index 846c7cf0e..7f5d166d9 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/SyncHelper.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/SyncHelper.java @@ -1,5 +1,7 @@ package it.niedermann.nextcloud.deck.remote.helpers; +import android.annotation.SuppressLint; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -43,6 +45,9 @@ public class SyncHelper { // Sync Server -> App public <T extends IRemoteEntity> void doSyncFor(@NonNull final AbstractSyncDataProvider<T> provider) { + doSyncFor(provider, true); + } + public <T extends IRemoteEntity> void doSyncFor(@NonNull final AbstractSyncDataProvider<T> provider, boolean parallel) { provider.registerChildInParent(provider); provider.getAllFromServer(serverAdapter, dataBaseAdapter, accountId, new ResponseCallback<>(account) { @Override @@ -74,7 +79,33 @@ public class SyncHelper { } } existingEntity = provider.getSingleFromDB(dataBaseAdapter, accountId, entityFromServer); - provider.goDeeper(SyncHelper.this, existingEntity, entityFromServer, responseCallback); + final T tmp = existingEntity; + if (parallel) { + provider.goDeeper(SyncHelper.this, existingEntity, entityFromServer, responseCallback); + } else { + DeckLog.verbose("### SYNC Sequencial!"+tmp.getId()); + CountDownLatch latch = new CountDownLatch(1); + provider.goDeeper(SyncHelper.this, existingEntity, entityFromServer, new ResponseCallback<>(responseCallback.getAccount()) { + @Override + public void onResponse(Boolean response) { + DeckLog.verbose("### SYNC board "+tmp.getId()+" done! Changes: "+response); + latch.countDown(); + } + + @SuppressLint("MissingSuperCall") + @Override + public void onError(Throwable throwable) { + DeckLog.verbose("### SYNC board done (error)! "); + responseCallback.onError(throwable); + latch.countDown(); + } + }); + try { + latch.await(); + } catch (InterruptedException e) { + onError(e); + } + } } provider.handleDeletes(serverAdapter, dataBaseAdapter, accountId, response); 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 c391fed4c..cae7d0dce 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 @@ -30,8 +30,11 @@ public class BoardDataProvider extends AbstractSyncDataProvider<FullBoard> { private int progressTotal = 0; private int progressDone = 0; + private boolean isParallel = true; private MutableLiveData<Pair<Integer, Integer>> progress = null; + private ResponseCallback<Boolean> stepByStepCallback; + public BoardDataProvider() { super(null); } @@ -39,6 +42,12 @@ public class BoardDataProvider extends AbstractSyncDataProvider<FullBoard> { public BoardDataProvider(MutableLiveData<Pair<Integer, Integer>> progress) { this(); this.progress = progress; + + } + + public BoardDataProvider(MutableLiveData<Pair<Integer, Integer>> progress$, boolean isParallel) { + this(progress$); + this.isParallel = isParallel; } @Override @@ -161,6 +170,9 @@ public class BoardDataProvider extends AbstractSyncDataProvider<FullBoard> { @Override public void goDeeper(SyncHelper syncHelper, FullBoard existingEntity, FullBoard entityFromServer, ResponseCallback<Boolean> callback) { + if (!isParallel) { + stepByStepCallback = callback; + } List<Label> labels = entityFromServer.getLabels(); if (labels != null && !labels.isEmpty()) { syncHelper.doSyncFor(new LabelDataProvider(this, existingEntity.getBoard(), labels)); @@ -176,6 +188,20 @@ public class BoardDataProvider extends AbstractSyncDataProvider<FullBoard> { if (entityFromServer.getStacks() != null && !entityFromServer.getStacks().isEmpty()) { syncHelper.doSyncFor(new StackDataProvider(this, existingEntity)); + } +} + + @Override + public void childDone(AbstractSyncDataProvider<?> child, ResponseCallback<Boolean> responseCallback, boolean syncChangedSomething) { + removeChild(child); + if (!stillGoingDeeper && children.isEmpty()) { + if (parent != null) { + parent.childDone(this, responseCallback, syncChangedSomething); + } else { + responseCallback.onResponse(syncChangedSomething); + } + } else if (!isParallel && children.isEmpty()) { + stepByStepCallback.onResponse(syncChangedSomething); } } |