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>2021-09-10 18:28:12 +0300
committerNiedermann IT-Dienstleistungen <stefan-niedermann@users.noreply.github.com>2021-09-10 19:44:25 +0300
commit62feba91cdaeacd980ca702fdd42fd8a3412dca1 (patch)
tree8b9729b1580bf3ec65073c3857471657d3d3a906 /app/src/main/java/it
parentc746af3af8779782ea7fe50480a9f91f1ee543e0 (diff)
#545 visualize progress - first try
Diffstat (limited to 'app/src/main/java/it')
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java9
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/AbstractSyncDataProvider.java4
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/BoardDataProvider.java29
3 files changed, 37 insertions, 5 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 2cc11c607..439ad5040 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
@@ -6,6 +6,7 @@ import static java.net.HttpURLConnection.HTTP_UNAVAILABLE;
import android.annotation.SuppressLint;
import android.content.Context;
import android.database.sqlite.SQLiteConstraintException;
+import android.util.Pair;
import androidx.annotation.AnyThread;
import androidx.annotation.ColorInt;
@@ -196,7 +197,8 @@ public class SyncManager {
}
@AnyThread
- public void synchronize(@NonNull ResponseCallback<Boolean> responseCallback) {
+ public LiveData<Pair<Integer, Integer>> synchronize(@NonNull ResponseCallback<Boolean> responseCallback) {
+ MutableLiveData<Pair<Integer, Integer>> progress$ = new MutableLiveData<>();
Account callbackAccount = responseCallback.getAccount();
if (callbackAccount == null) {
throw new IllegalArgumentException(Account.class.getSimpleName() + " object in given " + ResponseCallback.class.getSimpleName() + " must not be null.");
@@ -234,7 +236,7 @@ public class SyncManager {
});
executor.submit(() -> {
try {
- syncHelper.doUpSyncFor(new BoardDataProvider());
+ syncHelper.doUpSyncFor(new BoardDataProvider(progress$));
} catch (Throwable e) {
DeckLog.logError(e);
responseCallback.onError(e);
@@ -253,7 +255,7 @@ public class SyncManager {
syncHelper.setResponseCallback(callback);
try {
- syncHelper.doSyncFor(new BoardDataProvider());
+ syncHelper.doSyncFor(new BoardDataProvider(progress$));
} catch (Throwable e) {
DeckLog.logError(e);
responseCallback.onError(e);
@@ -277,6 +279,7 @@ public class SyncManager {
}
});
});
+ return progress$;
}
//
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/AbstractSyncDataProvider.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/AbstractSyncDataProvider.java
index e7542fb8b..4c538c56e 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/AbstractSyncDataProvider.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/AbstractSyncDataProvider.java
@@ -17,8 +17,8 @@ public abstract class AbstractSyncDataProvider<T extends IRemoteEntity> {
@Nullable
protected AbstractSyncDataProvider<?> parent;
- private final List<AbstractSyncDataProvider<?>> children = new ArrayList<>();
- private boolean stillGoingDeeper = false;
+ protected final List<AbstractSyncDataProvider<?>> children = new ArrayList<>();
+ protected boolean stillGoingDeeper = false;
public AbstractSyncDataProvider(@Nullable AbstractSyncDataProvider<?> parent) {
this.parent = parent;
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 fbde8333a..cc299ba8d 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
@@ -1,6 +1,9 @@
package it.niedermann.nextcloud.deck.persistence.sync.helpers.providers;
import android.annotation.SuppressLint;
+import android.util.Pair;
+
+import androidx.lifecycle.MutableLiveData;
import com.nextcloud.android.sso.api.ParsedResponse;
@@ -25,15 +28,26 @@ import it.niedermann.nextcloud.deck.persistence.sync.helpers.util.AsyncUtil;
public class BoardDataProvider extends AbstractSyncDataProvider<FullBoard> {
+ private int progressCount = 0;
+ private int progressTotal = 0;
+ private MutableLiveData<Pair<Integer, Integer>> progress = null;
+
public BoardDataProvider() {
super(null);
}
+ public BoardDataProvider(MutableLiveData<Pair<Integer, Integer>> progress) {
+ this();
+ this.progress = progress;
+ }
+
@Override
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();
+ updateProgress();
String etag = response.getHeaders().get("ETag");
if (etag != null && !etag.equals(account.getBoardsEtag())) {
account.setBoardsEtag(etag);
@@ -50,6 +64,21 @@ public class BoardDataProvider extends AbstractSyncDataProvider<FullBoard> {
});
}
+ private void updateProgress() {
+ if (progress != null) {
+ progress.postValue(Pair.create(progressCount, progressTotal));
+ }
+ }
+
+ @Override
+ public void childDone(AbstractSyncDataProvider<?> child, ResponseCallback<Boolean> responseCallback, boolean syncChangedSomething) {
+ super.childDone(child, responseCallback, syncChangedSomething);
+ if (!stillGoingDeeper && children.isEmpty()) {
+ progressCount++;
+ updateProgress();
+ }
+ }
+
@Override
public FullBoard getSingleFromDB(DataBaseAdapter dataBaseAdapter, long accountId, FullBoard entity) {
return dataBaseAdapter.getFullBoardByRemoteIdDirectly(accountId, entity.getEntity().getId());